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

时间:2018-07-30 15:33:25

标签: amazon-web-services amazon-ec2

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

4 个答案:

答案 0 :(得分:4)

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

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

aws sts get-caller-identity

答案 1 :(得分:1)

没有jq,您可以使用这个。

curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep accountId| awk '{print $3}'|sed  's/"//g'|sed 's/,//g'

答案 2 :(得分:0)

此信息在动态Instance Metadata中可用。可以通过多种不同方式提取它。

jq

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

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .accountId

我在网上发现的大多数其他方法都倾向于进行很长的流程调用,例如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'

或者,使用普通BRE的可读性稍差:

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

grep

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

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | grep -oP '"accountId"\s*:\s*"\K[^"]+'

grep |切

这种更可移植的替代方案需要额外的步骤(如果避免使用像awk这样的较重的工具),但也更加简单易懂:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | grep '"region"' | cut -d\" -f4

grep输出如下:

  "region" : "us-east-1"

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

awk

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

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F'"' '/"accountId"/ { print $4 }'

答案 3 :(得分:-1)

这是使用不带jq的元数据的解决方案

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | sed '2q;d' |cut -d : -f2 | awk -F\" '{print $2}'