AWS Lambda 関数が Amazon Simple Storage Service (Amazon S3) バケットにアクセスできるようにしたい。
簡単な説明
Lambda 関数に同じ AWS アカウントの Amazon S3 バケットへのアクセスを許可するには、以下を実行します:
- S3 バケットへのアクセスも許可する Lambda 関数用の AWS ID およびAccess管理 (IAM) ロールを作成します。
- IAM ロールを Lambda 関数実行ロールとして設定します。
- S3 バケットポリシーが Lambda 関数やその実行ロールへのアクセスを明示的に拒否していないことを確認します。
**重要:**S3 バケットと関数の IAM ロールが異なるアカウントにある場合は、S3 バケットポリシーで必要な権限も付与する必要があります。詳細については、「Amazon S3 バケットにあるオブジェクトへのクロスアカウントアクセスを提供するにはどうすればよいですか?」を参照してください。
解決策
S3 バケットへのアクセスも許可する Lambda 関数の IAM ロールを作成します
S3 バケットへのアクセスも許可する Lambda 関数用の IAM ロールを作成するには、次の手順を実行します。
-
IAM コンソールで実行ロールを作成します。
-
IAM ロールのリストから、作成したばかりのロールを選択します。
-
信頼ポリシーが Lambda に実行ロールを引き継げるようにするために、lambda.amazonaws.com を信頼できるサービスとして追加します。[信頼関係] タブを選択し、[信頼ポリシーの編集] を選択します。
-
ポリシー内の変数を次の変数に置き換えます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
-
[ポリシーの更新] を選択します。
-
[アクセス許可] タブで、[インラインポリシーを追加] を選択します。
-
[JSON] タブを選択します。
-
S3 バケットへのアクセスを許可するリソースベースの IAM ポリシーを入力します。詳細については、「Lambdaでのリソースベースのポリシーの使用」を参照してください。次の IAM ポリシーの例では、特定の Amazon S3 バケットへのアクセスを Get 権限で許可しています。Amazon S3 バケット内のオブジェクトにアクセスするには、必ず正しいパスを指定するか、ワイルドカード文字 (「\ *」) を使用してください。詳細については、「IAM ポリシーの作成: Amazon S3 バケットへのアクセスを許可する方法」を参照してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStmt",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::EXAMPLE-BUCKET/*"
]
}
]
}
注:「"arn:aws:s3:::EXAMPLE-BUCKET"」を S3 バケットの ARN に置き換えてください。オブジェクトが AWS Key Management Service (AWS KMS) キーで暗号化されている場合は、追加のアクセス権限を提供する必要があります。詳細については、「Amazon S3 バケットにカスタム AWS KMS キーを使用したデフォルトの暗号化が設定されています。ユーザーがそのバケットでダウンロードやアップロードを行えるようにするにはどうすればいいですか?」を参照してください。
-
**[ポリシーの確認]**を選択します。
-
[名前] に、ポリシーの名前を入力します。
-
[ポリシーを作成] を選択します。
IAM ロールを Lambda 関数実行ロールとして設定します
IAM ロールを Lambda 関数実行ロールとして設定するには、次の手順を実行します。
- Lambda コンソールを開きます。
- Lambda 関数を選択します。
- [実行ロール] の [既存のロール] で、作成した IAM ロールを選択します。
- [保存] を選択します。
S3 バケットポリシーが Lambda 関数やその実行ロールへのアクセスを明示的に拒否していないことを確認します
S3 バケットポリシーを確認または編集するには、「Amazon S3コンソールを使用してバケットポリシーを追加する」の指示に従います。
次の IAM バケットポリシーの例では、Lambda 実行ロールに S3 バケットへのクロスアカウントアクセスを許可しています。
{
"Id": "ExamplePolicy",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStmt",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::EXAMPLE-BUCKET/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
]
}
}
]
}
注:「"arn:aws:s3:::EXAMPLE-BUCKET"」を S3 バケットの ARN に置き換え、「"arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"」を Lambda 実行ロールの ARN に置き換えます。
関連情報
AWS ポリシージェネレーター