使用JavaScript

时间:2016-02-22 20:34:12

标签: node.js amazon-ec2

如何使用JavaScript / NodeJS查找我的AWS账户ID?

在明确为root帐户或IAM用户提供密钥时应该有效。 在使用instance-profile(无键)配置的ec2-instance内部调用时也应该工作。

5 个答案:

答案 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);
})();