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

参考URL

Boto 3 Documentation

ではまた。