已配置IAM角色仍无法让EC2实例访问Amazon S3桶的问题求助
问题根源
从aws sts get-caller-identity的输出可以明确:当前AWS CLI会话使用的是IAM用户user1的凭证,而非你附加到EC2实例的IAM角色。这意味着CLI没有自动获取实例角色的临时凭证,而是优先加载了本地存储的用户凭证。
解决步骤
- 清理本地AWS凭证文件:
EC2实例角色的临时凭证由实例元数据服务自动提供,但如果本地存在~/.aws/credentials文件或者环境变量中配置了用户凭证,CLI会优先使用这些。执行以下操作:# 查看本地凭证文件内容 cat ~/.aws/credentials # 删除该文件(或清空内容) rm ~/.aws/credentials - 验证身份切换:
删除凭证后重新执行aws sts get-caller-identity,此时输出的Arn应该是类似arn:aws:sts::12345:assumed-role/你的角色名/i-xxxxxxxxx的格式,说明已切换到实例角色。 - 重新测试S3访问:
再次执行aws s3 ls,此时应该能正常列出S3桶(AmazonS3ReadOnlyAccess策略默认允许ListBuckets操作)。
额外排查点
- 确认EC2实例的IAM角色已正确绑定:在EC2控制台的实例详情页,检查IAM角色字段是否显示你创建的目标角色。
- 检查实例元数据服务连通性:执行
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/,如果返回你的角色名称,说明元数据服务正常可用。
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

