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

Cognito认证AWS临时用户仅访问自建S3桶的权限策略咨询

解决Cognito用户仅能访问自身创建S3桶的权限问题

嘿,我来帮你搞定这个权限隔离的需求!要实现「新用户初始看不到任何桶,创建自己的桶后只能访问自己的」,核心是把用户的Cognito身份和S3桶的命名绑定起来,用IAM条件来做精准匹配。下面是具体的思路和完整的策略方案:

先明确一个前提

得先约定用户创建桶的命名规则,比如要求桶名必须带上用户的唯一标识——比如Cognito的用户ID ${aws:userid},或者更唯一的Cognito身份ID ${cognito-identity.amazonaws.com:sub}。举个例子,桶名格式可以是 user-${aws:userid}-*(比如user-abc123-myphotos)。这个规则是策略生效的基础,确保用户只能操作属于自己的桶。

完整的IAM策略示例

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:CreateBucket",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "s3:BucketName": "user-${aws:userid}-*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "s3:ResourceAccount": "${aws:accountId}",
          "s3:BucketName": "user-${aws:userid}-*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::user-${aws:userid}-*",
        "arn:aws:s3:::user-${aws:userid}-*/*"
      ]
    }
  ]
}

策略细节解释

  1. 创建桶的权限:
    • 允许用户创建桶,但通过StringLike条件限制桶名必须以user-${aws:userid}-开头,这样用户只能创建属于自己的专属桶,没法乱建其他命名的桶。
  2. 列表桶的权限:
    • 虽然保留了ListAllMyBuckets和GetBucketLocation权限,但加了双重条件:只显示本AWS账号内、且符合命名规则的桶。新用户还没创建桶的时候,列表就是空的,完美符合你要的初始状态;创建桶后,只会看到自己的那个桶。
  3. 桶的操作权限:
    • 给用户开放所有S3操作权限,但仅限符合命名规则的桶及其内部对象。这样用户可以完全管理自己的桶,上传、下载、删除都没问题,但碰不到别人的桶。

额外小提示

  • 如果你想用Cognito用户名代替aws:userid,可以换成${cognito-identity.amazonaws.com:username},不过要注意用户名可能有重复风险,更推荐用唯一的身份ID ${cognito-identity.amazonaws.com:sub}。
  • 如果担心用户不遵守命名规则,可以配合S3桶策略或者AWS组织的SCP(服务控制策略),强制所有桶的命名必须符合规则,从根源上杜绝乱建的情况。
  • 要是你不需要用户自己创建桶,而是系统自动为每个用户生成桶,那可以删掉CreateBucket那一段权限,直接用同样的条件策略给用户分配对应桶的操作权限就行。

内容的提问来源于stack exchange,提问作者Manish Goyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:27:30