AWS sdk使用sso获取凭据

问题描述

我正在尝试使用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 函数。