教程:IAM 主用户和 Amazon Cognito - Amazon Opensearch Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

教程:IAM 主用户和 Amazon Cognito

本教程介绍了一个常见的精细访问控制用例:具有针对 OpenSearch 控制面板的 Amazon Cognito 身份验证的 IAM 主用户。尽管这些步骤使用 Amazon Cognito 用户池进行身份验证,但相同的基本流程适用于任何 Cognito 身份验证提供商,从而允许您将不同的 IAM 角色分配给不同的用户。

注意

本教程假定您有两个现有 IAM 角色,一个用于主用户,另一个用于更受限的用户。如果您没有两个角色,请创建它们

开始使用精细访问控制

  1. 使用以下设置创建域

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

    • 公有访问权限

    • 已启用精细访问控制,并将 IAM 角色作为主用户(在本教程的其余内容中,为 IAMMasterUserRole

    • 启用 OpenSearch 控制面板的 Amazon Cognito 身份验证

    • 以下访问策略:

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

    • 节点到节点加密

    • 静态数据加密

  2. 导航到 IAM 控制台,然后选择 Roles (角色)

  3. 选择 IAMMasterUserRole 并转到 Trust relationships (信任关系)选项卡。

  4. 选择 Edit trust relationship (编辑信任关系),并确保 Amazon 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" } } }] }
  5. 选择 Update Trust Policy

  6. 将相同的信任策略添加到第二个 IAM 角色(对于本教程的其余部分,为 IAMLimitedUserRole)。

  7. 导航到 Amazon Cognito 控制台,选择管理用户池

  8. 选择您的用户池,然后选择 Users and groups (用户和组)

  9. 选择 Create user (创建用户),指定用户名 master-user 和密码,然后选择 Create user (创建用户)

  10. 创建另一个名为 limited-user 的用户。

  11. 转到 Groups (组)选项卡,然后选择 Create group (创建组)

  12. 命名组 master-user-group,选择 IAMMasterUserRole 中的IAM 角色下拉列表,然后选择创建组

  13. 创建另一个名为 limited-user-group 的组,该组使用 IAMLimitedUserRole

  14. 选择 master-user-group,再选择 Add users (添加用户),然后添加 master-user

  15. 选择 limited-user-group,再选择 Add users (添加用户),然后添加 limited-user

  16. 选择 App client settings (应用程序客户端设置),并记下域的应用程序客户端 ID。

  17. 选择 Federated Identities (联合身份),再选择您的身份池,然后选择 Edit identity pool (编辑身份池)

  18. 展开 Authentication providers (身份验证提供商),查找域的用户池 ID 和应用程序客户端 ID,然后将 Use default role (使用默认角色) 更改为 Choose role from token (从令牌中选择角色)

  19. 对于 Role resolution (角色解析),选择 DENY (拒绝)。在使用此设置时,用户必须位于组中才能在身份验证后接收 IAM 角色。

  20. 选择 Save Changes

  21. 导航到OpenSearch 控制面板。

  22. 使用 master-user 进行登录。

  23. 选择 Add sample data(添加示例数据)并添加一些示例飞行数据。

  24. 选择安全角色创建角色

  25. 将角色命名为 new-role

  26. 对于索引权限,为索引模式指定 opensearch_dashboards_sample_data_fli*(Elasticsearch 域上的 kibana_sample_data_fli*)。

  27. 对于操作组,请选择读取

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

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

  30. 对于匿名,指定 Dest

  31. 选择创建

  32. 选择映射的用户管理映射。然后为 IAMLimitedUserRole 添加 ARN 作为外部标识,然后选择映射

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

  34. 在新的私有浏览器窗口中,导航到控制面板,使用 limited-user 进行登录,然后选择 Explore on my own (自行浏览)

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

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

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

  36. 运行另一个搜索:

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

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

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