登录AWS账号后浏览器访问S3存储桶遇ACCESS_DENIED错误排查
S3存储桶策略ACCESS_DENIED错误原因及解决提示
错误原因
你的存储桶策略仅对桶内对象(arn:aws:s3:::MY-BUCKET/*)授予了全量权限,但通过浏览器或AWS控制台访问存储桶时,除了对象的读写权限,还需要对存储桶本身执行s3:ListBucket这类桶级操作的权限。当前策略未包含桶级资源(arn:aws:s3:::MY-BUCKET),所以即便是账号root用户,也无法完成列表存储桶内容、通过控制台导航访问对象等操作,最终返回ACCESS_DENIED错误。
当你把Principal设为"*"时,存储桶变为公开访问,此时AWS的公共访问机制会自动放行必要的桶级操作(比如列表对象),所以能正常查看文件,但这种配置会带来严重的安全风险。
解决提示
修改存储桶策略,同时包含桶级和对象级资源,并补充对应的必要权限:
方案一:合并资源与权限
"Statement": [ { "Sid": "Stmt1660020066047", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "s3:ListBucket", "s3:*" ], "Resource": [ "arn:aws:s3:::MY-BUCKET", "arn:aws:s3:::MY-BUCKET/*" ] } ]
方案二:拆分桶与对象权限(更清晰)
"Statement": [ { "Sid": "AllowBucketList", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::MY-BUCKET" }, { "Sid": "AllowObjectAllActions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": "s3:*", "Resource": "arn:aws:s3:::MY-BUCKET/*" } ]
另外,也可以直接给root用户附加IAM权限策略,这种方式对于账号内的用户权限管理会更直观。
内容的提问来源于stack exchange,提问作者Davis
相关产品推荐
相关产品推荐

