設定身分與存取權管理權限和角色 @Edge - Amazon CloudFront

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

設定身分與存取權管理權限和角色 @Edge

若要設定 Lambda @Edge,您必須擁有下列的身分與存取權管理權限和角色:

  • IAM 許可 — 這些許可允許您創建 AWS Lambda 功能並將其與 CloudFront 分發相關聯。

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

  • Lambda @Edge 的服務連結角色 — 服務連結角色可讓特定角色將 Lambda 函數複寫 AWS 服務 至記錄檔, AWS 區域 並讓其能 CloudWatch夠使用 CloudFront 記錄檔。

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

除了 Lambda 所需的 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 — 授予更新或建立發行版的權限。

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

服務主體的函數執行角色

您必須建立 IAM 角色,以lambda.amazonaws.com.rproxy.goskope.comedgelambda.amazonaws.com服務主體在執行您的函數時可以承擔這個角色。

提示

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

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

範例:角色信任原則

您可以在 IAM 主控台的「信任關係」索引標籤下新增此角色。請勿在 [權限] 索引標籤下新增此原則。

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

如需需要授與執行角色之權限的詳細資訊,請參閱AWS Lambda 開發人員指南中的 Lambda 資源存取權限

備註
  • 根據預設,每當 CloudFront 事件觸發 Lambda 函數時,資料就會寫入 CloudWatch 日誌。如果您想要使用這些記錄檔,執行角色需要將資料寫入 CloudWatch 記錄檔的權限。您可以使用預先定義的AWSLambdaBasicExecutionRole來授與執行角色的權限。

    如需有關 CloudWatch 記錄檔的詳細資訊,請參閱邊緣函數日誌

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

Lambda@Edge 的服務連結角色

Lambda @Edge 使用 IAM 服務連結角色。服務連結角色是直接連結至服務的一種特殊 IAM 角色類型。服務連結角色由服務預先定義,並包含該服務在代表您呼叫其他 AWS 服務時,需要用到的所有權限。

Lambda @Edge 使用下列 IAM 服務連結角色:

  • AWSServiceRoleForLambdaReplicator – Lambda@Edge 使用此角色讓 Lambda@Edge 將函數複寫至 AWS 區域。

    當您第一次在中新增 Lambda @Edge 觸發程序時 CloudFront,會自動建立名AWSServiceRoleForLambdaReplicator為的角色,以允許 Lambda @Edge 將函數複寫到 AWS 區域。需要此角色才能使用 Lambda @Edge 函數。角色的 ARN 看AWSServiceRoleForLambdaReplicator起來像下列範例:

    arn:aws:iam::123456789012:role/aws-service-role/replicator.lambda.amazonaws.com/AWSServiceRoleForLambdaReplicator

  • AWSServiceRoleForCloudFrontLogger— CloudFront 使用此角色將記錄檔推送至 CloudWatch。您可以使用記錄檔來偵錯 Lambda @Edge 驗證錯誤。

    當您新增 Lambda @Edge 函數關聯時,會自動建立AWSServiceRoleForCloudFrontLogger角色,以 CloudFront 允許將 Lambda @Edge 錯誤記錄檔推送至 CloudWatch。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的服務連結角色權限

此服務連結角色可 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 將 @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 使用者指南中的編輯服務連結角色

支援 CloudFront 服 AWS 區域 務連結角色

CloudFront 在下列情況下,支援針對 Lambda @Edge 使用服務連結角色: AWS 區域

  • 美國東部 (維吉尼亞北部) – 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