如何在AWS S3中仅阻止特定路径层级的对象删除
AWS S3 特定层级删除权限控制方案
需求说明
存储桶路径结构如下:
- level0
- level1
- level2-A
- level3-A
- file1.ext
- file2.ext
- level3-A
- level2-B
- level3-B
- file1.ext
- file2.ext
- level3-B
- level2-A
- level1
要求:
- 允许删除level3层级及以下的所有对象(包括level3文件夹、内部文件及更深层级内容)
- 禁止删除level0、level1、level2层级的对象(level2名称未知,仅知晓level0和level1的名称)
错误策略分析
你之前尝试的策略未达到预期,原因是Deny规则范围不准确,且权限逻辑顺序不合理:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Sid1", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::<<my-bucket>>/*" ] }, { "Sid": "Sid2", "Effect": "Deny", "Action": [ "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::<<my-bucket>>/level0/level1/*/" ] } ] }
该策略仅拒绝删除level2文件夹对象,未明确允许level3及以下的删除权限,全局Allow s3:* 还可能引发权限逻辑冲突,最终导致所有内容无法删除。
正确权限策略
以下策略可精准实现你的需求:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDeleteLevel3AndBelow", "Effect": "Allow", "Action": "s3:DeleteObject", "Resource": "arn:aws:s3:::<<my-bucket>>/level0/level1/*/*" }, { "Sid": "DenyDeleteLevel0ToLevel2", "Effect": "Deny", "Action": "s3:DeleteObject", "Resource": [ "arn:aws:s3:::<<my-bucket>>/level0/", "arn:aws:s3:::<<my-bucket>>/level0/level1/", "arn:aws:s3:::<<my-bucket>>/level0/level1/*/" ] }, { "Sid": "AllowOtherS3Operations", "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::<<my-bucket>>/*" } ] }
策略说明
- AllowDeleteLevel3AndBelow:明确允许删除所有
level0/level1/[任意level2]/[任意level3]及更深层级的对象,通配符*可匹配任意字符(包括路径分隔符/),覆盖level3文件夹、内部文件及子层级内容。 - DenyDeleteLevel0ToLevel2:拒绝删除level0、level1文件夹对象,以及所有level2层级的文件夹对象(通过
level0/level1/*/匹配任意名称的level2文件夹)。 - AllowOtherS3Operations:允许除删除限制外的所有S3操作,确保用户可正常访问、上传其他层级内容。
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

