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

最終更新日: 2021 年 7 月 20 日

AWS Lambda 関数が Amazon Simple Storage Service (Amazon S3) バケットにアクセスできるようにしたいと考えています。その方法を教えてください。

簡単な説明

同じ AWS アカウント内の Amazon S3 バケットへのアクセス権を Lambda 関数に付与するには、次の手順を実行します。

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

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

3.    S3 バケットポリシーが Lambda 関数またはその実行ロールへのアクセスを明示的に拒否していないことを確認します。

重要: S3 バケットと関数の IAM ロールが異なるアカウントにある場合、S3 バケットポリシーに必要な許可も付与する必要があります。詳細については、Amazon S3 バケット内のオブジェクトへのクロスアカウントアクセスを提供するにはどうすればよいですか? を参照してください。

解決方法

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

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

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

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

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

5.    S3 バケットへのアクセス権を付与するリソースベースの IAM ポリシーを入力します。詳細については、AWS Lambda のリソースベースのポリシーを使用するを参照してください。

特定の S3 バケットへのアクセス権を付与する IAM ポリシーの例

重要: 「arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*」を S3 バケットの Amazon リソースネーム (ARN) に置き換えてください。

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

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

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

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

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

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

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

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

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

S3 バケットポリシーが Lambda 関数またはその実行ロールへのアクセスを明示的に拒否していないことを確認する

S3 バケットポリシーを確認または編集するには、Amazon S3 コンソールを使用したバケットポリシーの追加の手順に従います。

重要: S3 バケットと関数の IAM ロールが異なるアカウントにある場合、S3 バケットポリシーに必要な許可も明示的に付与する必要があります。詳細については、Amazon S3 バケット内のオブジェクトへのクロスアカウントアクセスを提供するにはどうすればよいですか? を参照してください。

S3 バケットへのクロスアカウントアクセスを Lambda 実行ロールに付与する IAM S3 バケットポリシーの例

重要: 「arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*」を S3 バケットの ARN に置き換えてください。「arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012」を Lambda 実行ロールの ARN に置き換えます。

{
  "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"
        ]
      }
    }
  ]
}

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?