生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

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

    评论

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

    《面试1v1》java注解

    JavaPub

    Java 面试 注解

    玩转云端| 天翼云边缘安全加速平台AccessOne实用窍门之多款产品管理难?一站式平台管理全hold住!

    天翼云开发者社区

    云计算 云平台 边缘安全

    PostgreSQL技术内幕(九)libpq通信协议

    酷克数据HashData

    成功MLOps具有的五大共同特征

    这我可不懂

    机器学习

    高效运营新纪元:智能化华为云Astro低代码重塑组装式交付

    华为云PaaS服务小智

    云计算 软件开发 华为云 华为开发者大会2023

    从Vue到无限可能:数智时代下的低代码快速开发之旅

    快乐非自愿限量之名

    架构 Vue 低代码 数智化

    华为云出品《IDEA-Plugin-开发手册》电子书——学完即会场景设计

    华为云PaaS服务小智

    开发者 华为云 编程学习 华为开发者大会2023

    2023全球数字经济大会召开,天翼云携手产业链共建开放共赢云生态

    天翼云开发者社区

    云计算

    Cilium 流量治理功能与部署实践

    谐云

    直播 | SDS 容灾方案,让制品数据更安全

    CODING DevOps

    社区新手小伙伴测评第二弹 | 使用 ChatGPT 可以帮助完成 IoTDB 的写入和查询吗?

    Apache IoTDB

    时序数据库 IoTDB Apache IoTDB ChatGPT

    CDN与前端技术

    天翼云开发者社区

    前端 CDN

    数智革命下的开发利器:探索云原生技术与低代码的超强结合!

    加入高科技仿生人

    云原生 低代码

    详解:为什么瓴羊QuickBI被誉为国内口碑最好的BI工具

    巷子

    数智时代加速!云存储与低代码开发:超强联盟引领技术革新

    不在线第一只蜗牛

    低代码 云存储

    汽车ECU软件开发之应用层软件与底层软件

    DevOps和数字孪生

    汽车ECU 仿真建模

    《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,夯实底层基础 —— 吃透class字节码文件技术基底和实现原理(核心结构剖析)

    洛神灬殇

    Java JVM 深入理解JVM 挖掘底层原理

    私有化部署这件事儿

    高端章鱼哥

    低代码 私有化部署 JNPF

    华为开发者大会:软件开发小白的华为云云上初体验

    YG科技

    窥探AI图像安全技术:守护数智时代的无形盾牌与低代码的魔术师

    EquatorCoco

    AI 低代码 ChatGPT 图像安全

    什么是从人类反馈中强化学习(RLHF)?

    高端章鱼哥

    LLM RLHF 大语言模型

    用ChatGPT搞定12 种编程语言:看看它的表现如何

    互联网工科生

    人工智能 编程语言 ChatGPT

    强化学习是否言过其实?

    高端章鱼哥

    强化学习 计算机程序

    敏捷开发流程及项目实战分享

    谐云

    面向Web开发人员的Linux实用入门

    互联网工科生

    Linux 运维 Web

    适配各类大模型应用!手把手教你选择 Zilliz Cloud 实例类型

    Zilliz

    Milvus Zilliz 向量数据库 zillzicloud

    2023-07-13:如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串。 花括号展开的表达式可以看作一个由 花括号、逗号 和 小写英文字母 组成的字符串 定义下面几条语

    福大大架构师每日一题

    福大大架构师每日一题

    阿里内部 SpringCloud Alibaba(全彩版)开源,P8 大牛纯手打造

    采菊东篱下

    Java 程序员 微服务

    机器学习之PyTorch和Scikit-Learn第一章 赋予计算机学习数据的能力

    Alan

    人工智能 机器学习 PyTorch scikit-learn

    机器学习之PyTorch和Scikit-Learn第2章 为分类训练简单机器学习算法

    Alan

    人工智能 机器学习 PyTorch scikit-learn 多层感知机

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