在EC2上执行AWS S3 list-objects命令时遭遇访问拒绝问题求助
AWS S3访问拒绝问题排查(执行
aws s3api list-objects报错) 作为AWS新手,执行命令aws s3api list-objects --bucket BUCKET_NAME时遭遇访问拒绝,当前配置信息如下:
现有配置
- IAM角色:已附加
AmazonS3FullAccess策略,角色策略内容:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*", "s3-object-lambda:*" ], "Resource": "*" } ] } - EC2实例:已绑定上述IAM角色
- S3存储桶配置:
- 阻止所有公共访问:关闭(OFF)
- 存储桶策略:允许所有操作,策略内容:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAllActionsForUsersWhoCanList", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::BUCKET_NAME/*", "arn:aws:s3:::BUCKET_NAME" ] } ] } - ACL:关闭(OFF)
- 其他设置:默认
排查解决方案
验证EC2实例的IAM角色是否生效
- 登录EC2实例,执行
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/,确认返回的角色名称与绑定的一致。 - 再执行
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/[你的角色名称],检查返回的凭证是否包含AccessKeyId、SecretAccessKey和Token,且状态为Active。若没有有效凭证,需重新关联IAM角色到实例。
- 登录EC2实例,执行
确认AWS CLI是否使用实例角色凭证
- 执行
aws configure list,查看profile是否为None(默认使用实例角色)。如果本地存在~/.aws/credentials配置的密钥,CLI会优先使用本地凭证而非实例角色,此时可删除本地凭证文件,或通过--profile参数指定正确配置。
- 执行
检查存储桶名称是否正确
- 确保命令中的
BUCKET_NAME是存储桶的准确名称,S3存储桶名称区分大小写,且不能有拼写错误或特殊字符。
- 确保命令中的
排查权限边界与服务控制策略(SCP)
- 若账号属于AWS组织单元(OU),需检查所在OU的SCP是否有拒绝S3操作的规则。
- 同时查看IAM角色是否设置了权限边界,若权限边界限制了S3访问,会覆盖
AmazonS3FullAccess策略的权限。
验证存储桶策略的有效性
- 用AWS控制台的存储桶策略模拟器测试:输入IAM角色ARN作为主体,选择
s3:ListBucket操作(对应list-objects命令),指定存储桶ARN,查看模拟结果是否允许。
- 用AWS控制台的存储桶策略模拟器测试:输入IAM角色ARN作为主体,选择
检查VPC端点策略(若适用)
- 如果EC2通过VPC端点访问S3,需确认S3端点的策略是否允许对目标存储桶的
list-objects操作,登录VPC控制台查看端点策略配置。
- 如果EC2通过VPC端点访问S3,需确认S3端点的策略是否允许对目标存储桶的
内容的提问来源于stack exchange,提问作者Shin622
相关产品推荐
相关产品推荐

