首页 > 解决方案 > 如何从 .configuration 文件加载配置文件并根据角色 arn 承担角色?

问题描述

我正在测试@aws-sdk 版本 3,我正在尝试从我的配置文件中加载配置文件(工作正常),然后承担一个角色。这是我无法弄清楚如何做到这一点的地方。在 aws-sdk 第 2 版中,我确实喜欢这样

AWS.config.credentials = new AWS.TemporaryCredentials({
    RoleArn: 'arn:aws:iam::XXX:role/XXX',
    }, new AWS.SharedIniFileCredentials({ profile: 'myprofile' }));
}

如何使用新的 sdk 做同样的事情?要传递个人资料名称,我会这样做

const { SSM } = require('@aws-sdk/client-ssm-node');
const ssm = new SSM({
    profile: 'myprofile'
});

我已经安装了 @aws-sdk/credential-provider-node 和 @aws-sdk/credential-provider-ini 但没有成功弄清楚如何像我想要的那样传递凭据,这里的文档https://www。 npmjs.com/package/@aws-sdk/credential-provider-node并没有告诉我太多。那么,我该怎么做呢?

标签: amazon-web-servicesaws-sdk-nodejs

解决方案


原来我看错了nuget包。承担角色是一种方法。

const { SSM } = require('@aws-sdk/client-ssm-node');
const { STSClient, AssumeRoleCommand } = require('@aws-sdk/client-sts-node');
const sTS = new STSClient({ profile: 'myProfile' });
const params = {
    RoleArn: 'arn:aws:iam::XXX:role/XXX',
    RoleSessionName: 'tempUser',
};

const assumeRoleCommand = new AssumeRoleCommand(params);
let assumedRole = null;
try {
    assumedRole = await sTS.send(assumeRoleCommand);
} catch (error) {
    console.log(error);
}

const ssm = new SSM({
    profile: 'myProfile',
    credentials: {
        accessKeyId: assumedRole.Credentials.AccessKeyId,
        secretAccessKey: assumedRole.Credentials.SecretAccessKey,
        expiration: assumedRole.Credentials.Expiration,
        sessionToken: assumedRole.Credentials.SessionToken,
    },
});

推荐阅读