求助:限制用户仅在指定区域创建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
相关产品推荐
相关产品推荐

