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

如何限制KMS密钥仅被特定Cognito用户(联合身份ID)使用?

解决Cognito身份与IAM密钥策略关联的问题

Cognito身份确实没有IAM用户那样的直接ARN标识,要将密钥策略绑定到特定Cognito身份,核心是利用IAM策略的条件判断,通过Cognito专属的条件键来定位单个身份。

核心条件键说明

  • cognito-identity.amazonaws.com:sub:对应Cognito身份池里每个用户的唯一身份ID(sub属性),这是定位特定用户的关键。
  • cognito-identity.amazonaws.com:aud:指定身份池ID,用于限定策略仅对目标身份池内的身份生效,避免范围过大。

具体策略示例

以下是一个绑定单个Cognito身份到S3资源的策略模板:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-target-bucket/*",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:sub": "xxx-xxxx-xxxx-xxxx-xxxxxxxx",
          "cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
      }
    }
  ]
}

注意事项

  1. sub值可以在Cognito控制台的身份池 -> 身份浏览器中找到对应用户的详情信息。
  2. 如果是第三方联合身份(如Facebook、Google登录的用户),这里的sub是Cognito分配的唯一ID,而非第三方平台的用户ID。
  3. 若需授权多个Cognito身份,可使用ForAnyValue:StringEquals来批量指定sub值:
"Condition": {
  "ForAnyValue:StringEquals": {
    "cognito-identity.amazonaws.com:sub": ["sub-id-1", "sub-id-2", "sub-id-3"]
  },
  "StringEquals": {
    "cognito-identity.amazonaws.com:aud": "your-identity-pool-id"
  }
}

内容的提问来源于stack exchange,提问作者Stavros K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:20:32