本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 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:UpdateDistribution或cloudfront:CreateDistribution:授予許可權限以更新或建立分佈。
如需詳細資訊,請參閱下列主題:
-
《AWS Lambda 開發人員指南》中的 Lambda 資源存取許可權限
服務主體的函數執行角色
您必須建立 lambda.amazonaws.com 和 edgelambda.amazonaws.com 服務主體可在執行函數時擔任的 IAM 角色。
提示
在 Lambda 主控台中建立函數時,您可以選擇使用 AWS 政策範本建立新的執行角色。此步驟會自動新增執行函數所需的 Lambda@Edge 許可權限。請參閱教學課程:建立簡單 Lambda@Edge 函數中的步驟 5。
如需有關手動建立 IAM 角色的詳細資訊,請參閱《IAM 使用者指南》中的建立角色及附加政策 (主控台)。
範例:角色信任政策
您可在 IAM 主控台的信任關係索引標籤之下新增此角色。請勿在許可權限索引標籤下新增此政策。
如需更多資訊瞭解授予執行角色所需的許可權限,請參閱《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 使用兩個服務連結角色,分別名為 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 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