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

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

Um Lambda@Edge zu konfigurieren, müssen Sie bestimmte IAM-Berechtigungen und eine IAM-Ausführungsrolle einrichten. Lambda@Edge erstellt außerdem serviceverknüpfte Rollen, um Lambda-Funktionen zu CloudFront-Regionen zu replizieren und CloudWatch die Verwendung von CloudFront-Protokolldateien zu ermöglichen.

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

Neben den IAM-Berechtigungen, die Sie für AWS Lambda benötigen, muss der IAM-Benutzer über die folgenden IAM-Berechtigungen verfügen, um Lambda-Funktionen CloudFront-Verteilungen zuzuordnen:

  • lambda:GetFunction

    Ermöglicht dem Benutzer, Konfigurationsinformationen für die Lambda-Funktion und eine vorsignierte URL zum Herunterladen einer ZIP-Datei abzurufen, die die Funktion enthält.

    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

  • lambda:EnableReplication*

    Fügt der Ressourcenrichtlinie, mit der dem Lambda-Replikationsservice das Recht zum Abrufen von Funktionscode und -konfiguration gewährt wird, eine Berechtigung hinzu.

    Wichtig

    Das Sternchen (*) am Ende der Berechtigung ist erforderlich: lambda:EnableReplication*

    Geben Sie für die Ressource den ARN der Funktionsversion (ohne Versionsnummer) 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

  • iam:CreateServiceLinkedRole

    Ermöglicht dem Benutzer das Erstellen einer mit einem Service verknüpften Rolle, die von Lambda@Edge zum Replizieren von Lambda-Funktionen in CloudFront verwendet wird. Nachdem diese Rolle von der ersten Verteilung, die Sie mit Lambda@Edge verwenden, erstellt wurde, brauchen Sie anderen Verteilungen, die Sie mit Lambda@Edge nutzen, keine Berechtigung hinzuzufügen.

  • cloudfront:UpdateDistribution oder cloudfront:CreateDistribution

    Wählen Sie cloudfront:UpdateDistribution, um eine Verteilung zu aktualisieren, oder cloudfront:CreateDistribution, um eine Verteilung zu erstellen.

Weitere Informationen finden Sie in der folgenden Dokumentation:

Funktionsausführungsrolle für Service-Prinzipale

Sie müssen eine IAM-Rolle erstellen, die von den Service-Prinzipalen lambda.amazonaws.com und edgelambda.amazonaws.com übernommen werden kann. Diese Rolle wird von den Service-Prinzipalen übernommen, wenn sie Ihre Funktion ausführen. Weitere Informationen finden Sie unter Erstellen von Rollen und Anhängen von Richtlinien (Konsole) im IAM-Benutzerhandbuch.

Sie fügen diese Rolle auf der Registerkarte Trust Relationship (Vertrauensstellung) in IAM hinzu (fügen Sie sie nicht auf der Registerkarte Permissions (Berechtigungen)) hinzu.

Hier finden Sie eine Beispiel-Vertrauensrichtlinie für eine Rolle:

{ "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 Verwalten von Berechtigungen: Verwenden einer IAM-Rolle (Ausführungsrolle) im AWS Lambda-Entwicklerhandbuch. Beachten Sie Folgendes:

  • 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 CloudWatch-Metriken und CloudWatch Logs für Lambda-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 Operation.

Serviceverknüpfte Rollen für Lambda@Edge

Lambda@Edge verwendet AWS Identity and Access Management (IAM) serviceverknüpfte 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 folgende IAM-serviceverknüpfte Rolle:

  • AWSServiceRoleForLambdaReplicator – Lambda@Edge verwendet diese Rolle, um Lambda@Edge die Replikation von Funktionen zu AWS-Regionen zu ermöglichen.

  • AWSServiceRoleForCloudFrontLogger -CloudFront verwendet diese Rolle, um Protokolldateien in Ihr CloudWatch-Konto zu übertragen, um Ihnen beim Debuggen von Lambda@Edge-Validierungsfehlern zu helfen.

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 Lambda@Edge-Funktionen zu AWS-Regionen zu ermöglichen. Diese Rolle ist für die Verwendung von Lambda@Edge-Funktionen erforderlich. Der ARN für die Rolle „AWSServiceRoleForLambdaReplicator“ sieht wie folgt aus:

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

Die zweite Rolle mit dem Namen AWSServiceRoleForCloudFrontLogger wird automatisch erstellt, wenn Sie Lambda@Edge-Funktionszuordnung hinzufügen, um CloudFront das Verschieben von Lambda@Edge-Fehlerprotokolldateien nach CloudWatch zu ermöglichen. Der ARN für die Rolle „AWSServiceRoleForCloudFrontLogger“ sieht folgendermaßen 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. Die Berechtigungsrichtlinie kann an keine andere IAM-Entität angefügt werden.

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. Es wird sichergestellt wird, dass Sie keine servicegebundene Rolle entfernen, die noch für den Zugriff auf aktive Ressourcen erforderlich ist.

Informationen zu anderen Services, die serviceverknüpfte Rollen unterstützen, finden Sie unter AWS-Services, die mit IAM funktionieren. Suchen Sie nach den Services, für die Ja in der Spalte Serviceverknüpfte Rolle angegeben ist.

Serviceverknüpfte Rollenberechtigungen für Lambda@Edge

Lambda@Edge verwendet zwei serviceverknüpfte Rollen mit den Namen 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 Rolle „AWSServiceRoleForLambdaReplicator“ vertraut dem folgenden Service, um die Rolle zu übernehmen:

  • replicator.lambda.amazonaws.com

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

  • Aktion: lambda:CreateFunction für arn:aws:lambda:*:*:function:*

  • Aktion: lambda:DeleteFunction für arn:aws:lambda:*:*:function:*

  • Aktion: lambda:DisableReplication für arn:aws:lambda:*:*:function:*

  • Aktion: iam:PassRole für all AWS resources

  • Aktion: cloudfront:ListDistributionsByLambdaFunction für all AWS resources

Service-verknüpfte Rollenberechtigungen für CloudFront Logger

Diese serviceverknüpfte Rolle ermöglicht CloudFront, Protokolldateien in Ihr CloudWatch-Konto zu verschieben, um Fehler bei der Lambda@Edge-Validierung zu beheben.

Die serviceverknüpfte Rolle „AWSServiceRoleForCloudFrontLogger“ vertraut dem folgenden Service, um die Rolle zu übernehmen:

  • logger.cloudfront.amazonaws.com

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

  • Aktion: logs:CreateLogGroup für arn:aws:logs:*:*:log-group:/aws/cloudfront/*

  • Aktion: logs:CreateLogStream für arn:aws:logs:*:*:log-group:/aws/cloudfront/*

  • Aktion: logs:PutLogEvents für arn:aws:logs:*:*:log-group:/aws/cloudfront/*

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 Berechtigungen für serviceverknüpfte Rollen 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 eine Rolle (AWSServiceRoleForLambdaReplicator), sofern die Rolle nicht bereits vorhanden ist, die es Lambda ermöglicht, Lambda@Edge-Funktionen zu AWS-Regionen zu replizieren.

    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-Verteilung aktualisieren oder erstellen, die über eine Lambda@Edge-Zuordnung verfügt, erstellt der Service eine Rolle, AWSServiceRoleForCloudFrontLogger, wenn die Rolle noch nicht vorhanden ist, die es CloudFront ermöglicht, Ihre Protokolldateien zu 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.

Wenn Sie diese serviceverknüpften Rollen manuell erstellen müssen, führen Sie die folgenden Befehle mit der AWS-Befehlszeilenschnittstelle aus:

So erstellen Sie die Rolle „AWSServiceRoleForLambdaReplicator“:

aws iam create-service-linked-role --aws-service-name replicator.lambda.amazonaws.com

So erstellen Sie die Rolle „AWSServiceRoleForCloudFrontLogger“

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

Bearbeiten von servicegebundenen Lambda@Edge-Rollen

Mit Lambda @Edge können Sie die mit dem Dienst verknüpften Rollen „AWSServiceRoleForLambdaReplicator“ oder „AWSServiceRoleForCloudFrontLogger“ nicht bearbeiten. 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 jedoch die Beschreibung einer Rolle mit IAM bearbeiten. Weitere Informationen finden Sie unter Bearbeiten einer serviceverknüpften Rolle im IAM-Benutzerhandbuch.

Löschen von servicegebundenen Lambda@Edge-Rollen

Wenn Sie Lambda@Edge nicht mehr benötigen, empfehlen wir, die serviceverknüpfte Rollen zu löschen. Auf diese Weise haben Sie keine ungenutzten Entitäten, die nicht aktiv überwacht oder verwaltet werden. Sie müssen jedoch die Lambda@Edge-Ressourcen in Ihrem Konto bereinigen, bevor Sie die Rollen manuell löschen können.

Aktualisieren Sie dazu Ihre Verteilungen, um alle Lambda@Edge-Funktionsauslöser zu entfernen, oder entfernen Sie die Verteilungen, die Lambda@Edge-Funktionen verwenden. Weitere Informationen finden Sie unter Löschen von Lambda@Edge-Funktionen und Replikaten.

Nach dem Entfernen aller Lambda@Edge-Funktionszuordnungen aus Ihren Verteilungen und dem Entfernen der Funktionsreplikate von AWS-Standorten durch CloudFront können Sie die serviceverknüpften Rollen löschen.

Anmerkung

Wenn CloudFront die Aktualisierung nicht abgeschlossen hat, schlägt das Löschen der serviceverknüpften Rolle möglicherweise fehl. Wenn das passiert, warten Sie einige Minuten, und wiederholen Sie die Schritte dann.

Sie müssen separate Verfahren nutzen, um jede servicegebundene Rolle manuell zu löschen:

  • Sie löschen die Rolle „AWSServiceRoleForLambdaReplicator“ mithilfe der CloudFront-Konsole.

  • Sie löschen Sie die Rolle „AWSServiceRoleForCloudFrontLogger“ mithilfe der IAM-Konsole.

So löschen Sie die serviceverknüpfte Rolle „AWSServiceRoleForLambdaReplicator“ manuell:

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die CloudFront-Konsole unter https://console.aws.amazon.com/cloudfront/v3/home.

  2. Klicken Sie auf der Seite CloudFront Distributions (CloudFront-Verteilungen) auf den Avatar oben rechts.

    
  		      Screenshot mit Avatar in CloudFront.
  3. Wählen Sie Delete (Löschen).

    
  	        Screenshot mit Dialogfeld zum Löschen der serviceverknüpften Lambda-Rolle in CloudFront.

So löschen Sie manuell die serviceverknüpften AWSServiceRoleForCloudFrontLogger-Rollen

  1. Melden Sie sich bei der AWS Management Console an, und öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

  2. Wählen Sie im Navigationsbereich der IAM Console Roles aus. Aktivieren Sie dann das Kontrollkästchen neben dem Rollennamen, den Sie löschen möchten, nicht den Namen oder die Zeile selbst.

  3. Wählen Sie für Role actions oben auf der Seite Delete role aus.

  4. Überprüfen Sie im Bestätigungsdialogfeld die letzten Service-Zugriffsdaten, die zeigen, wann jede der ausgewählten Rollen zuletzt auf den AWS-Service zugegriffen hat. Auf diese Weise können Sie leichter bestätigen, ob die Rolle derzeit aktiv ist. Wenn Sie fortfahren möchten, wählen Sie Yes, Delete aus, um die serviceverknüpfte Rolle zur Löschung zu übermitteln.

  5. Sehen Sie sich die Benachrichtigungen in der IAM-Konsole an, um den Fortschritt der Löschung der serviceverknüpften Rolle zu überwachen. Da die Löschung der serviceverknüpften IAM-Rolle asynchron erfolgt, kann die Löschung nach dem Übermitteln der Rolle für die Löschung erfolgreich sein oder fehlschlagen. Weitere Informationen finden Sie unter Löschen einer serviceverknüpften Rolle im IAM-Benutzerhandbuch.

Unterstützte Regionen für mit dem CloudFront-Service verknüpfte Rollen

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

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

  • US East (Ohio) – us-east-2

  • US West (N. California) – us-west-1

  • US 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

  • Europe (Ireland) – eu-west-1

  • Europe (London) – eu-west-2

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