跳至内容

如何向使用 OpenSearch 访问 Amazon Cognito 用户池的用户分配只读权限?

2 分钟阅读
0

我不希望 Amazon Cognito 用户在使用 OpenSearch 控制面板时拥有对用户池的完全访问权限。

解决方法

已关闭具有精细访问控制的域

如果您未对 OpenSearch 域启用精细访问控制,则使用 OpenSearch 集群的域访问策略来限制访问权限。该策略向您的 Cognito 用户提供只读访问权限。将 ESHttpGet 权限设置为与 Cognito 登录关联的角色。

具有 ESHttpGet 权限的域访问策略示例:

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:role/Cognito_identity-pool-name Auth_Role"
      },
      "Action": "es:ESHttpGet",
      "Resource": "arn:aws:es:region:account-id:domain/opensearch-domain-name/"
    }
  ]
}

**注意:**将 account-id 替换为您的 AWS 账户 ID,将 identity-pool-name 替换为您的 Cognito 身份池名称。此外,将 region 替换为您的 AWS 区域,将 opensearch-domain-name 替换为您的 OpenSearch 域名。

有关更多信息,请参阅配置域以使用 Amazon Cognito 身份验证

应用策略后,对其进行测试,然后向您的域发送签名请求,确认您只能对该域执行 GET 操作。

已启用精细访问控制的 OpenSearch 集群

完成以下步骤:

  1. 打开 Cognito 控制台

  2. 选择您的用户池,然后选择 Create user(创建用户)。

  3. 创建一个用户,例如命名为 limited-user

  4. limited-user 创建 AWS Identity and Access management (IAM) 角色,例如 LimitedUserRole。作为主用户,使用该 IAM 角色为特定用户分配有限访问权限。

  5. 将以下信任策略附加到 LimitedUserRole

    {  "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 替换为您的 Cognito 身份池 ID。

  6. 附加以下向 OpenSearch 域授予只读权限的自定义内联策略:

    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowOpenSearchReadAccess",
          "Effect": "Allow",
          "Action": [
            "es:ESHttpGet"
          ],
          "Resource": "arn:aws:es:region:account-id:domain/"
        }
      ]
    }

    **注意:**将 region 替换为您的区域,将 account-id 替换为您的账户 ID。

  7. 创建一个组,例如命名为 limited-user-group,然后将 LimitedUserRole IAM 角色分配给该组

  8. 选择 limited-user-group,然后将 limited-user 和其他用户添加到该组。

在 OpenSearch 控制面板上将 limited-user 映射到角色

  1. 以主用户身份登录 OpenSearch 控制面板。
  2. 选择 Security(安全)。
  3. 选择 Roles(角色),然后选择您的角色。或者,创建一个新角色。有关更多信息,请参阅 OpenSearch 网站上的 Create roles(创建角色)。
    **注意:**您也可以使用预定义角色 readall_and_monitorreadall。有关更多信息,请参阅 OpenSearch 网站上的 Predefined roles(预定义角色)。
  4. 将该角色映射到 limited-user
  5. limited-user 身份登录。
    **注意:**您无法在 OpenSearch 控制面板上执行写入操作。
AWS 官方已更新 1 年前