1
0

More than 3 years have passed since last update.

【AWS】Lambdaで別アカウントのリソースにアクセスする

Posted at

目的

  • 何回かやって調べながらやったためメモ的に
  • lambdaで別アカウントの各リソースにアクセスしたい Untitled Diagram (1).png

準備するもの

  • アカウントA
    • Lambda用IAM Role
    • Lambda関数
  • アカウントB
    • assume role用 IAM Role

作成

アカウントB

Role

ポリシーはアクセスしたいリソースによって変える

信頼関係を以下のように編集する

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::アカウントAのアカウント番号:role/LambdaのRole名"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

アカウントA

policy

以下ポリシーを付けたRoleを作成

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::アカウントBのアカウント番号:role/アカウントBで作成したRole名"
    }
}

Lambda関数

import boto3

def lambda_handler(context, event):

    sts_connection = boto3.client('sts')
    acct_b = sts_connection.assume_role(
        RoleArn="arn:aws:iam::アカウントBのアカウント番号:role/アカウントBで作成したRole名",
        RoleSessionName="cross_acct_lambda"
    )

    ACCESS_KEY = acct_b['Credentials']['AccessKeyId']
    SECRET_KEY = acct_b['Credentials']['SecretAccessKey']
    SESSION_TOKEN = acct_b['Credentials']['SessionToken']

    # create service client using the assumed role credentials, e.g. S3
    client = boto3.client(
        's3',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN,
    )

    return "Hello from Lambda"

これでアカウントBにアクセスできるLambdaが完成
複数環境にアクセスしたい場合はCloudFormationとかでアカウントにIAMRole配ればできるようになるので
今後はここら辺を簡単に実装できる方法を考えたい、、、

参考

1
0
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
1
0