从cli工具获取AWS账号的快速方法?

寻找一个快速的方法来拉我的帐号,我原本以为使用aws iam get-account-authorization-details --max-items 1但这样做有几个问题。 有没有办法可以这样做,可能不会交叉帐户起源?

通过“安全令牌服务”使用以下命令。

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

从AWS PowerShell CLI的相关答案中 ,您的帐户ID是您创build的资源的一部分…以及为您自动创build的资源。 某些资源也会将您列为OwnerId。

默认安全组是在每个区域的默认VPC中为您自动创build的保留安全组。 从文档 :

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

这使得它成为检索我们帐户ID的可靠候选者,只要您使用的是EC2 classic或具有默认的VPC(*如果您没有,请参阅边缘案例)。

例:

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

这将使用--query将输出过滤为“owner ID”,以获得来自此请求的第一个结果,然后使用--output以明文forms输出您的帐户ID:

 123456781234 

边缘情况:

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

  • 查询STS get-caller-identity,per @Taras
  • 使用@Phillip返回的第一个安全组

进一步阅读:

  • AWS EC2文档:默认安全组
  • AWS CLI文档:aws ec2 describe-security-groups
  • 控制AWS命令行界面的命令输出

如果您运行在假定angular色的服务器上,则无法调用aws sts get-caller-identity 。 而且,对于describe-security-groups你不能总是使用--group-namesfilter(如果你没有默认的VPC,它不会工作),所以select第一个安全组。 我发现这是最可靠的,无论使用什么types的身份validation或您拥有哪种VPC。

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