Lambda 実行ロールに Amazon S3 バケットへのアクセスを許可するにはどうすればよいですか?

最終更新日: 2020 年 6 月 11 日

AWS Lambda 関数が Amazon Simple Storage Service (Amazon S3) バケットにアクセスできるようにしたいと考えています。これはどのように実行できますか?

簡単な説明

以下の手順を実行してください。

1.    Lambda 関数用に、S3 バケットへのアクセス権も付与する AWS Identity and Access Management (IAM) ロールを作成します。

2.    その IAM ロールを Lambda 関数の実行ロールとして設定します。

3.    バケットポリシーが Lambda 関数の実行ロールにアクセス権を付与することを確認します。

重要 : Lambda 関数用に作成する IAM ロールがバケットと同じ AWS アカウントにある場合、IAM ロールとバケットポリシーの両方で Amazon S3 アクセス許可を付与する必要はありません。その代わりに、IAM ロールでアクセス許可を付与できます。その後、バケットポリシーが Lambda 関数のロールへのアクセスを明示的に拒否しないことを確認します。例として、以下の手順では、IAM ロールの Amazon S3 アクセス許可を付与します。IAM ロールとバケットが異なるアカウントにある場合、IAM ロールとバケットポリシーの両方で Amazon S3 アクセス許可を付与する必要があります。

解決方法

S3 バケットへのアクセス権も付与する Lambda 関数用の IAM ロール (実行ロール) を作成する

1.    IAM コンソールでの実行ロールの作成手順に従います。

2.    IAM ロールのリストから、先ほど作成したロールを選択します。

3.    [アクセス権限] タブで [インラインポリシーの追加] を選択します。

4.    [JSON] タブを選択します。

5.    S3 バケットへのアクセス権を付与するポリシーを入力します。以下のようなポリシーを使用できます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
      ]
    }
  ]
}

6.    [ポリシーの確認] を選択します。

7.    名前にはポリシーの名前を入力します。

8.    [ポリシーの作成] を選択します。

IAM ロールを Lambda 関数の実行ロールとして設定する

1.    Lambda コンソールを開きます。

2.    Lambda 関数を選択します。

3.    実行ロールで、既存のロールに作成した IAM ロールを選択します。

4.    [保存] を選択します。

バケットポリシーが Lambda 関数の実行ロールにアクセス権を付与することを確認する

お客様の Lambda 関数の実行ロール (IAM ロール) がバケットと同じ AWS アカウントの場合、バケットポリシーが Lambda 関数あるいは実行ロールへのアクセスを明示的に拒否しないことを確認してください。バケットポリシーがアクセスを明示的に拒否しない限り、IAM ロールに付与されたアクセス許可により、Lambda 関数がパケットにアクセスできます。

Lambda 関数の実行ロールとパケットが異なるアカウントに属する場合、実行ロールからのリクエストについて、バケットへのアクセスを許可するバケットポリシーを追加する必要があります。このクロスアカウントアクセスの場合、 IAM ポリシーとバケットポリシーの両方で、 Amazon S3 へのアクセス許可を実行ロールに付与する必要があります。

以下のようなバケットポリシーを使用できます。

{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
        ]
      }
    }
  ]
}

このページは役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合