AWS SDK For Python (Boto3) で AssumeRole を使ってみた
はじめに
Pyhtonでプログラミングしていてコードの中で別のAWSアカウントへの操作を実施したい場面に遭遇しました。 今回はAWS SDK For Python (Boto3) でAssumeRole を使ってAWSアカウントを切り替える方法についてのご紹介です。
サンプルコード
#!/usr/bin/env python # -*- coding: utf-8 -*- import boto3 from boto3.session import Session # 現在のAWSアカウントで操作 client = boto3.client('sts') account_id = client.get_caller_identity()["Account"] print(account_id) # AWSアカウントの切り替え IAM_ROLE_ARN = 'arn:aws:iam:: 0123456789abc:role/role_name' IAM_ROLE_SESSION_NAME = 'foobar' REGION_NAME = 'ap-northeast-1' response = client.assume_role( RoleArn=IAM_ROLE_ARN, RoleSessionName=IAM_ROLE_SESSION_NAME ) session = Session(aws_access_key_id=response['Credentials']['AccessKeyId'], aws_secret_access_key=response['Credentials']['SecretAccessKey'], aws_session_token=response['Credentials']['SessionToken'], region_name=REGION_NAME) # 切り替えたいAWSアカウントIDで操作 client = session.client('sts') account_id = client.get_caller_identity()["Account"] print(account_id)
現在のAWSアカウントID
現在のAWSアカウントIDの情報は以下で取得できます。
client = boto3.client('sts') account_id = client.get_caller_identity()["Account"] print(account_id)
AWS CLIだと、以下のように取得していた内容。
aws sts get-caller-identity | jq -r '.Account'
RoleArnと、RoleSessionNameを渡して一時クレデンシャルを取得
response = client.assume_role( RoleArn=IAM_ROLE_ARN, RoleSessionName=IAM_ROLE_SESSION_NAME )
AWS CLIだと、以下のように取得していた内容。
aws sts assume-role --role-arn arn:aws:iam::0123456789abc:role/role_name --role-session-name foobar
一時クレデンシャルでAWSアカウントを切り替え
session = Session(aws_access_key_id=response['Credentials']['AccessKeyId'], aws_secret_access_key=response['Credentials']['SecretAccessKey'], aws_session_token=response['Credentials']['SessionToken'], region_name=REGION_NAME) client = session.client('sts')
AWS CLIだと、以下のように環境変数をセットしていた内容。
export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY= export AWS_DEFAULT_REGION=
まとめ
ドキュメントを見るのが一番なのですが、ちょっとわからない時のメモがわりに書きました。 最近、AWS SDK For Python (Boto3)を使う機会が増えたのでブログにしていけたらと思います。