问题描述
我正在尝试使用AWS Secrets Manager,当我使用常规凭证时,它可以正常工作。
但我想使用SSO。当我没有.aws/credentials
文件而只有.aws/config
文件时。
在AWS文档中,我看到了以下功能:
var params = {
accesstoken: 'STRING_VALUE',/* required */
accountId: 'STRING_VALUE',/* required */
roleName: 'STRING_VALUE' /* required */
};
sso.getRoleCredentials(params,function(err,data) {
if (err) console.log(err,err.stack); // an error occurred
else console.log(data); // successful response
});
但是我不知道在哪里可以获取访问令牌,帐户ID和角色名称。
确实,我看到在.aws/config
文件中有一个帐户ID和角色名称,但是我不明白如何将它们添加到我的代码中(可能类似于函数SharedIniFileCredentials
),以及如何我可以获取访问令牌吗?
另外,
我尝试添加此环境变量AWS_SDK_LOAD_CONfig=1
,但仍然出现此错误:
Missing credentials in config,if using AWS_CONfig_FILE,set AWS_SDK_LOAD_CONfig=1
解决方法
您可以使用 credential-provider-sso 执行此操作。文档给出了完整的解释,但举了一个简单的例子:
const { SecretsManager } = require('@aws-sdk/client-secrets-manager');
const { fromSSO } = require('@aws-sdk/credential-provider-sso');
const secretsManager = new SecretsManager({credentials: fromSSO()});
secretsManager.listSecrets({},(err,data) => {
console.error(err);
console.info(data);
})
这将使用 AWS_PROFILE
环境变量中配置的配置文件,或者您可以将 {'profile': 'profilename'}
传递给 fromSSO
函数。