AWS_ACCESS_KEY_IDとAWS_SECRET_KEYがあります。これらはアクティブな認証情報であるため、AWSアカウントに属するアクティブなユーザーに属します。 Boto3を使用して、このAWSアカウントのIDを見つけるにはどうすればよいですか?
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"]
このような何かが動作します:
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]
次の関数は、キーペアのアカウント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から始まる)です。