Open4

別アカウントのS3バケットを読み取る方法の調査メモ

shimi7oshimi7o

S3バケットのバケットポリシーを下記のように設定する。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{アクセスを許可するAWSアカウントID}:root"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::{S3バケット名}/*",
                "arn:aws:s3:::{S3バケット名}"
            ]
        }
    ]
}
shimi7oshimi7o

別アカウントのLambdaからアクセスする。
LambdaのIAMロールにS3 Full Access権限をつけておく。

import json
import boto3

client = boto3.client('s3')

def lambda_handler(event, context):
    response = client.get_object(Bucket='{バケット名}',Key='{オブジェクト名}')
    body = response['Body'].read()    
    print(body)
    
    return {
        'statusCode': 200,
    }

shimi7oshimi7o

Lambdaのテスト実行でファイルが読めることが確認できた。