AWS OpenSearch(ES7.10)为何默认使用Cognito Auth角色而非组关联角色
解决Elasticsearch集群优先使用Cognito组关联AdminRole的问题
以下是针对你的问题的具体排查和解决步骤:
1. 验证Cognito身份池的角色解析规则
- 登录AWS控制台,进入目标Cognito身份池的配置页面
- 检查身份验证提供商下的Cognito用户池配置,确认「角色解析」设置为根据令牌中的角色优先选择(或对应选项:优先使用Cognito组映射的角色)
- 再次确认AdminRole的优先级确实高于auth角色(你提到优先级为1,需确保没有配置错误)
2. 检查Elasticsearch的Cognito认证配置
- 登录新集群的Kibana,进入Stack Management > Security > Identity Providers
- 找到Cognito身份提供商的配置,确认已启用从JWT令牌中提取角色的设置:
- 确保
Roles key设置为cognito:groups(Cognito会将用户所属组信息放在JWT的该字段中) - 若通过
elasticsearch.yml配置,需确认存在以下参数:opendistro_security.authc.jwt.roles_key: cognito:groups
- 确保
3. 确认ES后端角色映射的准确性
- 在Kibana的Stack Management > Security > Role Mappings中,检查关联admin组的映射:
- 映射的「Backend roles」必须是Cognito管理员组的完整ARN,格式为:
arn:aws:cognito-idp:{region}:{account-id}:userpool/{userpool-id}/group/{group-name} - 确保该映射已关联到ES的
all_access和security_manager角色,且没有拼写错误(如区域、用户池ID等)
- 映射的「Backend roles」必须是Cognito管理员组的完整ARN,格式为:
4. 检查AdminRole的IAM信任关系
- 进入AWS IAM控制台,找到
cognito-AdminRole的信任策略,确认其允许Cognito身份池扮演该角色,示例策略如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "{你的身份池ID}" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] }
5. 验证JWT令牌内容
- 登录新集群时,通过浏览器开发者工具(Network面板)获取登录请求返回的JWT令牌
- 使用JWT解码工具(如本地离线工具)解析令牌,确认:
cognito:groups字段包含你的管理员组名称cognito:roles字段包含cognito-AdminRole的ARN- 若令牌中无AdminRole信息,问题出在Cognito身份池配置;若有但ES未识别,需检查ES的角色映射配置
6. 调整ES主用户配置
- 暂时保留auth角色作为新集群的主用户,完成上述配置修正后,再移除该主用户设置
- 重新登录测试,此时应自动使用Cognito组关联的AdminRole
内容的提问来源于stack exchange,提问作者peanutbatterballs
相关产品推荐
相关产品推荐

