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@Edge-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 -Protokolle für Lambda@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 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 es Lambda@Edge zu ermöglichen, Funktionen in AWS-Regionen zu replizieren.

  • 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 AWSServiceRoleForLambdaReplicatorerstellt, um Lambda@Edge das Replizieren von Funktionen zu AWS-Regionen zu ermöglichen. Diese Rolle ist für die Verwendung von Lambda@Edge-Funktionen erforderlich. Der ARN für die AWSServiceRoleForLambdaReplicator-Rolle sieht so 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 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. 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 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 darauf, dass der folgende Service die Rolle annimmt: 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 darauf, dass der folgende Service die Rolle annimmt: 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 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 eine Rolle (AWSServiceRoleForLambdaReplicator), sofern die Rolle nicht bereits vorhanden ist, die es Lambda ermöglicht, Lambda@Edge-Funktionen in 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 AWS CLI aus:

So erstellen Sie die AWSServiceRoleForLambdaReplicator-Rolle

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

So erstellen Sie die AWSServiceRoleForCloudFrontLogger-Rolle

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 jedoch die Beschreibung einer Rolle mit IAM bearbeiten. Weitere Informationen finden Sie unter Bearbeiten einer serviceverknüpften Rolle im IAM-Benutzerhandbuch.

Unterstützte AWS-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 AWS-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