AWS SDK For Python (Boto3) で AssumeRole を使ってみた

2017.06.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

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)を使う機会が増えたのでブログにしていけたらと思います。

参考URL

Boto 3 Documentation