AWS Lambda 関数が Amazon Simple Storage Service (Amazon S3) バケットにアクセスできるようにしたいと考えています。
簡単な説明
Lambda 関数に対して同じ AWS アカウントの Amazon S3 バケットへのアクセス権を付与するには、次の手順を実行します。
- Lambda 関数用の AWS Identity and Access Management (IAM) ロールを作成し、Amazon S3 バケットへのアクセス権も付与します。
- IAM ロールを Lambda 関数実行ロールとして設定します。
- Amazon S3 バケットポリシーが Lambda 関数またはその実行ロールへのアクセスを明示的に拒否していないことを確認します。
重要: Amazon S3 バケットと関数の IAM ロールが異なるアカウントにある場合は、Amazon S3 バケットポリシーで必要なアクセス許可も付与する必要があります。詳細については、「Amazon S3 バケットにあるオブジェクトに対するクロスアカウントアクセス許可を付与するにはどうすればよいですか?」を参照してください。
解決策
Lambda 関数用の IAM ロールを作成し、Amazon S3 バケットへのアクセス権も付与する
Lambda 関数用の IAM ロールを作成して Amazon S3 バケットへのアクセス権も付与するには、次の手順を実行します。
-
IAM コンソールで実行ロールを作成します。
-
IAM ロールのリストから、作成したロールを選択します。
-
Lambda が実行ロールを引き受けられるように信頼ポリシーを設定するには、lambda.amazonaws.com を信頼できるサービスとして追加します。[信頼関係] タブを選択し、[信頼ポリシーの編集] を選択します。
-
ポリシー内の変数を次の変数に置き換えます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
-
[ポリシーの更新] を選択します。
-
[アクセス許可] タブで、[インラインポリシーを追加] を選択します。
-
[JSON] タブを選択します。
-
Amazon S3 バケットへのアクセス権を付与するリソースベースの IAM ポリシーを入力します。詳細については、「Using resource-based policies for Lambda」(Lambda でのリソースベースのポリシーの使用) を参照してください。次の IAM ポリシーの例では、Get アクセス許可を使用して、特定の Amazon S3 バケットへのアクセス権を付与しています。Amazon S3 バケット内のオブジェクトにアクセスするには、正しいパスを指定するか、ワイルドカード文字 (「*」) を使用してください。詳細については、「Writing IAM Policies: how to grant access to an Amazon S3 bucket」(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" を Amazon S3 バケットの Amazon リソースネーム (ARN) に置き換えてください。AWS Key Management Service (AWS KMS) キーを使用してオブジェクトを暗号化した場合は、必要なアクセス許可も付与する必要があります。詳細については、「カスタマーマネージドの AWS KMS キーで暗号化した Amazon S3 バケットへのダウンロードとアップロードをユーザーに許可する方法を教えてください」を参照してください。
-
[ポリシーの確認] を選択します。
-
[名前] に、ポリシーの名前を入力します。
-
[ポリシーの作成] を選択します。
IAM ロールを Lambda 関数実行ロールとして設定する
IAM ロールを Lambda 関数実行ロールとして設定するには、次の手順を実行します。
- Lambda コンソールを開きます。
- Lambda 関数を選択します。
- [実行ロール] の [既存のロール] で、作成した IAM ロールを選択します。
- [保存] を選択します。
Amazon S3 バケットポリシーが Lambda 関数またはその実行ロールへのアクセスを明示的に拒否していないことを確認する
Amazon S3 コンソールを使用して Amazon S3 バケットポリシーを確認します。ポリシーで Lambda 関数とその実行ロールへのアクセスが許可されていることを確認します。
次の IAM ポリシーの例では、Lambda 実行ロールに Amazon 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" を Amazon S3 バケットの ARN に、"arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012" を Lambda 実行ロールの ARN に置き換えてください。
関連情報
AWS Policy Generator