

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
<a name="private-content-restricting-access-to-lambda-web"></a>

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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions.html) 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](private-content-restricting-access-to-lambda.md)

## Voraussetzungen
<a name="oac-prerequisites-lambda-web"></a>

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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions-endpoints.html#web-functions-endpoint-types) anhand des Hostnamens:
+ Regionaler Endpunkt (`HomeRegion`und `PerRegion` Endpunkttypen) — Der Hostname endet auf `.lambda-web.{{AWS-Region}}.on.aws`
+ Globaler Endpunkt (`MultiRegion`Endpunkttyp) — 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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions-endpoint-access-control.html#web-functions-endpoint-access-control-cloudfront).
+ **Cache-Richtlinie** — Wenn Ihre Lambda-Webfunktion den `Authorization` Header des Viewers verwendet, müssen Sie den Header zur [Cache-Richtlinie](controlling-the-cache-key.md) 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)](RequestAndResponseBehaviorCustomOrigin.md#request-custom-headers-behavior).
+ **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, nicht`AllViewer`. Weitere Informationen finden Sie unter [AllViewerExceptHostHeader](using-managed-origin-request-policies.md#managed-origin-request-policy-all-viewer-except-host-header).

**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
<a name="oac-permission-to-access-lambda-web"></a>

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.

**Example 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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions-permissions.html#web-functions-permissions-resource-policy-replication) im *AWS Lambda Entwicklerhandbuch*.

## Erstellen der Ursprungszugriffssteuerung
<a name="create-oac-lambda-web"></a>

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 unter[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

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

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

1. 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.

   1. 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.

   1. 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.

   1. 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](#oac-signing-behavior-lambda-web).

1. 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](https://console.aws.amazon.com/cloudfront/v4/home)

1. 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**.

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

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

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

1. 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`

**Example 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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html) 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
<a name="oac-signing-behavior-lambda-web"></a>

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](controlling-the-cache-key.md) für jedes Cache-Verhalten hinzufügen, das den Ursprung verwendet.

Die anderen Signierverhalten (`always``never`, und`no-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 `PUT``POST`, 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.