AWS CLI可正常列出S3对象 但Boto3执行列表操作报AccessDenied
问题根因
你遇到的AccessDenied报错核心原因是IAM角色的s3:ListBucket权限配置了前缀限制,仅允许你查询桶下folder1/folder2/前缀路径下的对象,而你的代码默认请求了整个桶的对象列表,触发了权限拦截。
验证方案
直接调用keys函数时传入正确的前缀参数,测试是否正常返回结果:
print(list(keys(bucket_name, prefix='/folder1/folder2/')))
如果执行后可以正常输出文件列表,即可确认是前缀不匹配导致的权限问题。
其他排查点
如果按上述操作后仍然报错,可以检查以下配置:
- 确认你的IAM策略中
s3:ListBucket权限对应的资源为完整的桶ARN,不要错误配置为桶内对象ARN(对象级权限不会对ListBucket类操作生效) - 确认IAM策略没有配置IP限制、VPC限制等其他访问条件,执行Boto3代码的网络环境和你运行aws cli的环境一致
解决方法
- 如果仅需要查询指定前缀下的文件,每次调用列表接口时传入对应的前缀参数即可
- 如果需要查询整个桶的所有对象,修改IAM策略,移除
s3:ListBucket权限的前缀限制条件
内容的提问来源于stack exchange,提问作者chowpay
相关产品推荐
相关产品推荐

