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

求助:限制用户仅在指定区域创建Amazon S3存储桶的策略失效

排查S3特定区域创建桶的IAM策略问题

我来帮你搞定这个问题!你的IAM策略没法让用户创建桶,核心原因是us-east-1作为S3默认区域的特殊行为,你的条件判断没覆盖所有合法的创建场景。

问题根源

当在us-east-1创建S3桶时,不管用AWS控制台还是CLI,绝大多数场景下都不会显式传递LocationConstraint参数(毕竟这是默认区域),甚至有些工具会传递空字符串。但你当前的策略只允许LocationConstraint等于us-east-1的请求,直接把那些没传参数的合法创建请求给拦截了,自然就没法创建任何桶。

修正后的IAM策略

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RegionSpecificS3BucketCreation",
      "Effect": "Allow",
      "Action": "s3:CreateBucket",
      "Resource": "arn:aws:s3:::*",
      "Condition": {
        "Or": [
          {
            "StringEquals": {
              "s3:LocationConstraint": "us-east-1"
            }
          },
          {
            "Null": {
              "s3:LocationConstraint": true
            }
          }
        ]
      }
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Sid": "VisualEditor2",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:HeadBucket"
      ],
      "Resource": "*"
    }
  ]
}

关键修改说明

我把原来单一的StringLike条件改成了Or组合,覆盖了两种合法的创建场景:

  • 允许显式指定LocationConstraint为us-east-1的请求(比如手动指定区域的创建操作)
  • 允许没有传递LocationConstraint参数的请求(这对应默认创建us-east-1桶的绝大多数场景)

验证建议

你可以让用户用这两种方式测试:

  • 不带区域参数创建:aws s3 mb s3://test-us-east-1-bucket(默认就是us-east-1,不会传区域参数)
  • 显式指定区域创建:aws s3 mb s3://test-us-east-1-bucket --region us-east-1
    这两种情况都应该能成功创建桶,而尝试在其他区域(比如us-west-2)创建时会被拒绝,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:20