Получить идентификатор аккаунта AWS от Boto
У меня есть AWS_ACCESS_KEY_ID и AWS_SECRET_KEY. Это активные учетные данные, поэтому они принадлежат активному пользователю, который принадлежит учетной записи AWS. Как, используя Boto3, найти идентификатор этой учетной записи AWS?
3 ответа
Решение
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"]
Следующая функция даст вам идентификатор учетной записи для вашей пары ключей:
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 индексами).
Примерно так будет работать:
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
Если вы используете роли EC2 IAM, вы можете опустить все элементы доступа / секретного ключа, и код становится простым:
iam = boto3.resource('iam')
account_id = iam.CurrentUser().arn.split(':')[4]