如何解决执行AWS CLI命令访问S3时的Access Denied错误?
AWS S3 ls命令AccessDenied问题排查与解决
核心原因:IAM用户策略资源范围不全
你给IAM用户配置的策略里,Resource只写了arn:aws:s3:::BUCKET_NAME/*(仅覆盖桶内对象),但aws s3 ls调用的ListObjectsV2操作,需要的是桶本身的权限(arn:aws:s3:::BUCKET_NAME)。S3的列表类操作(比如ListBucket、ListObjectsV2)对应的资源是桶ARN,不是对象ARN。
把IAM用户策略修改为包含桶本身的ARN即可:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3permission", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] }
额外排查方向
- 检查IAM边界策略:如果你的IAM用户设置了边界策略,可能会限制管理员权限,确认边界没有拒绝S3相关操作。
- 查看S3块公共访问:虽然IAM用户访问不受公共访问设置影响,但极端配置可能冲突,检查桶的「阻止公共访问」选项是否异常。
- 确认桶ACL:桶策略允许访问的前提下,ACL如果有明确拒绝设置也会导致权限问题。
- 核对CLI配置文件:执行
aws configure list,确认当前使用的配置文件对应你的目标IAM用户,避免用错配置。 - 排查IAM策略冲突:如果用户附加了其他策略,比如存在拒绝S3访问的策略,拒绝策略优先级高于允许策略,会导致权限被限制。
内容的提问来源于stack exchange,提问作者sundowatch
相关产品推荐
相关产品推荐

