写点什么

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

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

    阅读完需:约 11 分钟

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

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:001154

    评论

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

    Discord x Pulsar: 使用Pulsar、Flink和Iceburg搭建流式机器学习平台

    AscentStream

    机器学习 flink pulsar Discord

    Word可以转PPT吗,如何进行?4个AI工具大盘点

    职场工具箱

    人工智能 PPT 办公软件 AIGC AI生成PPT

    苏州八大机房20A机柜租用价格范围?应用场景及成功案例分享

    苏州服务器托管

    苏州服务器托管 苏州机柜租用 IDC机房托管

    基于开发者空间GaussDB数据库的分区表项目实践

    华为云开发者联盟

    Gauss DB I/O 调度 华为开发者空间

    抖音视频详情API秘籍!轻松获取视频详情数据

    tbapi

    抖音API 抖音视频数据采集 抖音视频详情API

    小度 X Atwell筑格酒店,共创高端智能化酒店新体验

    科技大数据

    即时通讯|BeeWorks企业im系统,生态互连重塑企业协同办公

    BeeWorks

    即时通讯 IM 私有化部署

    mybatis中<if>条件判断带数字的字符串失效问题

    刘大猫

    人工智能 算法 智慧城市 智慧交通 大模型

    采购议标关键指标:如何评估业务系统的低代码能力?

    星云低代码中间件

    低代码 数字化转型 企业应用 招投标

    龙蜥社区第 35 次运营委员会会议圆满结束

    OpenAnolis小助手

    操作系统 龙蜥社区 OpenAnolis

    把数据分析主导权交给业务,Aloudata Agent 面向全行业公开体验

    Aloudata

    数据分析 agent 指标平台 ChatBI

    SEO第二十章 产品经理也需要理解SEO

    溪抱鱼

    html SEO

    大数据-73 Kafka 事务与幂等性详解:配置、原理与实战案例全解析

    武子康

    Java 大数据 kafka 分布式 消息队列

    基于开发者空间GaussDB完成AI智能索引和参数自调优实践

    华为云开发者联盟

    sql Gauss DB 华为开发者空间

    主流内网聊天工具,谁才是企业的最佳选择?

    BeeWorks

    即时通讯 IM 私有化部署

    内网聊天工具私有化IM选择指南,BeeWorks可能适合你

    BeeWorks

    即时通讯 IM 私有化部署

    Apache Doris 在菜鸟的大规模湖仓业务场景落地实践

    SelectDB

    数据仓库 数据分析 LakeHouse 湖仓一体 菜鸟

    CST电路监视器第二讲-CST软件教程

    思茂信息

    cst CST软件 CST Studio Suite

    实战揭秘|魔搭社区 + 阿里云边缘云 ENS,快速部署大模型的落地实践

    阿里云CloudImagine

    云计算 边缘计算 大模型 ens 大模型落地

    Apache Doris 4.0 AI 能力揭秘(一):AI 函数之 LLM 函数介绍

    SelectDB

    实时数仓 Apaache Doris LLM 数据库 大数据 AI 函数

    仓颉之函数的魔法宝典

    华为云开发者联盟

    函数 仓颉 华为开发者空间

    内网聊天软件,帮助企业快速构建专属聊天APP!

    BeeWorks

    即时通讯 IM 私有化部署

    仓颉之泛型和扩展的神奇天地

    华为云开发者联盟

    CodeArts 仓颉 华为开发者空间

    备受关注的“操作系统开源与 AI 进化”分论坛来了 | 2025 云栖大会

    OpenAnolis小助手

    操作系统 云栖大会 龙蜥社区 OpenAnolis

    构建全面 GRC 策略的三大关键能力|ADManager Plus 助您实现合规与安全并重

    运维有小邓

    诺亚ARK 最新CIO报告:科技型通缩正重塑资产配置

    财见

    LLM 中 token 简介与 bert 实操解读

    地平线开发者

    自动驾驶 算法工具链 地平线征程6

    哈尔滨等保测评价格构成与影响因素解析

    等保测评

    哈尔滨等保测评:不同行业系统的测评重点差异

    等保测评

    开发者空间FastGPT问答系统实战:知识库检索 x 联网搜索

    华为云开发者联盟

    AI 框架 FastGPT 华为开发者空间

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