如何通过AWS CLI工具快速获取AWS账号?

156

我本想使用aws iam get-account-authorization-details --max-items 1快速获取我的账号,但这种方法存在几个问题。有没有一种不会跨越账户来源的方式来完成这个操作?

4个回答

312

3
相比于安全组而言,这应该更加可靠,因为你可以删除默认安全组。 - Justin
7
如果将以下命令输入到 jq 中,则可以使用更短的命令:aws sts get-caller-identity|jq -r ".Account" - BMW
1
需要将其存储在变量中,但是会多出一行,这个命令可以更好地解决这个问题: aws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g' - Asim
对我来说,当我删除 --query 'Account' 部分时它可以工作。 - coliveira
1
@BMW 很不幸,您不能总是依赖于系统中涉及或安装了 jq。由于安全原因,一些服务器禁止安装外部软件包。您可以像这样做 aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//' 但这有点烦人,最好在那时使用 --query 'Account' --output text - ehime
显示剩余2条评论

36

根据我的 相关回答中提到的AWS PowerShell CLI,您的账户ID是您创建的资源和自动为您创建的资源的ARN的一部分。有些资源还将您列为OwnerId。

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

您无法删除默认安全组。如果尝试删除EC2-Classic默认安全组,则会收到以下错误提示:Client.InvalidGroup.Reserved: The security group 'default' is reserved. 如果尝试删除VPC默认安全组,则会收到以下错误提示:Client.CannotDelete: the specified group: "sg-51530134" name: "default" cannot be deleted by a user.

这使其成为一个可靠的候选项来检索我们的账户ID,只要您在EC2 Classic中或者拥有默认VPC(如果没有,请查看特殊情况)。

例如:

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

这里使用--query将输出过滤到来自此请求的第一个结果的“所有者 ID”,然后使用--output将您的帐户 ID 作为纯文本输出:

123456781234

特殊情况:

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

进一步阅读:


10

如果您正在运行在一个扮演角色的服务器上,您无法调用 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 似乎总是返回用户账户,无论他们扮演的角色是什么。如果你想获得所假设的角色,你似乎仍需要使用类似这样的东西(两年后...)。 - suitedupgeek

6

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


3
请注意,当您使用“AssumedRole”时,它无法正常工作。 - Sanoob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,