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

2 分的閱讀內容
0

我希望我的 AWS Lambda 函數能夠存取我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。

簡短描述

若要讓 Lambda 函數存取同一個 AWS 帳戶中的 Amazon S3 儲存貯體,請執行下列動作:

1.    為 Lambda 函數建立 AWS 身分和存取管理 (IAM) 角色,同時授予 S3 儲存貯體的存取權。

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

3.    確認 S3 儲存貯體政策未明確拒絕對 Lambda 函數或其執行角色的存取。

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

解決方案

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

1.    請遵循在 IAM 主控台中建立執行角色中的步驟

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

3.    信任政策必須允許 Lambda 透過將** lambda.amazonaws.com 新增為受信任的服務來擔任執行角色。選擇信任關係索引標籤,然後選擇編輯信任政策**,再使用下列項目取代政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
     "Effect": "Allow",
     "Principal": {
     "Service": "lambda.amazonaws.com"
    },
  "Action": "sts:AssumeRole"
  }
 ]
}

4.選擇更新政策

5.    在權限索引標籤中,選擇新增內嵌政策

6.    選擇 JSON 索引標籤。

7.    輸入以資源為基礎的 IAM 政策,以授予 S3 儲存貯體的存取權。如需詳細資訊,請參閱為 AWS Lambda 使用以資源為基礎的政策

下列 IAM 政策範例授予對具有 Get 權限的特定 Amazon S3 儲存貯體的存取權。若要存取 Amazon S3 儲存貯體內的物件,請確保指定正確的路徑或使用萬用字元 (「*」)。如需詳細資訊,請參閱撰寫 IAM 政策: 如何授予對 Amazon S3 儲存貯體的存取權,以取得詳細資訊

**重要事項:**使用您的 S3 儲存貯體 Amazon Resource Name (ARN) 取代 "arn:aws:s3:::EXAMPLE-BUCKET"

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

6.    選擇檢閱政策

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

8.    選擇建立政策

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

1.    開啟 Lambda 主控台

2.    選擇您的 Lambda 函數。

3.    在執行角色下,針對現有角色選取您建立的 IAM 角色。

4.    選擇儲存

確認 S3 儲存貯體政策未明確拒絕對 Lambda 函數或其執行角色的存取

若要檢閱或編輯 S3 儲存貯體政策,請使用 Amazon S3 主控台按照新增儲存貯體政策中的指示進行操作

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

下列範例 IAM S3 儲存貯體政策授予對 S3 儲存貯體的 Lambda 執行角色跨帳戶存取權。

**重要事項:**使用您的 S3 儲存貯體 ARN 取代 "arn:aws:s3:::EXAMPLE-BUCKET/*"。使用您的 Lambda 執行角色 ARN 取代 "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"

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

相關資訊

AWS 政策產生器

AWS 官方
AWS 官方已更新 1 年前