web-dev-qa-db-ja.com

BotoからAWSアカウントIDを取得する

AWS_ACCESS_KEY_IDとAWS_SECRET_KEYがあります。これらはアクティブな認証情報であるため、AWSアカウントに属するアクティブなユーザーに属します。 Boto3を使用して、このAWSアカウントのIDを見つけるにはどうすればよいですか?

17
Zags

AccountIDは、get-caller-identity sts関数から取得できます。これは、「アカウント」フィールドを返します。

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

このような何かが動作します:

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]
1
viyh

次の関数は、キーペアのアカウントIDを取得します。

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」であるため機能します。コロンで分割すると、アカウントIDは4番目の項目(0から始まる)です。

0
Zags