从AWS CLI工具获取AWS帐号的快速方法?


99

在寻找一种快速提取我的帐号的方法时,我本来曾想使用aws iam get-account-authorization-details --max-items 1该方法,但是这样做存在一些问题。有没有一种方法可能不会跨越帐户来源?

Answers:


217

您可以使用以下命令从“ 安全令牌服务”子命令中获取帐号get-caller-identity

aws sts get-caller-identity --query Account --output text

2
这应该比安全组更可靠,因为您可以删除默认的安全组。
贾斯汀

4
如果送给jq,则执行更短的命令aws sts get-caller-identity|jq -r ".Account"
BMW

需要存储在变量中,但是得到了额外的一行,这样做会更好aws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim

对我来说,当我移除--query 'Account'零件时,它会起作用。
coliveira

@BMW不幸的是,您不能始终依赖于jq参与或安装在系统上。由于安全性,某些服务器禁止安装无关的软件包。您可以执行类似的操作,aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'但是有点烦人,您也可以这样做--query 'Account' --output text
爱媛

33

根据我对AWS PowerShell CLI的相关回答,您的帐户ID是您创建的资源Arn和为您自动创建的资源的一部分。一些资源还将您列为OwnerId。

将在每个区域的默认VPC中自动为您创建默认安全组,作为保留的安全组。从文档中

您无法删除默认的安全组。如果尝试删除EC2-Classic默认安全组,则会收到以下错误:Client.InvalidGroup.Reserved:安全组“默认”已保留。如果尝试删除VPC默认安全组,则会出现以下错误:Client.CannotDelete:指定的组:“ sg-51530134”名称:“默认”不能被用户删除。

只要您使用的是EC2经典版或具有默认VPC(*如果没有,请参阅边际情况),这使其成为检索我们的帐户ID的可靠候选人。

例:

aws ec2 describe-security-groups \
    --group-names 'Default' \
    --query 'SecurityGroups[0].OwnerId' \
    --output text

这用于--query将输出过滤为该请求的第一个结果的“所有者ID”,然后用于--output将您的帐户ID输出为纯文本:

123456781234

边缘情况:

(感谢@kenchew)请注意,如果您已删除给定区域中的默认VPC,则此安全组不再存在,您应使用以下替代解决方案之一:

进一步阅读:


9

如果您在以假定角色运行的服务器上运行,则无法调用aws sts get-caller-identity。另外,由于describe-security-groups您不能始终使用--group-names过滤器(如果没有默认VPC,它将不起作用),因此只需选择第一个安全组即可。无论使用哪种身份验证或具有哪种VPC,我都认为这是最可靠的。

aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text

同意这一点。无论用户承担什么角色,get-caller-identity似乎总是返回用户帐户。如果您想担任假定的角色,您似乎仍然需要使用类似的方法(2年后..)
Suitupgeek

2

我最喜欢的方法是使用,aws iam get-user [--profile <profile>]因为您只需要IAM自助服务角色即可工作。


3
请注意,当您使用AssumedRole
Sanoob's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.