跳至內容

如何允許我的 Lambda 函數存取我的 Amazon S3 儲存貯體?

2 分的閱讀內容
0

我要我的 AWS Lambda 函數存取我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。

簡短說明

若要讓 Lambda 函數存取同一個 AWS 帳戶中的 Amazon S3 儲存貯體,請完成下列步驟:

  1. 為同時授予 S3 儲存貯體存取權的 Lambda 函數建立 AWS Identity and Access Management (IAM) 角色。
  2. 將 IAM 角色設定為 Lambda 函數執行角色
  3. 確認 S3 儲存貯體政策未明確拒絕對 Lambda 函數或其執行角色的存取權。

**重要事項:**如果您的 S3 儲存貯體和功能 IAM 角色位於不同的帳戶中,則您還必須授予 S3 儲存貯體政策所需的許可。如需詳細資訊,請參閱我如何提供對 Amazon S3 儲存貯體中物件的跨帳戶存取權?

解決方法

為同時授予 S3 儲存貯體存取權的 Lambda 函數建立 IAM 角色

若要為同時授予 S3 儲存貯體存取權的 Lambda 函數建立 IAM 角色,請完成下列步驟:

  1. 在 IAM 主控台中建立執行角色

  2. 從 IAM 角色清單中,選擇您建立的角色。

  3. 對於允許 Lambda 擔任執行角色的信任政策,請將 lambda.amazonaws.com 新增為授信服務。選擇信任關係索引標籤,然後選擇編輯信任政策

  4. 將政策中的變數取代為下列變數:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
         "Effect": "Allow",
         "Principal": {
         "Service": "lambda.amazonaws.com"
        },
      "Action": "sts:AssumeRole"
      }
     ]
    }
  5. 選擇更新政策

  6. 許可索引標籤中,選擇新增內嵌政策

  7. 選擇 JSON 索引標籤。

  8. 輸入以資源為基礎的 IAM 政策,以授予 S3 儲存貯體的存取權。如需詳細資訊,請參閱為 Lambda 使用以資源為基礎的政策。下列 IAM 政策範例授予對具有 Get 許可的特定 Amazon S3 儲存貯體的存取權。若要存取 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 金鑰的預設加密。如何允許使用者從儲存貯體下載及上傳?

  9. 選擇檢閱政策

  10. 對於名稱,請輸入政策名稱。

  11. 選擇建立政策

將 IAM 角色設定為 Lambda 函數執行角色

若要將 IAM 角色設定為 Lambda 函數執行角色,請完成下列步驟:

  1. 開啟 Lambda 主控台
  2. 選擇您的 Lambda 函數。
  3. 執行角色下,針對現有角色選取您建立的 IAM 角色。
  4. 選擇儲存

確認 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 政策產生器