gpt4 book ai didi

node.js - 使用在 aws-sdk (AWS JavaScript SDK) 中担任角色的配置文件

转载 作者:IT老高 更新时间:2023-10-28 23:04:01 25 4
gpt4 key购买 nike

使用适用于 JavaScript 的 AWS 开发工具包,我想使用一个默认配置文件来承担 a 角色。这与 AWS CLI 完美配合。将 node.js 与 SDK 一起使用不会承担角色,而只会使用访问 key 所属的 AWS 账户的凭证。我找到了这个文档,但它不涉及承担角色:http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html

有什么建议吗?

这是我的配置文件:

[default]
role_arn = arn:aws:iam::123456789:role/Developer
source_profile = default
output = json
region = us-east-1

最佳答案

在代码中使用多个跨账户角色的正确方法:

使用 sts 获取跨账户角色的凭据,并在每次需要使用该特定跨账户角色验证服务时使用这些凭据。

例子:

创建一个函数来获取跨帐户凭据,例如:

const AWS = require('aws-sdk');
const sts = new AWS.STS();

const getCrossAccountCredentials = async () => {
return new Promise((resolve, reject) => {
const timestamp = (new Date()).getTime();
const params = {
RoleArn: 'arn:aws:iam::123456789:role/Developer',
RoleSessionName: `be-descriptibe-here-${timestamp}`
};
sts.assumeRole(params, (err, data) => {
if (err) reject(err);
else {
resolve({
accessKeyId: data.Credentials.AccessKeyId,
secretAccessKey: data.Credentials.SecretAccessKey,
sessionToken: data.Credentials.SessionToken,
});
}
});
});
}

然后你就可以毫无问题地使用它了:

const main = async () => {
// Get the Cross account credentials
const accessparams = await getCrossAccountCredentials();
// Get the ec2 service for current account
const ec2 = new AWS.EC2();
// Get the ec2 service for cross account role
const ca_ec2 = new AWS.EC2(accessparams);
// Get the autoscaling service for current account
const autoscaling = new AWS.AutoScaling();
// Get the autoscaling service for cross account role
const ca_autoscaling = new AWS.AutoScaling(accessparams);

// This will describe instances within the cross account role
ca_ec2.describeInstances(...)

// This will describe instances within the original account
ec2.describeInstances(...)

// Here you can access both accounts without issues.
}

好处:

  • 不会在全局范围内更改凭证,因此您仍然可以针对自己的 AWS 账户,而无需提前备份凭证来恢复它。
  • 让您随时准确控制您要定位的帐户。
  • 允许处理多个跨账户角色和服务。

错误的方式:

请勿使用 AWS.config.update 覆盖全局凭证 AWS.config.credentials!!!

覆盖全局凭据是一种不好的做法!这与@Brant 在此处批准的解决方案的情况相同,但这不是一个好的解决方案!原因如下:

const main = async () => {
// Get the Cross account credentials
const accessparams = await getCrossAccountCredentials();

// Get the ec2 service for current account
const ec2 = new AWS.EC2();

// Overwrite the AWS credentials with cross account credentilas
AWS.config.update(accessparams);

// Get the ec2 service for cross account role
const ca_ec2 = new AWS.EC2();

// This will describe instances within the cross account role
ca_ec2.describeInstances(...)

// This will ALSO describe instances within the cross account role
ec2.describeInstances(...)

// WARNING: Here you only will access the cross account role. You may get
// confused on what you're accessing!!!
}

问题:

  • 直接或通过 AWS.config.update 更新全局 AWS.config.credentials 将覆盖当前凭证。
  • 一切都将指向该跨账户角色,甚至是您可能没想到的 future 服务调用。
  • 要切换回第一个帐户,您可能需要临时备份 AWS.config.credentials 并再次更新以恢复它。使用每个帐户时难以控制,难以跟踪执行上下文,并且容易因定位错误帐户而搞砸。

再次重申,请勿使用 AWS.config.update 覆盖全局凭证 AWS.config.credentials!!!

如果您需要完全在另一个帐户中运行代码:

如果您需要在不切换凭据的情况下完全为另一个帐户执行代码。您可以遵循@Kanak Singhal 的建议并将 role_arn 存储在配置文件中,并将 AWS_SDK_LOAD_CONFIG="true"AWS_PROFILE="assume-role-profile"

关于node.js - 使用在 aws-sdk (AWS JavaScript SDK) 中担任角色的配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45989042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com