View a markdown version of this page

Beschränken Sie den Zugriff auf ein AWS Lambda Ursprung der Webfunktion - Amazon CloudFront

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 (HomeRegionund PerRegion Endpunkttypen) — 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. IamAuth Mit 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 Authorization Header 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ür GET und HEAD Anfragen CloudFront entfernt den Authorization Header, 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 Host Header des Betrachters ausschließt. Lambda Web Function-Endpunkte erwarten, dass der Host Header den ursprünglichen Domainnamen und nicht den Domainnamen der CloudFront Distribution enthält. Wenn der Host Header 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 diese AllViewerExceptHostHeader Option, 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.

Console
So erstellen Sie eine Ursprungszugriffssteuerung
  1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die CloudFront Konsole unterhttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Wählen Sie im Navigationsbereich Origin access (Ursprungszugriff) aus.

  3. Wählen Sie Create control setting (Kontrolleinstellung erstellen) aus.

  4. Gehen Sie im Formular Create control setting (Kontrolleinstellung erstellen) wie folgt vor:

    1. Geben Sie im Bereich Details einen Namen (Name) und (optional) eine Beschreibung (Description) für die Ursprungszugriffssteuerung ein.

    2. Wählen Sie Lambda aus der Dropdownliste Origin-Typ aus. Dieser Originstyp wird sowohl für Lambda-Funktions-URLs als auch für Lambda-Webfunktionen verwendet.

    3. Wenn Ihr Ursprung ein globaler Endpunkt ist (der Hostname endet auf.lambda-web.global.on.aws), wählen Sie die Option SigV4A-Signaturprotokoll verwenden. Lassen Sie diese Option für einen regionalen Endpunkt (der Hostname endet auf.lambda-web.AWS-Region.on.aws) deaktiviert.

    4. Wählen Sie unter Signierverhalten die Option Immer signieren, Zuschauerautorisierung beibehalten aus. Diese Option wird unter Anfragen signieren (empfohlen) angezeigt und ist standardmäßig ausgewählt. Die Ursprünge der Lambda-Webfunktionen unterstützen nur dieses Signaturverhalten. Weitere Informationen finden Sie unter Verhalten beim Signieren.

  5. Wählen Sie Erstellen aus.

So fügen Sie einem Lambda Web Function-Ursprung in einer Distribution eine Origin-Zugriffskontrolle hinzu
  1. Öffnen Sie die CloudFront Konsole unter. https://console.aws.amazon.com/cloudfront/v4/home

  2. Wählen Sie eine Distribution mit einem Lambda-Webfunktions-Ursprung aus, zu dem Sie das OAC hinzufügen möchten, und wählen Sie dann die Registerkarte Origins.

  3. Wählen Sie den Ursprung der Lambda-Webfunktion aus, zu dem Sie das OAC hinzufügen möchten, und wählen Sie dann Bearbeiten.

  4. Wählen Sie unter Ursprungszugriff die Option Einstellungen der Ursprungszugriffssteuerung (empfohlen) aus.

  5. Wählen Sie im Dropdown-Menü Origin access control (Ursprungszugriffssteuerung) die OAC aus, die Sie verwenden möchten.

  6. Wählen Sie Änderungen speichern aus.

Die Verteilung beginnt mit der Bereitstellung an allen CloudFront Edge-Standorten. Wenn ein Edge-Standort die neue Konfiguration empfängt, signiert er alle Anfragen, die er an den Ursprung der Lambda-Webfunktion sendet.

CLI

Verwenden Sie den Befehl create-origin-access-control. Verwenden Sie für einen regionalen Endpunkt (der Hostname endet auf.lambda-web.AWS-Region.on.aws) das sigv4 Signaturprotokoll:

aws cloudfront create-origin-access-control \ --origin-access-control-config '{ "Name": "my-lambda-web-oac", "Description": "OAC for Lambda Web Function origin", "SigningProtocol": "sigv4", "SigningBehavior": "always-amz-auth", "OriginAccessControlOriginType": "lambda" }'

Verwenden Sie für einen globalen Endpunkt (der Hostname endet auf.lambda-web.global.on.aws) das sigv4a Signaturprotokoll:

aws cloudfront create-origin-access-control \ --origin-access-control-config '{ "Name": "my-lambda-web-global-oac", "Description": "OAC for global Lambda Web Function origin", "SigningProtocol": "sigv4a", "SigningBehavior": "always-amz-auth", "OriginAccessControlOriginType": "lambda" }'
CloudFormation

Geben Sie die folgenden Werte in der OriginAccessControlConfig ein:

  • SigningProtocol: sigv4 (regionaler Endpunkt) oder sigv4a (globaler Endpunkt)

  • SigningBehavior: always-amz-auth

  • OriginAccessControlOriginType: lambda

Beispiel CloudFormation Vorlage
Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: my-lambda-web-oac OriginAccessControlOriginType: lambda SigningBehavior: always-amz-auth SigningProtocol: sigv4a

Weitere Informationen finden Sie unter AWS::CloudFront:: OriginAccessControl im AWS CloudFormation Benutzerhandbuch.

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.