【问题标题】:Finding my AWS account ID using JavaScript使用 JavaScript 查找我的 AWS 账户 ID
【发布时间】:2016-06-04 10:44:45
【问题描述】:

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

在为根账户或 IAM 用户显式提供密钥时应该有效。 在使用实例配置文件(无键)配置的 ec2 实例中调用时也应该工作。

【问题讨论】:

    标签: node.js amazon-ec2


    【解决方案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);
    };
    

    【讨论】:

      【解决方案2】:

      只是在@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);
      })();
      

      【讨论】:

        【解决方案3】:

        我找到的最简单的方法是从上下文数据中提取帐户 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]);
        };
        

        【讨论】:

        • 你是如何获得上下文的?我认为您只是在 lambda 中处理问题。
        【解决方案4】:

        最好的方法是通过"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。

        【讨论】:

        • 我喜欢这个,因为它独立于平台,不依赖于 EC2 元数据或 Lambda 上下文,因此我可以在开发过程中使用它,或者用于始终在 AWS 之外运行的代码。
        【解决方案5】:

        以下 sn-p 将使用 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]);
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-30
          • 1970-01-01
          • 2014-02-03
          • 2016-11-28
          相关资源
          最近更新 更多