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

Quick way to get AWS Account number from the AWS CLI tools?

寻找一种快速获取我的帐号的方法,我最初想使用 aws iam get-account-authorization-details --max-items 1,但这样做有几个问题。有没有一种可能不会跨帐户来源的方法?

来自我的 ,您的帐户 ID 是您创建的资源 Arn 的一部分......以及那些自动为您创建的资源。某些资源还会将您列为 OwnerId。

Default Security Group是在每个区域的默认VPC中自动为您创建的,作为预留安全组。来自 documentation:

You can't delete a default security group. If you try to delete the EC2-Classic default security group, you'll get the following error: Client.InvalidGroup.Reserved: The security group 'default' is reserved. If you try to delete a VPC default security group, you'll get the following error: Client.CannotDelete: the specified group: "sg-51530134" name: "default" cannot be deleted by a user.

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

示例:

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

对于此请求的第一个结果,这使用 --query 将输出过滤到 "owner ID",然后使用 --output 将您的帐户 ID 输出为纯文本:

123456781234

边缘情况:

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

进一步阅读:

您可以使用以下方法从 Secure Token Service subcommand get-caller-identity 中获取帐号:

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

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

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

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