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.
Themen
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 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 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
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 erstellt wurde, die Sie mit Lambda@Edge verwenden, müssen Sie anderen Verteilungen, die Sie mit Lambda@Edge nutzen, keine Berechtigung hinzufügen.
-
cloudfront:UpdateDistribution
odercloudfront:CreateDistribution
Wählen Sie
cloudfront:UpdateDistribution
, um eine Verteilung zu aktualisieren, odercloudfront:CreateDistribution
, um eine Verteilung zu erstellen.
Weitere Informationen finden Sie in der folgenden Dokumentation:
-
Identity and Access Management für Amazon CloudFront in dieser Anleitung.
-
Authentifizierung und Zugriffskontrolle für AWS Lambda im AWS Lambda-Entwicklerhandbuch
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 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 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ürarn:aws:lambda:*:*:function:*
-
Aktion:
lambda:DeleteFunction
fürarn:aws:lambda:*:*:function:*
-
Aktion:
lambda:DisableReplication
fürarn:aws:lambda:*:*:function:*
-
Aktion:
iam:PassRole
fürall AWS resources
-
Aktion:
cloudfront:ListDistributionsByLambdaFunction
fürall 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ürarn:aws:logs:*:*:log-group:/aws/cloudfront/*
-
Aktion:
logs:CreateLogStream
fürarn:aws:logs:*:*:log-group:/aws/cloudfront/*
-
Aktion:
logs:PutLogEvents
fürarn: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:
-
US East (N. 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
-
Asien-Pazifik (Seoul) –
ap-northeast-2
-
Asia Pacific (Singapore) –
ap-southeast-1
-
Asien-Pazifik (Sydney) –
ap-southeast-2
-
Asien-Pazifik (Tokio) –
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