写点什么

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

    评论

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

    精致女孩的护牙小心机,藏在这瓶冰泉漱口水里

    Geek_50a546

    [译] D8 优化: Assertions

    Antway

    6月日更

    数据结构——链表

    若尘

    数据结构 链表 6月日更

    实战!使用Docker在线安装OnlyOffice

    一个需求

    Docker onlyoffice

    JAVA 面向对象 (十五)-- 异常

    加百利

    Java 6月日更

    ☕️【Java技术之旅】【ConcurrentHashMap】深入浅出核心源码分析(JDK1.7版本)

    码界西柚

    Java 源码分析 ConcurrentHashMap 6月日更

    字节跳动异构场景下的高可用建设实践

    火山引擎开发者社区

    架构 后端

    数字货币将给我们的生活带来什么?

    CECBC

    带你掌握C++中三种类成员初始化方式

    华为云开发者联盟

    c++ 初始化 类成员初始化 声明时初始化 初始化列表

    唐庄酒业的酒怎么样?不输茅台特有面子!

    Geek_50a546

    带你认识4种设计模式:代理模式、装饰模式、外观模式和享元模式

    华为云开发者联盟

    设计模式 外观模式 代理模式 装饰模式 享元模式

    译文 | 新手PM指南:你应该避开的六大常见错误

    LigaAI

    产品 产品经理 产品设计

    如何使用 Distroless 让你的容器更加安全

    K8sCat

    flask Docker Kubernetes Google Distroless

    做好项目管理,项目经理需要具备哪些优秀品质?

    万事ONES

    项目管理 研发管理 IT ONES 项目经理

    Apache Dubbo 3.0.0 正式发布 - 全面拥抱云原生

    阿里巴巴中间件

    云计算 阿里云 开源 云原生 中间件

    手写Spring,定义标记类型Aware接口,实现感知容器对象

    小傅哥

    Java spring 小傅哥 aware

    架构实战营 - 群讨论汇总(2021)

    华仔

    #架构实战营

    项目管理复杂多变,如何成为一个好的项目经理?

    万事ONES

    项目管理 研发管理 ONES 开发管理

    我去,这是出BUG了呀!

    why技术

    Java dubbo 后端

    记一次MySQL磁盘满了之后清理的过程

    北游学Java

    Java MySQL

    阿里P10热荐,面试前必看!Java高并发编程五套“完美日记”GitHub已经标星78K

    Java架构追梦

    Java 阿里巴巴 架构 面试 并发编程

    直播连麦技术闭坑篇

    anyRTC开发者

    音视频 WebRTC 视频直播 视频通讯 视频连麦

    除了数据恢复,EasyRecovery还有这样的功能!

    淋雨

    文件恢复 Easyrecovery破解 硬盘数据恢复

    项目经理的主要工作有哪些?

    万事ONES

    项目管理 研发管理 ONES

    深度解读畅捷通云原生架构转型实战历程

    阿里巴巴云原生

    云原生

    唐庄酒业的酒怎么样?好的酱香酒就应该和它一样

    Geek_50a546

    线性表、顺序表和链表,你还分不清?

    华为云开发者联盟

    数组 链表 指针 线性表 顺序表

    技术实践:教你用Python搭建gRPC服务

    华为云开发者联盟

    Python gRPC 语言 移动应用开发 RPC框架

    我的企业安全观

    I

    安全架构 企业安全 组织架构 安全运营 安全协作

    智慧迪拜与不可或缺的区块链技术

    CECBC

    云小课 | 玩转HiLens Studio之快速订购HiLens Studio版本

    华为云开发者联盟

    AI modelarts 华为HiLens HiLens Studio EI智能体

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