如何为S3存储桶配置FULL_CONTROL ACL 授权用户访问删除失败如何排查
你配置的桶ACL语法本身没有问题,权限不生效通常是以下几个原因导致的:
- 存储桶禁用了ACL:目前AWS新创建的S3存储桶默认开启「桶所有者强制执行(Bucket owner enforced)」的对象所有权规则,该模式下所有ACL都会被禁用,无论怎么配置ACL都不会生效,这是当前最常见的原因。
- 授权对象不支持ACL规则:S3的ACL仅支持对整个AWS账户(根用户)、预定义用户组(如所有人、认证用户)授权,不支持对单个IAM用户授权。如果你说的user2是同一AWS账户下的IAM用户,或是其他账户下的IAM用户,通过ACL给该用户授权是不会生效的,必须改用IAM策略或存储桶策略完成授权。
- 混淆了桶ACL和对象ACL的作用范围:你配置的是桶层面的ACL,该权限仅覆盖桶级别的操作(比如查看桶配置、列举桶内对象),不覆盖桶内对象的操作权限。如果你要查看、删除桶内的具体对象,还需要对应对象的ACL给user2授权,或是通过桶策略统一授权对象级权限。
- Canonical ID填写错误:ACL中
Grantee的ID字段需要填写对应用户所属AWS账户的规范ID(Canonical User ID),不是IAM用户名、也不是AWS账户别名,填错的情况下授权自然不会生效。 - 其他权限规则拦截:AWS的权限评估优先级为 显式拒绝 > 组织SCP策略 > IAM权限策略 > 存储桶策略 > ACL,只要任意层级存在对user2对应操作的显式拒绝,或是IAM/桶策略层面没有给user2开放对应操作的允许权限,就算ACL配置正确也不会生效。
排查修复步骤
- 首先进入S3控制台对应存储桶的「权限」→「对象所有权」页面,确认是否开启了桶所有者强制执行:
- 若开启,建议直接改用存储桶策略完成授权,无需使用ACL,参考策略示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::USER2的AWS账户ID:root/或对应IAM用户的ARN"}, "Action": [ "s3:ListBucket", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::你的存储桶名称", "arn:aws:s3:::你的存储桶名称/*" ] } ] }
- 如果你一定要使用ACL,需要将对象所有权修改为「桶所有者首选」或「对象写入者」模式,且授权对象必须为AWS根账户。
- 核对你填写的USER2的Canonical ID是否正确,可在AWS控制台右上角点击账户名→「安全凭证」→下拉到「规范 ID」处查看正确值。
- 检查user2的IAM权限策略、存储桶策略、组织SCP策略,确认没有对对应操作的显式拒绝规则。
内容的提问来源于stack exchange,提问作者Lucifer
相关产品推荐
相关产品推荐

