У меня есть AWS_ACCESS_KEY_ID и AWS_SECRET_KEY. Это активные учетные данные, поэтому они принадлежат активному пользователю, который принадлежит учетной записи AWS. Как, используя Boto3, найти идентификатор этой учетной записи AWS?
Получите идентификатор учетной записи AWS от Boto
Ответ 1
Учетная запись AccountID может быть захвачена из функции sts get-caller-identity. Это возвращает поле "Учетная запись":
client = boto3.client("sts", aws_access_key_id=access_key, aws_secret_access_key=secret_key)
account_id = client.get_caller_identity()["Account"]
Ответ 2
Что-то вроде этого будет работать:
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
Если вы используете роли IAM EC2, вы можете опустить все материалы доступа/секретного ключа, и код будет просто:
iam = boto3.resource('iam')
account_id = iam.CurrentUser().arn.split(':')[4]
Ответ 3
Следующая функция даст вам идентификатор учетной записи для вашей пары ключей:
import boto3
def get_aws_account_id(access_key, secret_key):
sts = boto3.client(
"sts", aws_access_key_id=access_key, aws_secret_access_key=secret_key,
)
user_arn = sts.get_caller_identity()["Arn"]
return user_arn.split(":")[4]
Это работает, потому что пользовательский ARN имеет формат "arn: aws: iam:: ACCOUNT_ID: user/USERNAME". Разделение по двоеточиям, идентификатор учетной записи - это 4-й элемент (с индексом 0).