如何使用JavaScript / NodeJS查找我的AWS账户ID?
在明确为root帐户或IAM用户提供密钥时应该有效。 在使用instance-profile(无键)配置的ec2-instance内部调用时也应该工作。
答案 0 :(得分:7)
最好的方法是通过"Security Token Service":
var AWS = require('aws-sdk');
// Load credentials and set region from JSON file
AWS.config.loadFromPath('./config.json');
var sts = new AWS.STS();
sts.getCallerIdentity({}, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log(JSON.stringify(data.Account));
}
});
这将通过简单的呼叫打印帐户ID。
答案 1 :(得分:3)
以下代码段将使用nodejs和最新的aws-sdk打印帐户ID:
var AWS = require('aws-sdk');
var iam = new AWS.IAM();
var metadata = new AWS.MetadataService()
var _ = iam.getUser({}, (err, data) => {
if (err)
metadata.request('/latest/meta-data/iam/info/', (err, data) => {
if (err) console.log(err, err.stack);
else console.log(JSON.parse(data).InstanceProfileArn.split(':')[4]);
});
else
console.log(data.User.Arn.split(':')[4]);
});
答案 2 :(得分:2)
我找到的最简单方法是从上下文数据中提取帐户ID:
exports.handler = async (event, context) => {
// Log the invoked function ARN and split to get Account ID
console.log(JSON.stringify(context.invokedFunctionArn).split(':')[4]);
};
答案 3 :(得分:1)
如果您还需要帐户别名(即您为帐户指定的名称),则可以使用IAM的SDK。使用“帐户别名”,您可以确切知道哪个帐户调用了您的代码。帐户ID的描述性较差。
AWS IAM SDK: listAccountAliases()
以下是您的lambda的代码:
const AWS = require('aws-sdk');
const iam = new AWS.IAM();
exports.handler = async (event) => {
let accountAliases = await iam.listAccountAliases({}).promise();
console.log(accountAliases);
};
答案 4 :(得分:0)
仅以@Facundo的出色答案为基础...几年后,我将其重构为ES6:
// See https://github.com/aws/aws-sdk-js/pull/1391
process.env.AWS_SDK_LOAD_CONFIG = 1;
const { config, STS } = require('aws-sdk');
(async () => {
const sts = new STS();
// See https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/using-promises.html
const { Account: account} = await sts.getCallerIdentity({}).promise();
const { region } = config;
console.log(account, region);
})();