本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 Lambda @Edge 設定IAM權限和角色
若要設定 Lambda @Edge,您必須擁有下列IAM權限和角色 AWS Lambda:
-
IAM權限 — 這些權限可讓您建立 Lambda 函數,並將其與您的CloudFront 分發產生關聯。
-
Lambda 函數執行角色 (IAM角色) — Lambda 服務主體承擔此角色來執行您的函數。
-
Lambda @Edge 的服務連結角色 — 服務連結角色可讓特定角色將 Lambda 函數複寫 AWS 服務 至記錄檔, AWS 區域 並讓其能 CloudWatch夠使用 CloudFront 記錄檔。
IAM將 Lambda @Edge 函數與 CloudFront 發佈產生關聯所需的權限
除了 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:UpdateDistribution
或cloudfront:CreateDistribution
— 授予更新或建立發行版的權限。
如需詳細資訊,請參閱下列主題:
-
AWS Lambda 開發人員指南中的 Lambda 資源存取權限
服務主體的函數執行角色
您必須建立lambda.amazonaws.com
和edgelambda.amazonaws.com
服務主參與者在執行您的函數時可以承擔的IAM角色。
提示
在 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。對ARN於AWSServiceRoleForCloudFrontLogger角色看起來像這樣:
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 使用兩個服務連結角色,分別名為 AWSServiceRoleForLambdaReplicator 及 AWSServiceRoleForCloudFrontLogger。以下章節說明這些角色的許可。
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 resources
的iam:PassRole
-
all AWS resources
的cloudfront: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