web-dev-qa-db-fra.com

Obtenir l'ID de compte AWS auprès de Boto

J'ai un AWS_ACCESS_KEY_ID et un AWS_SECRET_KEY. Ce sont des informations d'identification actives, elles appartiennent donc à un utilisateur actif, qui appartient à un compte AWS. Comment, à l'aide de Boto3, puis-je trouver l'ID de ce compte AWS?

17
Zags

Le AccountID peut être récupéré à partir de la fonction get-caller-identity sts. Cela renvoie un champ "Compte":

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

Quelque chose comme ça fonctionnera:

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 vous utilisez des rôles IAM EC2, vous pouvez omettre tous les trucs d'accès/clé secrète et le code devient simplement:

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

La fonction suivante vous donnera l'ID de compte pour votre paire de clés:

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]

Cela fonctionne car l'utilisateur ARN est au format "arn: aws: iam :: ACCOUNT_ID: user/USERNAME". Fractionné par deux points, l'ID de compte est le 4ème élément (indexé 0).

0
Zags