Obtenga la ID de la cuenta de AWS de Boto

Tengo un AWS_ACCESS_KEY_ID y un AWS_SECRET_KEY. Estas son credenciales activas, por lo que pertenecen a un usuario activo, que pertenece a una cuenta de AWS. ¿Cómo, con Boto3, encuentro el ID de esta cuenta de AWS?

El ID de cuenta se puede obtener de la función sts get-caller-identity. Esto devuelve un campo de “Cuenta”:

client = boto3.client("sts", aws_access_key_id=access_key, aws_secret_access_key=secret_key) account_id = client.get_caller_identity()["Account"] 

Algo como esto funcionará:

 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 

Si usa los roles IAM de EC2, puede omitir todas las cosas de clave secreta / de acceso y el código se convierte simplemente en:

 iam = boto3.resource('iam') account_id = iam.CurrentUser().arn.split(':')[4] 

La siguiente función le proporcionará el ID de cuenta para su par de claves:

 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] 

Esto funciona porque el usuario ARN tiene el formato “arn: aws: iam :: ACCOUNT_ID: usuario / NOMBRE DE USUARIO”. Dividida por dos puntos, la ID de cuenta es el cuarto elemento (0-indexado).