EC2实例中AWS CLI可获取IAM角色凭证,Node.js却无法加载
EC2 IAM角色在AWS CLI正常,但Node.js AWS SDK无法获取凭证的排查方案
可能的原因及解决办法
1. AWS SDK版本兼容问题
旧版aws-sdk(v2)对EC2实例元数据服务v2(IMDSv2)的支持不完善,而AWS CLI已默认适配IMDSv2。优先尝试升级到最新稳定版:
npm update aws-sdk
若允许,也可迁移到AWS SDK v3(@aws-sdk/client-s3),它对IMDSv2的支持更稳定:
npm install @aws-sdk/client-s3
对应代码示例:
const { S3Client, ListBucketsCommand } = require("@aws-sdk/client-s3"); const client = new S3Client({ region: "us-west-2" }); client.send(new ListBucketsCommand({})) .then(data => console.log(data.Buckets)) .catch(err => console.error(err));
2. IMDSv2强制配置导致令牌获取失败
如果EC2实例开启了强制IMDSv2(HttpTokens=required),旧版SDK可能无法自动获取会话令牌。
检查实例IMDS配置:
aws ec2 describe-instances --instance-ids <你的实例ID> --query 'Reservations[0].Instances[0].MetadataOptions'
若返回"HttpTokens": "required",可按以下方式处理:
- 显式配置SDK支持IMDSv2:
const AWS = require("aws-sdk"); // 调整元数据服务超时与重试次数 AWS.config.metadataServiceTimeout = 5000; AWS.config.metadataServiceNumRetries = 3; // 强制使用EC2元数据凭证 AWS.config.credentials = new AWS.EC2MetadataCredentials({ httpOptions: { timeout: 5000 }, maxRetries: 3 }); const S3 = new AWS.S3(); S3.listBuckets(function(err, data) { console.log(data?.Buckets || err); }); - 临时关闭IMDSv2强制(仅用于测试,生产环境不推荐):
aws ec2 modify-instance-metadata-options --instance-id <你的实例ID> --http-tokens optional
3. 网络或本地权限限制
虽然CLI能访问IMDS,但Node.js进程可能受SELinux、防火墙等限制,无法访问169.254.169.254(IMDS地址)。在实例上测试连通性:
# 测试IMDSv1 curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ # 测试IMDSv2 TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/
若curl无法返回IAM角色名称,检查实例的安全组、NACL是否允许访问169.254.169.254(默认允许,若被修改需恢复)。
4. 强制指定凭证来源
显式让SDK从EC2元数据服务获取凭证,跳过其他凭证查找路径:
const AWS = require("aws-sdk"); const S3 = new AWS.S3({ credentials: new AWS.EC2MetadataCredentials() }); S3.listBuckets(function(err, data) { if (err) console.error(err); else console.log(data.Buckets); });
内容的提问来源于stack exchange,提问作者Justin808
相关产品推荐
相关产品推荐

