如何通过Bucket Policy或IAM Policy限制AWS S3用户创建文件夹?
限制AWS S3用户创建模拟文件夹的实现方案
可以实现这个需求。AWS S3中没有真正的“文件夹”概念,所谓的文件夹只是通过以斜杠(/)结尾的空对象模拟出来的。因此,只要禁止用户创建这类特殊对象,就能达到禁止创建文件夹的效果。以下是具体配置方案:
方案一:通过IAM Policy(附加到User1用户)
直接在User1的IAM权限中添加策略,明确允许上传、下载对象,同时拒绝创建以/结尾的空对象:
{ "Version": "2012-10-17", "Statement": [ // 允许下载指定前缀下的对象 { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*" }, // 允许上传指定前缀下的非文件夹对象 { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*" }, // 拒绝创建以/结尾的空对象(即模拟文件夹) { "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*/", "Condition": { "Null": { "s3:x-amz-content-sha256": "true" } } }, // 可选:允许列出指定文件夹下的内容(如果需要用户查看文件列表) { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::your-bucket-name", "Condition": { "StringLike": { "s3:prefix": "target-folder/*" } } } ] }
策略说明
s3:GetObject允许用户下载目标文件夹下的所有对象s3:PutObject允许上传对象,但后续的Deny语句会拦截创建以/结尾的空对象- Deny语句中的
Null条件用于判断是否是空对象(上传空对象时s3:x-amz-content-sha256会为空),结合资源路径*/精准拦截模拟文件夹的创建 - 可选的
s3:ListBucket权限用于让用户在控制台或工具中查看文件夹内的文件列表
方案二:通过Bucket Policy(附加到目标存储桶)
如果希望在存储桶层面统一控制权限,可以使用Bucket Policy,指定Principal为User1的ARN:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account-id:user/User1" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account-id:user/User1" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*" }, { "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::your-account-id:user/User1" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*/", "Condition": { "Null": { "s3:x-amz-content-sha256": "true" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account-id:user/User1" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::your-bucket-name", "Condition": { "StringLike": { "s3:prefix": "target-folder/*" } } } ] }
注意事项
- 替换策略中的
your-bucket-name为实际存储桶名称,your-account-id为AWS账号ID,target-folder为目标文件夹前缀 - IAM Policy和Bucket Policy二选一即可,推荐使用IAM Policy,因为它直接绑定到用户,权限控制更精准
- 如果用户之前已有其他S3相关权限,需要确保新策略不会与现有权限冲突(Deny权限优先级高于Allow)
内容的提问来源于stack exchange,提问作者Landerson
相关产品推荐
相关产品推荐

