Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Beschränken Sie den Zugriff auf ein AWS Lambda Ursprung der Webfunktion
Sie können Origin Access Control (OAC) verwenden, um den Zugriff auf einen AWS Lambda Web Function-Ursprung einzuschränken. Eine Lambda-Webfunktion bietet ihren eigenen regionalen oder globalen HTTPS-Endpunkt, den Sie als Ursprungsdomain für Ihre CloudFront Distribution verwenden. Weitere Informationen zu Lambda Web Functions finden Sie unter AWS Lambda Web Functions im AWS Lambda Developer Guide.
Anmerkung
OAC mit Lambda-Webfunktionen wird für globale Endpunkte, die Opt-in-Regionen enthalten, nicht unterstützt. Wenn der Endpunkt eine Anfrage an eine Opt-in-Region weiterleitet, CloudFront kann die Anfrage für diese Region nicht signiert werden. Der Ursprung gibt dann einen HTTP 403-Fehler (Forbidden) zurück. Bei allen Regionen, die dem globalen Endpunkt zugeordnet sind, muss es sich um Regionen handeln, die standardmäßig aktiviert sind.
Hinweise zur Verwendung von OAC mit einem URL-Ursprung für eine Lambda-Funktion finden Sie unter. Beschränken Sie den Zugriff auf ein AWS Lambda Herkunft der Funktions-URL
Voraussetzungen
Bevor Sie OAC erstellen und einrichten, benötigen Sie eine CloudFront Distribution mit einer Lambda-Webfunktion als Ursprung. Der Ursprungsdomänenname ist der Hostname des Endpunkts der Lambda-Webfunktion. CloudFront identifiziert den Endpunkttyp anhand des Hostnamens:
-
Regionaler Endpunkt (
HomeRegionundPerRegionEndpunkttypen) — Der Hostname endet auf.lambda-web.AWS-Region.on.aws -
Globaler Endpunkt (
MultiRegionEndpunkttyp) — Der Hostname endet auf.lambda-web.global.on.aws
Ihre Konfiguration muss außerdem die folgenden Anforderungen erfüllen:
-
Authentifizierungstyp des Endpunkts — Der Authentifizierungstyp des Endpunkts muss sein.
IamAuthMit verwendet der Endpunkt AWS Identity and Access Management (IAM)IamAuth, um Anfragen zu authentifizieren und zu autorisieren. Bei Anfragen von CloudFront basiert die Autorisierung auf der ressourcenbasierten Richtlinie der Lambda-Webfunktion. CloudFront signiert Anfragen im Namen des Betrachters, und der Endpunkt validiert die Signatur. Weitere Informationen finden Sie im AWS Lambda Developer Guide unter CloudFront Integration. -
Cache-Richtlinie — Wenn Ihre Lambda-Webfunktion den
AuthorizationHeader des Viewers verwendet, müssen Sie den Header zur Cache-Richtlinie hinzufügen. Diese Anforderung gilt für jedes Cache-Verhalten, das den Ursprung verwendet. FürGETundHEADAnfragen CloudFront entfernt denAuthorizationHeader, bevor die Anfrage weitergeleitet wird, es sei denn, der Header ist in der Cache-Richtlinie enthalten. Weitere Informationen finden Sie unter Header und CloudFront Verhalten von HTTP-Anfragen (benutzerdefiniert und Amazon S3-Ursprünge). -
Richtlinie für ursprüngliche Anfragen — Verwenden Sie eine Richtlinie für ursprüngliche Anfragen, die den
HostHeader des Betrachters ausschließt. Lambda Web Function-Endpunkte erwarten, dass derHostHeader den ursprünglichen Domainnamen und nicht den Domainnamen der CloudFront Distribution enthält. Wenn derHostHeader den Domainnamen der Distribution enthält, gibt der Endpunkt einen HTTP 404-Fehler (Not Found) zurück. Wenn Sie eine Richtlinie für verwaltete Ursprungsanfragen verwenden, verwenden Sie dieseAllViewerExceptHostHeaderOption, nichtAllViewer. Weitere Informationen finden Sie unter AllViewerExceptHostHeader.
Anmerkung
Lambda @Edge -Origin-Anfrage- und Origin-Antwort-Trigger werden bei Cache-Verhaltensweisen, die einen Lambda-Webfunktions-Ursprung mit OAC verwenden, nicht unterstützt. Dies gilt für regionale und globale Endpunkte sowie für Ursprünge, auf die direkt oder über eine Ursprungsgruppe zugegriffen wird. CloudFront lehnt eine Verteilungskonfiguration ab, die beide enthält.
Erteilen Sie die CloudFront Erlaubnis für den Zugriff auf die Lambda-Webfunktion
Fügen Sie der Lambda-Webfunktion eine ressourcenbasierte Richtlinie hinzu, die es dem CloudFront Service Principal (cloudfront.amazonaws.com) ermöglicht, den Endpunkt aufzurufen. Die IAM-Aktion zum Aufrufen eines Endpunkts ist. lambda:InvokeWebFunctionEndpoint Die Richtlinie ist an die Lambda-Webfunktion angehängt, aber jede Anweisung kann sich Resource auf einen bestimmten Endpunkt-ARN ARN. Verwenden Sie ein Condition Element, um den Zugriff auf den Endpunkt nur dann CloudFront zu ermöglichen, wenn die Anfrage im Namen der CloudFront Distribution erfolgt, die den Ursprung enthält.
Beispiel Resource-based Richtlinie für CloudFront OAC
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontOACAccess", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } } ] }
Um die ressourcenbasierte Richtlinie anzuhängen, verwenden Sie den put-resource-policy Befehl mit der Funktion ARN (kein Endpunkt-ARN):
aws lambda-web put-resource-policy \ --resource-arn "arn:aws:lambda:us-east-1:111122223333:web-function/my-function" \ --policy file://policy.json \ --region us-east-1
Sie können die Richtlinie mit den Befehlen get-resource-policy und delete-resource-policy überprüfen oder entfernen.
Anmerkung
Für Endgeräte, die sich über mehr als eine Region erstrecken, repliziert Lambda Richtlinienänderungen auf alle Regionen, die den Endpunkt bedienen. Es kann eine kurze Zeit dauern, bis eine neue oder aktualisierte Richtlinie in jeder Region wirksam wird. Weitere Informationen finden Sie unter Replikation und eventuelle Konsistenz im AWS Lambda Entwicklerhandbuch.
Erstellen der Ursprungszugriffssteuerung
Um eine Origin Access Control (OAC) zu erstellen, können Sie die AWS-Managementkonsole, CloudFormation AWS CLI, oder die CloudFront API verwenden.
OAC wird für jede Anfrage erst wirksam, wenn die Bereitstellung der Distribution abgeschlossen ist. Bei einem Endpunkt, der sich über mehr als eine Region erstreckt, muss die zuvor angefügte ressourcenbasierte Richtlinie auch die Replikation in alle Regionen abschließen, die den Endpunkt bedienen. Bis beide abgeschlossen sind, können einige Anfragen eine vorübergehende HTTP-403-Antwort vom Ursprung erhalten. Diese Fehler werden automatisch behoben, nachdem die Bereitstellung der Distribution und die Replikation der Richtlinie abgeschlossen ist.
Verhalten beim Signieren
Die Ursprünge der Lambda-Webfunktionen unterstützen nur das always-amz-auth Signierungsverhalten (Immer signieren, Zuschauerautorisierung in der Konsole beibehalten). CloudFront signiert immer alle Anfragen, die es an die Lambda-Webfunktion sendet, ersetzt aber nicht den Authorization Header der Viewer-Anfrage. CloudFront Fügt stattdessen die Signatur in einem speziellen CloudFront Header hinzu und übergibt den Authorization Header des Viewers unverändert an den Ursprung. Mit diesem Verhalten kann Ihre Lambda-Webfunktion den ursprünglichen Authorization Header des Viewers empfangen (z. B. um eine eigene Authentifizierung oder Autorisierung durchzuführen). CloudFront signiert immer noch jede Anfrage, die sie an den Ursprung sendet. Um den Authorization Header des Viewers weiterzuleiten, müssen Sie ihn einer Cache-Richtlinie für jedes Cache-Verhalten hinzufügen, das den Ursprung verwendet.
Die anderen Signierverhalten (alwaysnever, undno-override) werden für Lambda-Webfunktions-Ursprünge nicht unterstützt. Das always-amz-auth Signaturverhalten wird für keinen anderen Quelltyp unterstützt, auch nicht für URL-Ursprünge von Lambda-Funktionen.
Signiert für PUTPOST, und PATCH -Anfragen die CloudFront ursprüngliche Anfrage mit einer unsignierten Payload (). UNSIGNED-PAYLOAD Der Hauptteil der Anfrage ist nicht durch die CloudFront Signatur abgedeckt. Die Signatur deckt weiterhin die Anforderungsmethode, den Pfad, die Abfragezeichenfolge und die Header ab, die Ihre Distribution identifizieren. Der Endpunkt kann daher überprüfen, ob jede Anfrage CloudFront im Namen Ihrer Distribution stammt, bevor er Ihre Lambda-Webfunktion aufruft. Der Anfragetext ist während der Übertragung durch die HTTPS-Verbindung zwischen CloudFront und dem Endpunkt geschützt. Sie müssen in Anfragen an keinen x-amz-content-sha256 Header angeben CloudFront. Wenn ein Betrachter einen sendet, verwendet er ihn CloudFront nicht beim Signieren der ursprünglichen Anfrage.