GCP部署Node应用使用ChainableTemporaryCredentials访问AWS报凭证缺失错误
问题背景
在GCP上部署的Node.js应用,通过AWS SDK的ChainableTemporaryCredentials结合WebIdentityCredentials实现跨云身份认证,已确认Google侧的WebIdentityToken有效,且AWS侧代理角色已创建,但运行时报错:
Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1
核心原因
该错误并非因为ChainableTemporaryCredentials需要本地AWS配置文件或环境变量,而是你创建的AWS服务客户端未关联自定义临时凭证实例,导致客户端默认尝试读取系统级凭证链(环境变量、本地~/.aws/credentials等),因找不到匹配凭证而报错。
排查与修复步骤
显式为所有AWS客户端传入自定义凭证
任何AWS服务客户端(如S3、EC2、STS等)的创建,都必须指定你生成的credentials对象:// 示例:创建S3客户端并绑定临时凭证 const AWS = require('aws-sdk'); const s3 = new AWS.S3({ credentials: credentials });若代码中存在未指定该凭证的客户端实例,就会触发默认凭证加载逻辑,引发错误。
验证AWS代理角色的信任策略
确保AWS侧代理角色(proxyRoleName对应的角色)的信任策略已正确配置,允许GCP身份提供商扮演该角色。典型的信任策略示例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::AWS_ACCOUNT_ID:oidc-provider/accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "GCP_SERVICE_ACCOUNT_SUBJECT" } } } ] }确认凭证初始化完成后再使用
必须等待await credentials.getPromise()执行完成,确保临时凭证已获取成功,再创建AWS客户端。若在凭证未就绪前初始化客户端,也可能导致凭证缺失错误。检查AWS SDK版本匹配度
不同版本的AWS SDK v2对ChainableTemporaryCredentials的处理逻辑存在差异,确保你的项目依赖的aws-sdk版本与参考代码的版本一致,必要时调整版本号。
内容的提问来源于stack exchange,提问作者Thomas Seehofchen

