Einrichten von IAM-Berechtigungen und -Rollen für Lambda@Edge - Amazon CloudFront

Einrichten von IAM-Berechtigungen und -Rollen für Lambda@Edge

Um Lambda@Edge zu konfigurieren, benötigen Sie die folgenden IAM-Berechtigungen und -Rollen für AWS Lambda:

  • IAM-Berechtigungen – Mit diesen Berechtigungen können Sie Ihre Lambda-Funktion erstellen und sie mit Ihrer CloudFront-Distribution verknüpfen.

  • Eine Ausführungsrolle für die Lambda-Funktion (IAM-Rolle) – Die Lambda-Service-Prinzipale übernehmen diese Rolle, um die Funktion auszuführen.

  • Serviceverknüpfte Rollen für Lambda@Edge – Die serviceverknüpften Rollen ermöglichen es bestimmten AWS-Services, Lambda-Funktionen in AWS-Regionen zu replizieren und CloudWatch die Verwendung von CloudFront-Protokolldateien zu ermöglichen.

Erforderliche IAM-Berechtigungen, um Lambda@Edge-Funktionen mit CloudFront-Verteilungen zu verknüpfen

Neben den IAM-Berechtigungen, die Sie für Lambda benötigen, müssen Sie über die folgenden Berechtigungen verfügen, um Lambda-Funktionen CloudFront-Distributionen zuzuordnen:

  • lambda:GetFunction – Gewährt die Berechtigung, Konfigurationsinformationen für die Lambda-Funktion und eine vorsignierte URL zum Herunterladen einer .zip-Datei abzurufen, die die Funktion enthält.

  • lambda:EnableReplication* – Gewährt die Berechtigung für die Ressourcenrichtlinie, sodass der Lambda-Replikationsservice den Code und die Konfiguration der Funktion abrufen kann.

  • lambda:DisableReplication* – Gewährt die Berechtigung für die Ressourcenrichtlinie, sodass der Lambda-Replikationsservice die Funktion löschen kann.

    Wichtig

    Sie müssen das Sternchen (*) am Ende der Aktionen lambda:EnableReplication* und lambda:DisableReplication* hinzufügen.

  • Geben Sie für die Ressource den ARN der Funktionsversion an, die Sie ausführen möchten, wenn ein CloudFront-Ereignis auftritt, wie im folgenden Beispiel dargestellt:

    arn:aws:lambda:us-east-1:123456789012:function:TestFunction:2

  • iam:CreateServiceLinkedRole – Gewährt die Berechtigung zum Erstellen einer serviceverknüpften Rolle, die Lambda@Edge verwendet, um Lambda-Funktionen in CloudFront zu replizieren. Nachdem Sie Lambda@Edge zum ersten Mal konfiguriert haben, wird die serviceverknüpfte Rolle automatisch für Sie erstellt. Sie müssen diese Berechtigung nicht zu anderen Distributionen hinzufügen, die Lambda@Edge verwenden.

  • cloudfront:UpdateDistribution oder cloudfront:CreateDistribution – Gewährt die Berechtigung, eine Distribution zu aktualisieren oder zu erstellen.

Weitere Informationen finden Sie unter den folgenden Themen:

Funktionsausführungsrolle für Service-Prinzipale

Sie müssen eine IAM-Rolle erstellen, die die Service-Prinzipale lambda.amazonaws.com und edgelambda.amazonaws.com übernehmen können, wenn sie Ihre Funktion ausführen.

Tipp

Wenn Sie Ihre Funktion in der Lambda-Konsole erstellen, haben Sie die Möglichkeit, anhand einer AWS-Richtlinienvorlage eine neue Ausführungsrolle zu erstellen. Dieser Schritt fügt automatisch die erforderlichen Lambda@Edge-Berechtigungen hinzu, um Ihre Funktion auszuführen. Siehe Schritt 5 im Tutorial: Erstellen einer einfachen Lambda@Edge-Funktion.

Weitere Informationen zum manuellen Erstellen einer IAM-Rolle finden Sie unter Erstellen von Rollen und Anfügen von Richtlinien (Konsole) im IAM-Benutzerhandbuch.

Beispiel: Rollenvertrauensrichtlinie

Diese Rolle können Sie unter der Registerkarte Vertrauensstellung in der IAM-Konsole hinzufügen. Fügen Sie diese Richtlinie nicht unter der Registerkarte Berechtigungen hinzu.

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

Weitere Informationen zu den Berechtigungen, die Sie der Ausführungsrolle erteilen müssen, finden Sie unter Zugriffsberechtigungen für Lambda-Ressourcen im Entwicklerhandbuch für AWS Lambda.

Hinweise
  • Standardmäßig werden Daten in CloudWatch Logs geschrieben, wenn ein CloudFront-Ereignis eine Lambda-Funktion auslöst. Wenn Sie diese Protokolle verwenden möchten, benötigt die Ausführungsrolle die Berechtigung zum Schreiben von Daten in CloudWatch Logs. Sie können die vordefinierte AWSLambdaBasicExecutionRole verwenden, um der Ausführungsrolle die Berechtigung zu erteilen.

    Weitere Informationen zu CloudWatch Logs finden Sie unter Protokolle für Edge-Funktionen.

  • Wenn Ihr Lambda-Funktionscode auf andere AWS-Ressourcen zugreift und etwa ein Objekt aus einem S3-Bucket liest, benötigt die Ausführungsrolle die Berechtigung zum Durchführen dieser Aktion.

Serviceverknüpfte Rollen für Lambda@Edge

Lambda@Edge verwendet serviceverknüpfte IAM-Rollen. Eine serviceverknüpfte Rolle ist ein spezieller Typ von IAM-Rolle, der direkt mit einem Service verknüpft ist. Serviceverknüpfte Rollen werden vom Service vordefiniert und beinhalten alle Berechtigungen, die dieser zum Aufrufen anderer AWS-Services in Ihrem Namen benötigt.

Lambda@Edge verwendet die folgenden serviceverknüpften IAM-Rollen:

  • AWSServiceRoleForLambdaReplicator – Lambda@Edge verwendet diese Rolle, um es Lambda@Edge zu ermöglichen, Funktionen in zu replizieren AWS-Regionen.

    Wenn Sie zum ersten Mal einen Lambda@Edge-Auslöser in CloudFront hinzufügen, wird automatisch ein Rolle namens AWSServiceRoleForLambdaReplicator erstellt, um Lambda@Edge das Replizieren von Funktionen in AWS-Regionen zu ermöglichen. Diese Rolle ist für die Verwendung von Lambda@Edge-Funktionen erforderlich. Die ARN für die Rolle AWSServiceRoleForLambdaReplicator sieht wie im folgenden Beispiel aus:

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

  • AWSServiceRoleForCloudFrontLogger – CloudFront verwendet diese Rolle, um Protokolldateien nach CloudWatch zu verschieben. Sie können Protokolldateien verwenden, um Lambda@Edge-Validierungsfehler zu beheben.

    Die Rolle AWSServiceRoleForCloudFrontLogger wird automatisch erstellt, wenn Sie die Lambda@Edge-Funktionszuordnung hinzufügen, um CloudFront das Verschieben von Lambda@Edge-Fehlerprotokolldateien nach CloudWatch zu ermöglichen. Der ARN für die AWSServiceRoleForCloudFrontLogger-Rolle sieht so aus:

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

Eine serviceverknüpfte Rolle vereinfacht das Einrichten und Verwenden von Lambda@Edge, da Sie die erforderlichen Berechtigungen nicht manuell hinzufügen müssen. Lambda@Edge definiert die Berechtigungen seiner servicegebundenen Rollen. Nur Lambda@Edge kann die Rollen übernehmen. Die definierten Berechtigungen umfassen die Vertrauens- und Berechtigungsrichtlinie. Sie können die Berechtigungsrichtlinie keiner anderen IAM-Entität zuordnen.

Sie müssen alle verknüpften CloudFront- oder Lambda@Edge-Ressourcen entfernen, bevor Sie eine serviceverknüpfte Rolle löschen können. Dies trägt zum Schutz Ihrer Lambda@Edge-Ressourcen bei, sodass Sie keine serviceverknüpfte Rolle entfernen, die noch für den Zugriff auf aktive Ressourcen erforderlich ist.

Weitere Informationen zu serviceverknüpften Rollen finden Sie unter Serviceverknüpfte Rollen für CloudFront.

Serviceverknüpfte Rollenberechtigungen für Lambda@Edge

Lambda@Edge verwendet zwei servicegebundene Rollen. Diese heißen AWSServiceRoleForLambdaReplicator und AWSServiceRoleForCloudFrontLogger. In den folgenden Abschnitten werden die Berechtigungen für jede dieser Rollen beschrieben.

Serviceverknüpfte Rollenberechtigungen für Lambda Replicator

Diese serviceverknüpfte Rolle ermöglicht Lambda das Replizieren von Lambda@Edge-Funktionen zu AWS-Regionen.

Die serviceverknüpfte Rolle AWSServiceRoleForLambdaReplicator vertraut dem Service replicator.lambda.amazonaws.com, sodass dieser die Rolle annehmen kann.

Die Rollenberechtigungsrichtlinie erlaubt Lambda@Edge die Durchführung der folgenden Aktionen für die angegebenen Ressourcen:

  • lambda:CreateFunction auf arn:aws:lambda:*:*:function:*

  • lambda:DeleteFunction auf arn:aws:lambda:*:*:function:*

  • lambda:DisableReplication auf arn:aws:lambda:*:*:function:*

  • iam:PassRole auf all AWS resources

  • cloudfront:ListDistributionsByLambdaFunction auf all AWS resources

Service-verknüpfte Rollenberechtigungen für CloudFront Logger

Diese serviceverknüpfte Rolle ermöglicht CloudFront, Protokolldateien nach CloudWatch zu verschieben, sodass Sie Lambda@Edge-Validierungsfehler beheben können.

Die serviceverknüpfte Rolle AWSServiceRoleForCloudFrontLogger vertraut dem Service logger.cloudfront.amazonaws.com, sodass dieser die Rolle annehmen kann.

Die Rollenberechtigungsrichtlinie erlaubt Lambda@Edge die Durchführung der folgenden Aktionen für die angegebene arn:aws:logs:*:*:log-group:/aws/cloudfront/*-Ressource:

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

Sie müssen Berechtigungen konfigurieren, damit eine IAM-Entität (z. B. ein Benutzer, eine Gruppe oder eine Rolle) die mit dem Lambda@Edge-Service verknüpften Rollen löschen kann. Weitere Informationen finden Sie unter serviceverknüpfte Rollenberechtigung im IAM-Benutzerhandbuch.

Serviceverknüpfte Rollen für Lambda@Edge erstellen

Servicegebundene Rollen für Lambda@Edge werden in der Regel nicht manuell erstellt. In den folgenden Szenarien legt der Service die Rollen für Sie automatisch an:

  • Wenn Sie zum ersten Mal einen Auslöser erstellen, erstellt der Service die Rolle AWSServiceRoleForLambdaReplicator (sofern sie nicht bereits vorhanden ist). Diese Rolle ermöglicht Lambda das Replizieren von Lambda@Edge-Funktionen in AWS-Regionen.

    Wenn Sie die serviceverknüpfte Rolle löschen, wird die Rolle erneut erstellt, wenn Sie einen neuen Auslöser für Lambda@Edge in einer Verteilung hinzufügen.

  • Wenn Sie eine CloudFront-Distribution aktualisieren oder erstellen, die über eine Lambda@Edge-Zuordnung verfügt, erstellt der Service die Rolle AWSServiceRoleForCloudFrontLogger (sofern sie nicht bereits vorhanden ist). Diese Rolle ermöglicht es CloudFront, Protokolldateien an CloudWatch zu übertragen.

    Wenn Sie die serviceverknüpfte Rolle löschen, wird die Rolle erneut erstellt, wenn Sie eine CloudFront-Verteilung aktualisieren oder erstellen, die eine Lambda@Edge-Zuordnung hat.

Um diese serviceverknüpften Rollen manuell zu erstellen, führen Sie die folgenden AWS Command Line Interface (AWS CLI)-Befehle aus:

So erstellen Sie die AWSServiceRoleForLambdaReplicator-Rolle
  • Führen Sie den folgenden Befehl aus.

    aws iam create-service-linked-role --aws-service-name replicator.lambda.amazonaws.com
So erstellen Sie die AWSServiceRoleForCloudFrontLogger-Rolle
  • Führen Sie den folgenden Befehl aus.

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

Bearbeiten von serviceverknüpften Lambda@Edge-Rollen

Lambda@Edge verhindert die Bearbeitung der serviceverknüpften Rollen AWSServiceRoleForLambdaReplicator und AWSServiceRoleForCloudFrontLogger. Da möglicherweise verschiedene Entitäten auf die Rolle verweisen, kann der Rollenname nach der Erstellung einer serviceverknüpften Rolle durch den Service nicht bearbeitet werden. Sie können mithilfe von IAM jedoch die Beschreibung der Rolle bearbeiten. Weitere Informationen finden Sie unter Bearbeiten einer serviceverknüpften Rolle im IAM-Benutzerhandbuch.

Unterstützte AWS-Regionen für serviceverknüpfte Lambda@Edge-Rollen

CloudFront unterstützt die Verwendung von serviceverknüpften Rollen für Lambda@Edge in den folgenden AWS-Regionen:

  • USA Ost (Nord-Virginia) – us-east-1

  • USA Ost (Ohio) – us-east-2

  • USA West (Nordkalifornien) – us-west-1

  • USA West (Oregon) – us-west-2

  • Asia Pacific (Mumbai) – ap-south-1

  • Asia Pacific (Seoul) – ap-northeast-2

  • Asia Pacific (Singapore) – ap-southeast-1

  • Asia Pacific (Sydney) – ap-southeast-2

  • Asia Pacific (Tokyo) – ap-northeast-1

  • Europe (Frankfurt) – eu-central-1

  • Europa (Ireland) – eu-west-1

  • Europe (London) – eu-west-2

  • South America (São Paulo) – sa-east-1