S3:ListAllBuckets在AWS控制台可用但CLI执行报权限拒绝
问题描述
背景
已配置正确的aws-access-key和aws-secret-key,可在AWS控制台查看存储桶内容,但使用AWS CLI和boto3代码时存在问题。
我的boto3代码
import boto3 # 输入你的S3存储桶名称 bucket_name = 'xxxx' # 输入存储桶所在的区域名称 region_name = 'ap-southeast-1' # 创建S3客户端 s3 = boto3.client('s3', region_name=region_name) # 列出存储桶中的所有对象 objects = s3.list_objects(Bucket=bucket_name) # 打印所有对象的名称 for object in objects['Contents']: print(object['Key'])
我的AWS策略已包含s3:List*权限,但尝试使用AWS CLI列出所有存储桶时失败,报错如下:
An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
请问我遗漏了什么配置?
解决方案
- 权限作用范围不匹配:
s3:List*如果仅授权给单个存储桶资源,无法覆盖ListBuckets操作——这个是账户级别的全局操作,必须单独指定权限,且资源要设为"*"。 - 修正后的IAM策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBuckets", "s3:List*" ], "Resource": "*" } ] }
- 额外注意点:
- 若只需访问特定存储桶,
s3:List*可以限定到该桶的ARN(比如arn:aws:s3:::xxxx/*),但ListBuckets必须保留"*"作为资源,因为它是查询账户下所有桶的全局操作。 - 确认IAM用户/角色已正确关联修正后的策略,避免策略未生效。
- 检查是否存在拒绝策略(Deny),IAM中拒绝策略优先级高于允许策略,可能会覆盖你的权限配置。
- 若只需访问特定存储桶,
内容的提问来源于stack exchange,提问作者John Mafty
相关产品推荐
相关产品推荐

