You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用Cognito认证后访问AWS Elasticsearch端点遭遇`anonymous is not authorized to perform: es:ESHttpGet`错误的排查求助

解决AWS Elasticsearch(OpenSearch)Cognito认证后的匿名访问权限问题

看到你遇到了{"Message":"User: anonymous is not authorized to perform: es:ESHttpGet"}的错误,结合你已经配置了Cognito认证但还是无法访问的情况,我来梳理下可能遗漏的配置步骤和修复方法:

1. 确认Cognito与ES域的关联是否完整

首先要确保你在ES域的细粒度访问控制设置里,已经正确绑定了Cognito用户池和身份池:

  • 登录AWS控制台,进入你的Elasticsearch(OpenSearch)域详情页
  • 找到**“Fine-grained access control”**(细粒度访问控制)选项,确认“Amazon Cognito authentication”已经启用,并且选择了正确的用户池和身份池
  • 这里要注意:如果你启用了细粒度访问控制,ES会优先用它来做权限校验,而你提供的资源策略(JSON配置)主要是用来控制哪些请求能到达ES服务,两者需要配合使用

2. 调整ES资源访问策略

你当前的策略指定了Cognito认证角色作为Principal,但可以优化一下,添加条件确保请求来自已认证的Cognito身份,同时覆盖所有需要的HTTP操作:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<<Account_Number>>:role/Cognito_kibana_identitiesAuth_Role"
      },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:us-east-2:<<Account_Number>>:domain/<<Domain_Name>>/*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/cognito-identity-id": "${cognito-identity-id}"
        }
      }
    }
  ]
}

另外,如果你启用了细粒度访问控制,还需要在ES内部(或通过Kibana)给Cognito认证的用户/组分配具体的权限,比如all_access或者针对特定索引的read/write权限——资源策略只是放行请求,细粒度策略才控制用户能操作哪些数据。

3. 确保请求携带Cognito认证凭证

直接在浏览器访问ES端点是不会自动带上Cognito身份的,你需要通过正确的方式发起请求:

  • 优先通过Kibana访问:Kibana已经集成了Cognito的认证流程,登录Kibana后发起的请求会自动带上认证凭证
  • 如果用Postman/curl等工具,需要先通过Cognito获取ID Token,然后在请求头里添加Authorization: Bearer <你的Cognito_ID_Token>,或者用AWS SigV4签名请求(取决于你的ES认证配置)

4. 检查Cognito认证角色的信任关系

打开IAM控制台,找到你的Cognito_kibana_identitiesAuth_Role,检查它的信任策略是否允许Cognito身份池的认证用户Assume这个角色,正确的信任策略应该类似:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "<你的Cognito身份池ID>"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "authenticated"
        }
      }
    }
  ]
}

如果信任关系配置错误,Cognito认证后的用户无法获取到这个角色的权限,请求就会被判定为匿名访问。

内容的提问来源于stack exchange,提问作者Vidhya Dhara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:49:54