Open4
別アカウントのS3バケットを読み取る方法の調査メモ
S3のアクセス制御について復習。
アクセス制御の方法は4種類ある。
バケット単位で制御するときは、バケットポリシーを用いるのが手軽。
- ACL
- バケットポリシー
- IAM
- パブリックブロックアクセス
ACLを設定せずにバケットポリシーだけ設定すればよさそう。
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バケット名}"
]
}
]
}
別アカウントの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,
}
Lambdaのテスト実行でファイルが読めることが確認できた。