写点什么

Amazon Elasticsearch Service 与 Cognito 集成轻松实现用户注册和访问控制

  • 2019-10-24
  • 本文字数:3309 字

    阅读完需:约 11 分钟

Amazon Elasticsearch Service 与 Cognito 集成轻松实现用户注册和访问控制

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

Elasticsearch 是针对大数据使用案例(如日志和点击流分析)的常见开源搜索和分析引擎。Amazon Elasticsearch Service 为您管理 Elasticsearch 集群的容量、扩展、修复和管理,同时让您可以直接访问 Elasticsearch API。


Amazon Cognito 能为我们提供简单安全的用户注册、登录和访问控制。借助 Amazon Cognito,您可以轻松将用户注册和身份验证功能添加到自己的移动和 Web 应用程序。Amazon Cognito 可与支持 SAML 或 OpenID Connect 的外部身份提供商和 Facebook、Twitter、Amazon 等社交身份提供商配合使用,同时您也可以将其与您自己的身份提供商相整合。


Kibana 是一种可以帮助您更好地了解数据的开源分析与可视化平台,而 Amazon Elasticsearch Service 附带对 Kibana 的内置支持。


Amazon Elasticsearch Service 现与 Amazon Cognito 集成,提供用户级的 Kibana 身份验证。


本文将为您演示如何通过简单的配置将 ES 与 Cognito 集成起来提供安全的用户注册、登录和访问控制。本文将演示两种认证方案:无代理服务器方案和代理服务器方案。

· 无代理服务器方案

通过 ES 提供的 Internet mode 直接访问,或者在 ES 的 VPC mode 下通过 VPN/Direct Connect 访问。


ES internet 模式的配置实现最简单,通过 AWS 控制台配置好就能立即使用,但由于直接暴露在公网上,需要做好安全配置。ES 的访问策略(access policy)可以限制或允许特定的用户访问 ES。



ES internet mode


ES 也可以配置在 VPC 模式下工作,但不能直接从外网访问。可以通过配置 VPN 或 Direct connect 的模式从 AWS 以外的地方访问。



VPC mode with VPN/Direct connect

· 代理服务器方案

ES 配置成 VPC mode 并部署在私有子网中,在 ES 同一 VPC 的公有子网中配置反向代理服务器(如 nginx 等),从而实现从 internet 的直接访问。



代理服务器方案

一. 无代理服务器方案 – Internet mode

Amazon Elasticsearch Service 提供了从 internet 直接访问的方案,与 Cognito 集成的配置方法如下:

第一步:创建 Cognito identity pool

  1. 从 AWS 管理控制台进入 Cognito,点击按钮 Manage Federated Identities 进入 Federated Identities 页面,然后点击 Create new identity pool 开始创建新的 identity pool

  2. 输入 Identity pool name, 如 idpool_test

  3. 勾选 Enable access to unauthenticated identities。请注意在配置 ES 与 identity pool 和 user pool 集成后,ES 将会自动禁用此选项以禁止匿名用户登录

  4. 点击 Create Pool 以创建 id pool



  1. 在显示的新页面中点击 View Details,默认情况下 Cognito 将会创建两个 IAM Role,authenticated identities role 和 unauthenticated identities role,请记下 authenticated identities role 的名字,在 ES 中将会用到。



  1. 点击 Allow 按钮以创建相应的 role。

  2. 回到 AWS 管理控制台,进入到 IAM role 界面中。查找并记下 Cognito 为我们创建的 authenticated identities role (上面第 5 步中)的 ARN


第二步:创建 Cognito user pool

  1. 从 AWS 管理控制台进入 Cognito user pool 管理页面,点击按钮 Create a user pool 开始创建一个新的 user pool

  2. 输入 Pool name, 如 userpool_test。



  1. 点击下面的 Review defaults 按钮进入 Review 页面,然后点击 Create pool 以创建 user pool。

  2. 创建成功后从左侧导航栏选择 App integration -> Domain name,在 Domain prefix 中填入一个有效的 Domain prefix。请注意这个域名前缀在当前 AWS Region 必须是唯一的,填好后点击右侧的 Check availability 按钮,如果上面出现 “This domain is available” 则说明该域名前缀有效。然后点击 Save changes 以保存设置。



  1. 现在可以创建一些测试用户了。从左侧导航栏选择 General settings -> Users and groups,然后点击右边页面中的 Create user,填入用户名初始密码等信息以创建新的用户。



第三步:创建 Elasticsearch Service

  1. 从 AWS 管理控制台进入 Elasticsearch Service 页面,点击 Create new domain 以开始创建新的 Elasticsearch 服务。

  2. 输入 Elasticsearch domain name,点击 Next 进入下一页

  3. 在 Configure user 页面中点击 Next 进入下一页

  4. 在 Setup access 页面中,选择 Public access



  1. 勾选 Enable Amazon Cognito for authentication,在 Cognito User Pool 和 Cognito Identity Pool 中分别选择上面两步骤中创建的 user pool 和 id pool。



  1. 在 Access Policy 中填入如下信息,将 $ARN_Cognito_IdPoolAuth_Role 替换成上面创建 Cognito identity pool 时第 7 步所查找到的 authenticated identities role 的 ARN。然后点击 Next, Confirm 以创建 ES


C


{    "Version": "2012-10-17",    "Statement": [{        "Effect": "Allow",        "Principal": {            "AWS": "$ARN_Cognito_IdPoolAuth_Role"        },        "Action": "es:ESHttp*",        "Resource": "*"    }]}
复制代码


  1. 后台创建 ES domain 可能需要几分钟时间,当 Domain status 变成 Active 时说明 ES 已经准备就绪了。

  2. 在创建好的 ES 页面中点击 Kibana 对应的 URL,然后输入创建 Cognito user pool 中新建的用户名密码就可以成功进入 Kibana 界面了!



二. 无代理服务器方案 – VPC mode

VPC mode 的配置与 Internet mode 基本一样,除了上面第三步创建 Elasticsearch Service 的 4 中选择 Network configuration 时需要选择 VPC access,并选择相应的 VPC、Subnet、Security Groups 等配置。



在 VPC 模式下,默认情况下无法从外网 (Internet) 访问 ES,可以配置 VPN 或者 Direct Connect 网络以从办公网络等 AWS 以外的地方访问。关于 VPN 和 Direct Connect 的配置,请参考 AWS 相应的文档。

三. 代理服务器方案


    请将 $server_domain 替换成 nginx 所在主机的 FQDN,如 ec2-52-74-123-123.ap-southeast-1.compute.amazonaws.com


    $es-auth 替换成 ES auth 的 URL,该 URL 可以从上面创建 Cognito user pool 的第 4 步中找到,如 es-test.auth.ap-southeast-1.amazoncognito.com


    $es-domain 替换成 ES 的 domain,可以从上面创建 Elasticsearch Service 的第 8 步中找到 Endpoint,如 search-es-test-sop76ebjpeotlpv22jy4cev3xy.ap-southeast-1.es.amazonaws.com


    Js


    server {        listen 443 ssl;        server_name $server_domain;        ssl_certificate ssl.crt;        ssl_certificate_key ssl.key;
    location /login { proxy_pass https://$es-auth/login; proxy_cookie_domain $es-auth $server_name; proxy_redirect https://$es-domain https://$server_name; }
    location / { proxy_pass https://$es-domain; proxy_redirect https://$es-auth https://$server_name; proxy_cookie_domain $es-domain $server_name; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; } }
    复制代码


    1. 重启 nginx 后就可以从 nginx 所在的 FQDN 登录 Kibana 了。

    参考资料:

    1. Amazon Cognito Authentication for Kibana

    2. Amazon Cognito User Pools

    3. Using Identity Pools (Federated Identities)

    4. nginx Beginner’s Guide


    作者介绍:


    何归丽


    AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广。加入 AWS 之前在惠普软件部门担任系统架构师,有十多年的软件研发和架构设计经验,在微服务架构和容器,企业应用信息安全,DevOps 等领域有丰富的经验。


    本文转载自 AWS 技术博客。


    原文链接:


    https://amazonaws-china.com/cn/blogs/china/amazon-elasticsearch-service-and-cognito-integration-easily-implement-user-registration-and-access-control/


    2019-10-24 08:00812

    评论

    发布
    暂无评论
    发现更多内容

    最全总结 | 聊聊 Python 数据处理全家桶(Mysql 篇)

    星安果

    Python MySQL 数据库 最全总结

    元旦首献!腾讯高工甩出的“MyBatis源码解析”传授你年薪百万级干货!

    比伯

    Java 编程 架构 面试 技术宅

    第十周-作业1

    Mr_No爱学习

    第十周-学习总结

    Mr_No爱学习

    重点人员管控系统开发大数据分析研判平台搭建

    t13823115967

    微警务

    我花费一年的时间明白大厂面试的残酷!也最终拿到蚂蚁金服offer,定级P7职位。

    Java架构之路

    Java 程序员 架构 面试 编程语言

    编程常用的加密方式

    皮蛋

    加密 加解密 加密技术

    51 张图助你彻底掌握 HTTP 协议

    Java架构师迁哥

    架构师训练营第十一周作业2

    韩儿

    食堂就餐卡系统设计

    跳蚤

    架构师系列 12 单向散列加密算法对用户密码加密

    桃花原记

    架构师训练营第十五周课程笔记及心得

    Airs

    性能优化-1-压测

    raox

    辞幕2020,前行2021

    iHTC

    程序员 中年危机 提升自我 年终总结 技术学习

    國際網路 商業因果-緣起

    因田木

    十二周作业

    solike

    UML实践

    Iris

    架构师训练营 4 期

    架构师训练营大作业二

    吴传禹

    架构师训练营第 1 期

    三面百度,四面字节跳动。我是怎么被百度吊打,又是怎么拿下字节offer的?(Java开发岗)

    Java架构之路

    Java 程序员 架构 面试 编程语言

    架构师培训第一周学习总结

    跳蚤

    架构师训练营第十一周作业1

    韩儿

    架构训练营第十一周作业

    一期一会

    高可用架构

    架构师训练营大作业一

    吴传禹

    架构师训练营第 1 期

    架构师训练营大作业一

    吴传禹

    架构师训练营第 1 期

    LeetCode题解:264. 丑数 II,二叉堆,JavaScript,详细注释

    Lee Chen

    算法 大前端 LeetCode

    AOP的姿势之 简化 MemoryCache 使用方式

    八苦-瞿昙

    C# aop cache

    第六周 技术选型(二) 课后作业

    简简单单

    第六周 学习总结

    简简单单

    知识改变命运,你相信这句话吗?

    熊斌

    成长 演讲 教育

    公安微警务APP开发,移动警务系统建设方案

    t13823115967

    大数据

    [架构师训练营] 第一周学习总结

    Fango

    架构师训练营 4 期

    Amazon Elasticsearch Service 与 Cognito 集成轻松实现用户注册和访问控制_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章