AssumeRoleとは
現在のIAMの権限から、異なるIAMロールへ権限委譲するときに利用するAWS API名。
本記事では、Lambdaに付与しているIAMロールからAssumeRole先のIAMロールへ権限委譲するための実装を後述。
IAMロールの構築
AssumeRole先のIAMロールを作成(添付画像の信頼関係の設定必須!)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::${アカウントID指定}:role/Lambda-Role"
},
"Action": "sts:AssumeRole"
}
]
}
AssumeRoleをするためのLambdaを作成
Lambda作成後に「AssumeRole用のスクリプト」を貼り付けてデプロイ後に、「Test」をクリック
AssumeRole用のスクリプト
一部の値を除いて(${アカウントID指定})、そのまま流用できます!
import boto3
def lambda_handler(event, context):
sts = boto3.client('sts',
region_name='us-east-1',
endpoint_url='https://sts.us-east-1.amazonaws.com')
print("## AssumeRole前のLambdaに付与しているIAMロールを出力 ##")
print(sts.get_caller_identity())
res = sts.assume_role(RoleArn='arn:aws:iam::${アカウントID指定}:role/lambda-iam-assumerole',
RoleSessionName='dev-assume-role')
session = boto3.Session(aws_access_key_id=res['Credentials']['AccessKeyId'],
aws_secret_access_key=res['Credentials']['SecretAccessKey'],
aws_session_token=res['Credentials']['SessionToken'],
region_name='ap-northeast-1')
sts = session.client('sts')
print("## AssumeRole先のIAMロールを出力 ##")
print(sts.get_caller_identity())