如何配置AWS S3存储桶权限,使所有者仅可删除、仅指定用户可读
S3 高隐私场景权限配置方案
完全可以实现你要求的权限控制逻辑,无需用户掌握AWS/S3相关操作,仅需对方提供12位AWS账户ID即可完成配置。
核心实现逻辑
依托S3对象级权限与桶级权限分离的特性,通过「上传对象时指定专属ACL」+「桶策略限制所有者操作范围」的组合方案,即可实现:
- 上传完成后仅指定用户拥有对象读取权限,无其他额外操作权限
- 你方作为存储桶所有者仅拥有对象删除权限,无法读取文件内容、无法修改对象权限规则
具体操作步骤
- 预先收集用户的12位AWS账户ID,记为
TARGET_USER_ID - 作业运行完成输出数据到S3时,通过AWS CLI/SDK显式指定对象ACL,示例上传命令如下:
aws s3 cp /本地输出文件路径 s3://你的桶名/用户专属目录/输出文件名 \ --grant-read id=${TARGET_USER_ID} \ --acl private
- 在桶策略中添加如下规则,限制你方账户的操作范围,仅保留删除权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": {"AWS": "你方的AWS账户ARN"}, "Action": [ "s3:GetObject", "s3:PutObjectAcl", "s3:PutObjectVersionAcl" ], "Resource": "arn:aws:s3:::你的桶名/用户专属目录/*" }, { "Effect": "Allow", "Principal": {"AWS": "你方的AWS账户ARN"}, "Action": "s3:DeleteObject", "Resource": "arn:aws:s3:::你的桶名/用户专属目录/*" } ] }
效果验证
配置完成后权限逻辑如下:
- 你方账户尝试读取/下载对象、修改对象权限时,会返回403访问拒绝
- 你方账户可正常删除过期的用户输出文件
- 对应用户仅可读取、下载自己的输出文件,无删除、修改权限,也无法访问桶内其他文件
注意事项
- 不要开启桶的默认ACL继承,每次上传用户输出文件时都显式指定读权限仅对应用户
- 无需给用户分配任何桶级权限,仅通过对象ACL即可完成授权,用户不需要做任何额外配置
- 可将上述上传逻辑直接集成到作业完成的自动触发脚本中,无需人工干预
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

