如何编写S3存储桶策略禁止文件夹批量删除但允许单个删除与下载
解决方案
你可以通过配置S3存储桶的IAM权限策略实现需求,核心逻辑是拦截S3批量删除的底层API调用,保留单文件操作权限:
- 允许所有用户调用
GetObject接口实现单个文件下载 - 允许所有用户调用
DeleteObject接口实现单个文件删除 - 拒绝所有用户调用
DeleteObjects接口,S3控制台批量删除、CLI/SDK批量删除、选中整个文件夹删除的底层都依赖该接口,禁止该接口即可完全拦截批量删除行为
示例存储桶策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::your-bucket-name/folder1/*", "arn:aws:s3:::your-bucket-name/folder2/*" ], "Principal": "*" }, { "Effect": "Deny", "Action": "s3:DeleteObjects", "Resource": [ "arn:aws:s3:::your-bucket-name/folder1/*", "arn:aws:s3:::your-bucket-name/folder2/*" ], "Principal": "*" } ] }
配置说明
- 请将策略中的
your-bucket-name替换为你实际使用的S3存储桶名称 - IAM策略中Deny规则优先级高于所有Allow规则,即使用户原有权限包含
s3:DeleteObjects,也会被该策略拦截 - 如果需要将规则应用到整个存储桶,直接将Resource字段的值改为
arn:aws:s3:::your-bucket-name/*即可 - 如果需要限定只有特定用户/角色受该规则限制,可以调整
Principal字段的ARN范围,不需要作用于所有用户可以删除"Principal": "*"改为指定ARN列表
内容的提问来源于stack exchange,提问作者KdPisda
相关产品推荐
相关产品推荐

