設定 Lambda@Edge 的 IAM 許可權限和角色 - Amazon CloudFront

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

設定 Lambda@Edge 的 IAM 許可權限和角色

若要設定 Lambda@Edge,您必須具有以下適用於 AWS Lambda的 IAM 許可權限和角色:

  • IAM 許可權限:這些許可權限可讓您建立 Lambda 函數,並將其與 CloudFront 分佈建立關聯。

  • Lambda 函數執行角色 (IAM 角色) – Lambda 服務主體會擔任此角色來執行您的函數。

  • Lambda@Edge 的服務連結角色 – 服務連結角色允許特定 AWS 服務 將 Lambda 函數複寫到 , AWS 區域 並讓 CloudWatch 使用 CloudFront 日誌檔案。

將 Lambda@Edge 函數與 CloudFront 分佈產生關聯所需的 IAM 許可

除了 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:UpdateDistributioncloudfront:CreateDistribution:授予許可權限以更新或建立分佈。

如需詳細資訊,請參閱下列主題:

服務主體的函數執行角色

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

提示

在 Lambda 主控台中建立函數時,您可以選擇使用 AWS 政策範本建立新的執行角色。此步驟會自動新增執行函數所需的 Lambda@Edge 許可權限。請參閱教學課程:建立簡單 Lambda@Edge 函數中的步驟 5

如需有關手動建立 IAM 角色的詳細資訊,請參閱《IAM 使用者指南》中的建立角色及附加政策 (主控台)

範例:角色信任政策

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

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

如需更多資訊瞭解授予執行角色所需的許可權限,請參閱《AWS Lambda 開發人員指南》中的 Lambda 資源存取許可權限

備註
  • 根據預設,每當 CloudFront 事件觸發 Lambda 函數時,都會將資料寫入至 CloudWatch Logs。若要使用這些日誌,執行角色需要許可才能將資料寫入 CloudWatch Logs。您能使用預先定義的 AWSLambdaBasicExecutionRole 對執行角色授予許可權限。

    如需 CloudWatch Logs 的詳細資訊,請參閱邊緣函數日誌

  • 如果您的 Lambda 函數程式碼存取其他 AWS 資源,例如從 S3 儲存貯體讀取物件,則執行角色需要執行該動作的許可。

Lambda@Edge 的服務連結角色

Lambda@Edge 使用 IAM 服務連結角色。服務連結角色是直接連結至服務的一種特殊 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 的服務連結角色

Lambda@Edge 的服務連結角色許可

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

Lambda Replicator 的服務連結角色許可

這個服務連結的角色可讓 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 resourcesiam:PassRole

  • all AWS resourcescloudfront:ListDistributionsByLambdaFunction

CloudFront Logger 的服務連結角色許可

此服務連結角色可讓 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 使用者指南中的服務連結角色許可

建立 Lambda@Edge 的服務連結角色

一般而言,您不需要手動建立 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 服務連結角色

Lambda@Edge 不允許您編輯 AWSServiceRoleForLambdaReplicator 或 AWSServiceRoleForCloudFrontLogger 服務連結角色。在服務建立服務連結角色之後,您將無法變更角色名稱,因為各種實體皆可能會參考角色。不過,您可以使用 IAM 來編輯角色描述。如需詳細資訊,請參閱《IAM 使用者指南》中的編輯服務連結角色

AWS 區域 支援 Lambda@Edge 服務連結角色

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