

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 Lambda@Edge 的 IAM 許可權限和角色
<a name="lambda-edge-permissions"></a>

若要設定 Lambda@Edge，您必須具有以下適用於 AWS Lambda的 IAM 許可權限和角色：
+ [IAM 許可權限](#lambda-edge-permissions-required)：這些許可權限可讓您建立 Lambda 函數，並將其與 CloudFront 分佈建立關聯。
+ [Lambda 函數執行角色](#lambda-edge-permissions-function-execution) (IAM 角色) – Lambda 服務主體會擔任此角色來執行您的函數。
+ [Lambda@Edge 的服務連結角色](#using-service-linked-roles-lambda-edge) – 服務連結角色允許特定 AWS 服務 將 Lambda 函數複寫到 ， AWS 區域 並讓 CloudWatch 使用 CloudFront 日誌檔案。

## 將 Lambda@Edge 函數與 CloudFront 分佈產生關聯所需的 IAM 許可
<a name="lambda-edge-permissions-required"></a>

除了 Lambda 需要的 IAM 許可權限之外，IAM 使用者還需要下列 IAM 許可權限，以便將 Lambda 函數與 CloudFront 分佈建立關聯：
+ `lambda:GetFunction`：授予許可權限以取得 Lambda 函數的組態資訊，以及預先簽署的 URL，以下載包含該函數的 `.zip` 檔案。
+ `lambda:EnableReplication*`：授予許可權限至資源政策，讓 Lambda 複寫服務能夠取得函數程式碼和組態。
+ `lambda:DisableReplication*`：授予許可權限至資源政策，以便讓 Lambda 複寫服務可以刪除函數。
**重要**  
您必須在 `lambda:EnableReplication*` 和 `lambda:DisableReplication*` 動作的結尾新增星號 (`*`)。
+ 對於資源，指定要在 CloudFront 事件發生時執行之函數版本 ARN，如以下範例所示：

  `arn:aws:lambda:us-east-1:123456789012:function:TestFunction:2`
+ `iam:CreateServiceLinkedRole`：授予許可權限建立服務連結角色，供 Lambda@Edge 用來複寫 CloudFront 中的 Lambda 函數。第一次設定 Lambda@Edge 之後，會自動為您建立服務連結角色。您不需要將此許可權限新增至使用 Lambda@Edge 的其他分佈。

  
+ `cloudfront:UpdateDistribution` 或 `cloudfront:CreateDistribution`：授予許可權限以更新或建立分佈。

如需詳細資訊，請參閱下列主題：
+ [適用於 Amazon CloudFront 的 Identity and Access Management](security-iam.md)
+ 《*AWS Lambda 開發人員指南*》中的 [Lambda 資源存取許可權限](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role)

## 服務主體的函數執行角色
<a name="lambda-edge-permissions-function-execution"></a>

您必須建立 `lambda.amazonaws.com` 和 `edgelambda.amazonaws.com` 服務主體可在執行函數時擔任的 IAM 角色。

**提示**  
在 Lambda 主控台中建立函數時，您可以選擇使用 AWS 政策範本建立新的執行角色。此步驟會*自動*新增執行函數所需的 Lambda@Edge 許可權限。請參閱[教學課程：建立簡單 Lambda@Edge 函數中的步驟 5](lambda-edge-how-it-works-tutorial.md#lambda-edge-how-it-works-tutorial-create-function)。

如需有關手動建立 IAM 角色的詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色及附加政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions_create-policies.html)。

**Example 範例：角色信任政策**  
您可在 IAM 主控台的**信任關係**索引標籤之下新增此角色。請勿在**許可權限**索引標籤下新增此政策。    
****  

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

如需更多資訊瞭解授予執行角色所需的許可權限，請參閱《*AWS Lambda 開發人員指南*》中的 [Lambda 資源存取許可權限](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role)。

**備註**  
根據預設，每當 CloudFront 事件觸發 Lambda 函數時，都會將資料寫入至 CloudWatch Logs。若要使用這些日誌，執行角色需要許可才能將資料寫入 CloudWatch Logs。您能使用預先定義的 AWSLambdaBasicExecutionRole 對執行角色授予許可權限。  
如需 CloudWatch Logs 的詳細資訊，請參閱[邊緣函數日誌](edge-functions-logs.md)。
如果您的 Lambda 函數程式碼存取其他 AWS 資源，例如從 S3 儲存貯體讀取物件，則執行角色需要執行該動作的許可。

## Lambda@Edge 的服務連結角色
<a name="using-service-linked-roles-lambda-edge"></a>

Lambda@Edge 使用 IAM [服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服務連結角色是直接連結至服務的一種特殊 IAM 角色類型。服務連結角色由服務預先定義，並包含該服務在代表您呼叫其他 AWS 服務時，需要用到的所有權限。

Lambda@Edge 使用以下 IAM 服務連結角色：
+ **AWSServiceRoleForLambdaReplicator** – Lambda@Edge 使用此角色讓 Lambda@Edge 將函數複寫至 AWS 區域。

  您初次在 CloudFront 中新增 Lambda@Edge 觸發條件時，將會自動建立名為 AWSServiceRoleForLambdaReplicator 的角色，以便讓 Lambda@Edge 將函數複寫至 AWS 區域。使用 Lambda@Edge 函數時需要這個角色。AWSServiceRoleForLambdaReplicator 角色的 ARN 類似以下範例：

  `arn:aws:iam::123456789012:role/aws-service-role/replicator.lambda.amazonaws.com/AWSServiceRoleForLambdaReplicator`
+ **AWSServiceRoleForCloudFrontLogger**：CloudFront 使用此角色將日誌檔案推送至 CloudWatch。您可以使用日誌檔案來偵錯 Lambda@Edge 驗證錯誤。

  您新增 Lambda@Edge 函數關聯，讓 CloudFront 將 Lambda@Edge 錯誤日誌檔案推送至 CloudWatch 時，會自動建立名為 AWSServiceRoleForCloudFrontLogger 的角色。AWSServiceRoleForCloudFrontLogger 角色的 ARN 看起來類似如下：

  `arn:aws:iam::account_number:role/aws-service-role/logger.cloudfront.amazonaws.com/AWSServiceRoleForCloudFrontLogger`

服務連結角色可讓設定及使用 Lambda@Edge 變得更輕鬆，因為您不必手動新增必要的許可。Lambda@Edge 會定義其服務連結角色的許可，而且只有 Lambda@Edge 能夠擔任此角色。已定義的許可包括信任政策和許可政策。許可政策無法連接到其他任何 IAM 實體。

您必須移除任何關聯的 CloudFront 或 Lambda@Edge 資源，然後才能刪除服務連結角色。這有助於保護您的 Lambda@Edge 資源，讓您不會移除在存取作用中資源時仍有需要的服務連結角色。

如需服務連結角色的詳細資訊，請參閱[CloudFront 的服務連結角色](security_iam_service-with-iam.md#security_iam_service-with-iam-roles-service-linked)。

### Lambda@Edge 的服務連結角色許可
<a name="slr-permissions-lambda-edge"></a>

Lambda@Edge 使用兩個服務連結角色，分別名為 **AWSServiceRoleForLambdaReplicator** 及 **AWSServiceRoleForCloudFrontLogger**。以下章節說明這些角色的許可。

**Contents**
+ [

#### Lambda Replicator 的服務連結角色許可
](#slr-permissions-lambda-replicator)
+ [

#### CloudFront Logger 的服務連結角色許可
](#slr-permissions-cloudfront-logger)

#### Lambda Replicator 的服務連結角色許可
<a name="slr-permissions-lambda-replicator"></a>

這個服務連結的角色可讓 Lambda 將 Lambda@Edge 函數複製到 AWS 區域。

AWSServiceRoleForLambdaReplicator 服務連結角色信任 `replicator.lambda.amazonaws.com` 服務來擔任該角色。

角色許可政策允許 Lambda@Edge 在指定資源上完成下列動作：
+ `arn:aws:lambda:*:*:function:*` 的 `lambda:CreateFunction`
+ `arn:aws:lambda:*:*:function:*` 的 `lambda:DeleteFunction`
+ `arn:aws:lambda:*:*:function:*` 的 `lambda:DisableReplication`
+ `all AWS resources` 的 `iam:PassRole`
+  `all AWS resources` 的 `cloudfront:ListDistributionsByLambdaFunction`

#### CloudFront Logger 的服務連結角色許可
<a name="slr-permissions-cloudfront-logger"></a>

此服務連結角色可讓 CloudFront 將日誌檔案推送至您的 CloudWatch，以讓您偵錯 Lambda@Edge 驗證錯誤。

AWSServiceRoleForCloudFrontLogger 服務連結角色信任 `logger.cloudfront.amazonaws.com` 服務來擔任該角色。

角色許可政策允許 Lambda@Edge 在指定 `arn:aws:logs:*:*:log-group:/aws/cloudfront/*` 資源上完成下列動作：
+ `logs:CreateLogGroup` ``
+ `logs:CreateLogStream`
+ `logs:PutLogEvents`

您必須設定許可，允許 IAM 實體 (例如使用者、群組或角色) 刪除 Lambda@Edge 服務連結角色。如需詳細資訊，請參閱 *IAM 使用者指南*中的[服務連結角色許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

### 建立 Lambda@Edge 的服務連結角色
<a name="create-slr-lambda-edge"></a>

一般而言，您不需要手動建立 Lambda@Edge 的服務連結角色。此服務會在以下情境為您自動建立角色：
+ 您第一次建立觸發條件時，服務會建立 AWSServiceRoleForLambdaReplicator 角色 (如果尚未存在)。這個角色可讓 Lambda 將 Lambda@Edge 函數複寫到 AWS 區域。

  如果您刪除服務連結角色，則當您在分佈中為 Lambda@Edge 新增觸發條件時，將會重新建立此角色。
+ 您更新或建立具有 Lambda@Edge 關聯的 CloudFront 分佈時，服務會建立一個 AWSServiceRoleForCloudFrontLogger 角色 (如果該角色尚不存在)。此角色可讓 CloudFront 將日誌檔案推送至 CloudWatch。

  如果您刪除服務連結角色，當您更新或建立具有 Lambda@Edge 關聯的 CloudFront 分佈時，將會再次建立此角色。

若要手動建立這些服務連結角色，您可以執行下列 AWS Command Line Interface (AWS CLI) 命令：

**建立 AWSServiceRoleForLambdaReplicator 角色**
+ 執行下列命令。

  ```
  aws iam create-service-linked-role --aws-service-name replicator.lambda.amazonaws.com
  ```

**建立 AWSServiceRoleForCloudFrontLogger 角色**
+ 執行下列命令。

  ```
  aws iam create-service-linked-role --aws-service-name logger.cloudfront.amazonaws.com
  ```

### 編輯 Lambda@Edge 服務連結角色
<a name="edit-slr-lambda-edge"></a>

Lambda@Edge 不允許您編輯 AWSServiceRoleForLambdaReplicator 或 AWSServiceRoleForCloudFrontLogger 服務連結角色。在服務建立服務連結角色之後，您將無法變更角色名稱，因為各種實體皆可能會參考角色。不過，您可以使用 IAM 來編輯角色描述。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[編輯服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

### AWS 區域 支援 Lambda@Edge 服務連結角色
<a name="slr-regions-lambda-edge"></a>

CloudFront 在下列 AWS 區域中支援將服務連結角色用於 Lambda@Edge：
+ 美國東部 (維吉尼亞北部) – `us-east-1`
+ 美國東部 (俄亥俄) – `us-east-2`
+ 美國西部 (加利佛尼亞北部) – `us-west-1`
+ 美國西部 (奧勒岡) – `us-west-2`
+ 亞太地區 (孟買) – `ap-south-1`
+ 亞太地區 (首爾) – `ap-northeast-2`
+ 亞太地區 (新加坡) – `ap-southeast-1`
+ 亞太地區 (雪梨) – `ap-southeast-2`
+ 亞太地區 (東京) – `ap-northeast-1`
+ 歐洲 (法蘭克福) – `eu-central-1`
+ 歐洲 (愛爾蘭) – `eu-west-1`
+ 歐洲 (倫敦) – `eu-west-2`
+ 南美洲 (聖保羅) – `sa-east-1`