Получите идентификатор учетной записи AWS от Boto

У меня есть AWS_ACCESS_KEY_ID и AWS_SECRET_KEY. Это активные учетные данные, поэтому они принадлежат активному пользователю, который принадлежит учетной записи AWS. Как, используя Boto3, найти идентификатор этой учетной записи AWS?

Ответ 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).