使用JavaScript查找我的AWS账户ID

Mic*_*obi 9 amazon-ec2 node.js

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

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

Fac*_*tor 10

最好的方法是通过"安全令牌服务":

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));
   }
});
Run Code Online (Sandbox Code Playgroud)

这将通过简单的调用打印帐户ID.


And*_*dri 9

只是建立在 @Facundo Victor 的优秀答案的基础上......这就是我几年后使用的重构为 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);
})();
Run Code Online (Sandbox Code Playgroud)


小智 6

我发现的最简单的方法是从上下文数据中提取帐户 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]);
};
Run Code Online (Sandbox Code Playgroud)

  • 以及如何获取上下文?我认为你只是在处理 lambda 内的问题。 (2认同)

Mic*_*obi 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]);
});
Run Code Online (Sandbox Code Playgroud)