教程:使用 IAM 主用户和 Amazon Cognito 身份验证配置域 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:使用 IAM 主用户和 Amazon Cognito 身份验证配置域

本教程介绍了一个用于精细访问控制的常见亚马逊 OpenSearch 服务用例:对控制面板采用 Amazon Cognito 身份验证的 IAM 主用户。 OpenSearch

在本教程中,我们将配置一个 IAM 角色和一个受限 IAM 角色,然后将其与 Amazon Cognito 中的用户关联。然后,主用户可以登录控制 OpenSearch 面板,将受限用户映射到角色,并使用精细的访问控制来限制用户的权限。

尽管这些步骤使用 Amazon Cognito 用户池进行身份验证,但相同的基本流程适用于任何 Cognito 身份验证提供商,从而允许您将不同的 IAM 角色分配给不同的用户。

在本教程中,您将完成以下步骤:

步骤 1:创建主 IAM 角色和受限 IAM 角色

导航到 Amazon Identity and Access Management (IAM) 控制台并创建两个单独的角色:

  • MasterUserRole:主用户,它将拥有针对集群的完全权限,并可管理角色和角色映射。

  • LimitedUserRole:更受限制的角色,您将以主用户身份为其授予有限访问权限。

有关创建角色的说明,请参阅使用自定义信任策略创建角色

这两个角色都必须具有以下信任策略,允许您的 Cognito 身份池代入这些角色:

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "{identity-pool-id}" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } }] }
注意

identity-pool-id 替换为您的 Amazon Cognito 身份池的唯一标识符。例如,us-east-1:0c6cdba7-3c3c-443b-a958-fb9feb207aa6

步骤 2:使用 Cognito 身份验证创建域

通过 https://console.aws.amazon.com/aos/home/ 导航到亚马逊 OpenSearch 服务控制台,然后使用以下设置创建一个域名

  • OpenSearch 1.0 或更高版本,或 Elasticsearch 7.8 或更高版本

  • 公有访问权限

  • 以主用户(在上一步中创建)身份借助 MasterUserRole 启用的精细访问控制

  • 控制面板启用了 Amazon Cognito 身份验证。 OpenSearch 有关启用 Cognito 身份验证以及选择用户和身份池的说明,请参阅 将域配置为使用 Amazon Cognito 身份验证

  • 以下域访问策略:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::{account-id}:role/*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:{region}:{account-id}:domain/{domain-name}/*" } ] }
  • 所有到达域的流量所需的 HTTPS

  • N ode-to-node 加密

  • 静态数据加密

步骤 3:配置 Cognito 用户

创建域时,请按照 Amazon Cognito开发人员指南中的创建用户池配置 Amazon Cognito 的主用户和受限用户。最后,按照在 Amazon Cognito 中创建身份池中的步骤配置您的身份池。用户池和身份池必须在同一个 Amazon Web Services 区域中。

步骤 4:在 OpenSearch 仪表板中映射角色

现在,您的用户已配置完毕,您可以以主用户身份登录 OpenSearch 仪表板并将用户映射到角色。

  1. 返回 OpenSearch 服务控制台并导航到您创建的域名的控制 OpenSearch 面板 URL。URL 遵循此格式:domain-endpoint/_dashboards/

  2. 使用 master-user 凭证登录。

  3. 选择 Add sample data(添加示例数据),然后添加示例飞行数据。

  4. 在左侧导航窗格中,选择 Security(安全性)、Roles(角色)、Create role(创建角色)。

  5. 将角色命名为 new-role

  6. 对于 Index(索引),指定 opensearch_dashboards_sample_data_fli*(Elasticsearch 域上的 kibana_sample_data_fli*)。

  7. 对于 Index permissions(索引权限),选择 read(读取)。

  8. 对于 Document Level Security Query (文档级安全查询),请指定以下查询:

    { "match": { "FlightDelay": true } }
  9. 对于字段级安全性,请选择 Exclude(不包括)并指定 FlightNum

  10. 对于匿名,指定 Dest

  11. 选择 创建

  12. 选择映射的用户管理映射。为 LimitedUserRole 添加 Amazon 资源名称(ARN)作为外部标识,然后选择 Map(映射)。

  13. 返回角色列表,然后选择 opensearch_dashboards_user。选择映射的用户管理映射。为 LimitedUserRole 添加 ARN 作为后端角色,然后选择映射

步骤 5:测试权限

角色正确映射后,您可以以受限用户身份登录并测试权限。

  1. 在新的私有浏览器窗口中,导航到该域的 OpenSearch 仪表板网址,使用limited-user凭据登录,然后选择自己浏览

  2. 转到 Dev Tools (开发人员工具),然后运行原定设置搜索:

    GET _search { "query": { "match_all": {} } }

    请注意权限错误。limited-user 没有运行集群范围内搜索的权限。

  3. 运行另一个搜索:

    GET opensearch_dashboards_sample_data_flights/_search { "query": { "match_all": {} } }

    请注意,在所有匹配的文档中,有一个为 trueFlightDelay 字段,一个匿名化的 Dest 字段,但没有 FlightNum 字段。

  4. 在原始浏览器窗口中,以 master-user 身份登录,选择 Dev Tools (开发人员工具),然后执行相同的搜索。请注意权限、命中数、匹配文档和包含字段的差异。