从Boto获取AWS账户ID

Zag*_*ags 18 python amazon-web-services boto3

我有一个AWS_ACCESS_KEY_ID和一个AWS_SECRET_KEY.这些是活动凭据,因此它们属于属于AWS账户的活动用户.如何使用Boto3找到此AWS账户的ID?

lou*_*ola 37

可以从get-caller-identity sts函数中获取AccountID.这将返回"帐户"字段:

client = boto3.client("sts", aws_access_key_id=access_key, aws_secret_access_key=secret_key)
account_id = client.get_caller_identity()["Account"]
Run Code Online (Sandbox Code Playgroud)


小智 6

像这样的事情会起作用:

import boto3

ACCESS_KEY = 'FOO'
SECRET_KEY = 'BAR'

iam = boto3.resource('iam',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
)
account_id = iam.CurrentUser().arn.split(':')[4]

print account_id
Run Code Online (Sandbox Code Playgroud)

如果您使用 EC2 IAM 角色,则可以省略所有访问/密钥内容,代码将变得简单:

iam = boto3.resource('iam')
account_id = iam.CurrentUser().arn.split(':')[4]
Run Code Online (Sandbox Code Playgroud)


Zag*_*ags 5

感谢@louahola对我最初回答的改进。

这将为您提供密钥对的帐户 ID:

import boto3

sts = boto3.client(
    "sts", aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY,
)
account_id = sts.get_caller_identity()["Account"]
Run Code Online (Sandbox Code Playgroud)

如果您使用基于 IAM 角色的权限boto3 的任何其他凭证选项在 EC2 实例上运行,则可以更轻松地执行此操作:

import boto3

account_id = boto3.client("sts").get_caller_identity()["Account"]
Run Code Online (Sandbox Code Playgroud)