EC2实例关联IAM实例配置文件后仍无法获取AWS凭证问题
我通过以下Node.js脚本创建EC2实例:
const instanceParams: EC2.Types.RunInstancesRequest = { ImageId: AWSImageIDs.AmazonLinux_arm64, InstanceType: 't4g.nano', MinCount: 1, MaxCount: 1, UserData: userData, SubnetId: SubnetIds.QA1, IamInstanceProfile: {Arn: INSTANCE_PROFILE_ARN}, SecurityGroupIds: [SecurityGroupIds.QA_AllowTraffic], }; const instance = await new EC2({apiVersion: '2016-11-15'}) .runInstances(instanceParams) .promise()
实例创建成功,通过AWS控制台能看到该实例已关联带有S3FullAccessPolicy的IAM实例配置文件角色,但在实例内执行aws configure list返回:
profile <not set> None None
执行aws s3命令时出现“unable to locate credentials”错误。为何控制台显示已关联配置文件,但实例却无法识别?
实例元数据服务(IMDS)无法访问
EC2实例依赖实例元数据服务获取IAM角色凭证,默认访问地址是169.254.169.254。在实例内执行curl http://169.254.169.254/latest/meta-data/iam/security-credentials/测试:- 若返回角色名称,说明IMDS正常;
- 若超时或报错,检查安全组/网络ACL是否放行到
169.254.0.0/16的流量,或是否通过配置禁用了IMDSv1/IMDSv2。
IAM配置关联存在延迟
控制台显示关联成功后,实例可能需要几分钟同步凭证。可以等待5-10分钟后重试,或重启实例触发配置刷新。用户数据干扰凭证获取逻辑
检查你的userData脚本,是否存在修改AWS配置、设置空/错误的AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY环境变量的操作,这类配置会覆盖CLI自动获取IAM角色凭证的逻辑。AWS CLI版本过旧
旧版本CLI对IAM角色自动获取支持可能存在问题。执行aws --version查看版本,用以下命令更新:sudo yum update aws-cli -y实例配置文件ARN填写错误
确认脚本中的INSTANCE_PROFILE_ARN是否正确指向实例配置文件(而非角色ARN)。若误填角色ARN,控制台可能显示关联,但实例无法正常获取凭证。
内容的提问来源于stack exchange,提问作者Nathanael

