如何配置S3权限让组织内所有成员可访问他人上传的对象
解决方案
方案1:开启桶所有者强制执行(推荐,无需修改用户上传逻辑)
S3提供的「桶所有者强制执行」功能可以从根上解决对象所有权问题,开启后所有新上传到桶的对象所有权会强制归属桶所属的AWS账号,无需用户上传时额外加ACL参数。
操作步骤:
- 进入S3控制台,找到目标存储桶,切换到「权限」标签页
- 找到「对象所有权」配置模块,点击编辑
- 选择「桶所有者强制执行」选项,保存配置即可
配置生效后,你原有桶策略中授予的全局读权限会直接对sandbox目录下的所有新上传文件生效,组织内所有成员都可以读取其他成员上传的内容。
方案2:调整桶策略强制上传附带指定ACL(适合不想修改桶所有权配置的场景)
你之前添加Condition报错的原因是:s3:x-amz-acl条件仅对PutObject、PutObjectAcl这类写入操作有效,不能和GetObject等读操作放在同一条策略语句中,需要拆分读写权限为独立语句:
- 保留原有全局只读的策略语句不变
- 将sandbox目录的权限拆分为两条独立语句:
- 第一条为sandbox目录的只读权限,无需加Condition
- 第二条为sandbox目录的写入权限,单独添加ACL校验条件,参考配置如下:
{ "Sid": "ForceSandboxUploadWithBucketOwnerFullControl", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::1234:root"] }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::my-bucket/sandbox/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } }
该配置会拒绝所有未携带bucket-owner-full-controlACL的上传请求,确保所有新上传的文件都给桶所有者开放了全控权限,原有全局读策略即可正常生效。
注意事项
- 以上两种方案仅对配置生效后新上传的文件有效,sandbox目录中已存在的旧文件需要桶所有者执行批量操作修改所有权/ACL后才能被其他成员读取。
- 方案2需要组织所有成员上传sandbox文件时必须携带
--acl bucket-owner-full-control参数,否则会上传失败。
内容的提问来源于stack exchange,提问作者sousvide
相关产品推荐
相关产品推荐

