访问禁用公共访问的S3存储桶时权限报错,求IAM配置解决方案
问题解决方法
你的报错根源在于:aws s3 cp --recursive命令在列举桶内对象时,默认调用的是ListObjectsV2 API,而你当前的IAM权限仅配置了s3:ListObjects(对应旧版ListObjects API),所以会触发AccessDenied错误。
具体修复步骤
- 添加缺失的权限:在IAM角色的actions列表中加入
s3:ListObjectsV2 - (可选)遵循最小权限原则:将resources从通配符
*缩小到目标桶的具体ARN,避免过度授权
修改后的Terraform权限配置示例:
service_policy_document = { SID = "LaunchScriptPermissions" actions = [ "s3:GetObject", "s3:ListObjects", "s3:ListObjectsV2", # 新增此权限,解决ListObjectsV2调用的权限问题 "s3:ListAllMyBuckets", "s3:ListBuckets", ] # 推荐限制资源范围,替代原有的"*" resources = [ "arn:aws:s3:::test-bucket", # 桶级权限,用于列举对象 "arn:aws:s3:::test-bucket/*" # 对象级权限,用于读取文件 ] }
补充说明
- 桶级资源
arn:aws:s3:::test-bucket是ListObjectsV2等列举类权限必须的资源目标 - 对象级资源
arn:aws:s3:::test-bucket/*对应GetObject权限,确保能复制具体的代理配置文件 - 保留
s3:ListObjects是为了兼容可能的旧版AWS CLI调用,但核心修复项是添加s3:ListObjectsV2
内容的提问来源于stack exchange,提问作者Pugs08
相关产品推荐
相关产品推荐

