我不希望 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 集群
完成以下步骤:
-
打开 Cognito 控制台。
-
选择您的用户池,然后选择 Create user(创建用户)。
-
创建一个用户,例如命名为 limited-user。
-
为 limited-user 创建 AWS Identity and Access management (IAM) 角色,例如 LimitedUserRole。作为主用户,使用该 IAM 角色为特定用户分配有限访问权限。
-
将以下信任策略附加到 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。
-
附加以下向 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。
-
创建一个组,例如命名为 limited-user-group,然后将 LimitedUserRole IAM 角色分配给该组。
-
选择 limited-user-group,然后将 limited-user 和其他用户添加到该组。
在 OpenSearch 控制面板上将 limited-user 映射到角色
- 以主用户身份登录 OpenSearch 控制面板。
- 选择 Security(安全)。
- 选择 Roles(角色),然后选择您的角色。或者,创建一个新角色。有关更多信息,请参阅 OpenSearch 网站上的 Create roles(创建角色)。
**注意:**您也可以使用预定义角色 readall_and_monitor 或 readall。有关更多信息,请参阅 OpenSearch 网站上的 Predefined roles(预定义角色)。
- 将该角色映射到 limited-user。
- 以 limited-user 身份登录。
**注意:**您无法在 OpenSearch 控制面板上执行写入操作。