LoginSignup
2
1

boto3 APIで実装するAssumeRole(Python)

Last updated at Posted at 2023-01-13

AssumeRoleとは

現在のIAMの権限から、異なるIAMロールへ権限委譲するときに利用するAWS API名。
本記事では、Lambdaに付与しているIAMロールからAssumeRole先のIAMロールへ権限委譲するための実装を後述。
スクリーンショット 2023-01-13 11.04.06.png

IAMロールの構築

Lambdaに付与するIAMロールを作成
スクリーンショット 2023-01-13 11.06.26.png

AssumeRole先のIAMロールを作成(添付画像の信頼関係の設定必須!)
スクリーンショット 2023-01-13 11.08.20.png

{
    "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」をクリック
スクリーンショット 2023-01-13 11.11.24.png

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())

結果の確認

AssumeRole前とAssumeRole先でIAMロールが変更されていること(権限委譲されていること)を確認できた
スクリーンショット 2023-01-13 11.16.18.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1