启用版本控制的S3 Bucket调用list-object-versions遇AccessDenied问题
问题解决:跨账号S3 ListObjectVersions权限被拒绝
核心问题:桶权限策略存在JSON语法错误
你提供的桶权限策略里,Test_get这个Statement没有正确闭合,导致整个策略无法被AWS解析,外部用户的权限根本没生效。
错误位置
在Test_get的Statement末尾:
"Resource": "arn:aws:s3:::sourcebucket/*",
这里缺少一个}来闭合当前Statement,导致JSON结构断裂。
修正后的完整策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Test_list", "Effect": "Allow", "Principal": { "AWS": "<user arn>" }, "Action": [ "s3:ListBucket", "s3:ListBucketVersions", "s3:GetBucketVersioning" ], "Resource": "arn:aws:s3:::sourcebucket" }, { "Sid": "Test_get", "Effect": "Allow", "Principal": { "AWS": "<user arn>" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:::sourcebucket/*" }, { "Sid": "Test_get-bucket-location", "Effect": "Allow", "Principal": { "AWS": "<user arn>" }, "Action": "s3:GetBucketLocation", "Resource": "arn:aws:s3:::sourcebucket" } ] }
其他需要确认的点
- 确保你执行命令时用的桶名
my-bucket和策略里的sourcebucket是同一个,别出现桶名不一致的情况。 - 用桶所有者账号验证版本控制状态:
确认返回结果里aws s3api get-bucket-versioning --bucket your-bucket-nameStatus字段为Enabled。 - 检查IAM用户所在账号是否有全局拒绝S3操作的策略(比如组织SCP或IAM拒绝策略),不过你已经给了
AmazonS3FullAccess,这种概率极低。
内容的提问来源于stack exchange,提问作者pyCthon
相关产品推荐
相关产品推荐

