如何基于托管在亚马逊中的EC2实例获取AWS帐号/ id

San*_*apu 4 amazon-ec2 amazon-web-services

如何基于托管在亚马逊中的EC2实例ip获取AWS帐号/ id我有一个实例名称CTI服务器,它托管在一个AWS账户中。我有CTI服务器的详细信息,例如私有ip和主机,并且能够通过腻子ssh这个实例。是他们无需登录aws控制台即可找到帐号的任何命令

Ami*_*idu 10

此信息可在动态实例元数据中找到。它可以通过多种不同的方式提取。

杰克

JSON解析器jq是当前可用的最佳方法,它预装在 AWS Linux AMI 上。

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .accountId
Run Code Online (Sandbox Code Playgroud)

我在网上找到的大多数其他方法往往会进行一长串的流程调用,例如grep | sed | awk等,这不太理想。因此,我探索了一些替代方案,试图将解析限制为一个额外的过程。

sed

我能想到的最好的替代方案是使用sed扩展的正则表达式,仅使用单个管道。另外,与其他解决方案不同,这甚至可以处理 accountId 中间(转义)双引号的(人为的)场景:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | sed -nE 's/.*"accountId"\s*:\s*"(.*)".*/\1/p'
Run Code Online (Sandbox Code Playgroud)

或者,使用纯 BRE 可读性稍差:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | sed -n 's/.*"accountId"\s*:\s*"\(.*\)".*/\1/p'
Run Code Online (Sandbox Code Playgroud)

grep

grep是一个选项,但需要带有 PCRE 支持的 GNU grep:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | grep -oP '"accountId"\s*:\s*"\K[^"]+'
Run Code Online (Sandbox Code Playgroud)

查询 | 切

这种更便携的替代方案需要额外的步骤(如果避免使用像 之类的较重的工具awk),但也更简单且更容易理解:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | grep '"region"' | cut -d\" -f4
Run Code Online (Sandbox Code Playgroud)

输出grep如下所示:

  "region" : "us-east-1"
Run Code Online (Sandbox Code Playgroud)

然后cut将用双引号分隔并选择第四个字段。

awk

我尽量避免使用 awk 进行这样的简单用途,但它显然可以一步完成上述操作。有时它可能是唯一可用的选项(例如 busybox):

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F'"' '/"accountId"/ { print $4 }'
Run Code Online (Sandbox Code Playgroud)

  • AWS Linux 2 AMI 上未预安装“jq”。 (2认同)

kri*_*004 6

您可以通过查询实例元数据从EC2实例中获取帐号。元数据位于http://169.254.169.254/latest/dynamic/instance-identity/document中

如果将IAM角色附加到实例,则可以使用以下方法检索它:

aws sts get-caller-identity
Run Code Online (Sandbox Code Playgroud)

  • 如果您想避免 grep/sed/jq 您也可以要求 awscli 进行解析: `aws sts get-caller-identity --query "Account" --output text` (3认同)
  • 如果您安装了“jq”,则可以运行“curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .accountId` (2认同)
  • 卷曲http:// 169.254.169.254 / latest / dynamic / instance-identity / document`并取出`accountId`是此处的最佳方法,因为它不需要将IAM角色分配给实例或AWS CLI要安装的工具。 (2认同)