

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.

# Endpunktzugriffskontrolle mit Lambda Web Function
<a name="web-functions-endpoint-access-control"></a>

Sie können den Zugriff auf Ihre AWS Lambda Web Function-Endpunkte mithilfe der Einstellungen steuern, die `AuthType` Sie für jeden Endpunkt festgelegt haben. Je nach Authentifizierungstyp können Sie der Web-Funktion auch eine ressourcenbasierte Richtlinie hinzufügen, um zu steuern, wer einen Endpunkt aufrufen kann.

Wenn Sie einen Endpunkt konfigurieren, geben Sie eine der folgenden Optionen an: `AuthType`

`IamAuth`  
Bei diesem Authentifizierungstyp verwendet Lambda AWS Identity and Access Management (IAM), um Anfragen auf der Grundlage der Identitätsrichtlinie des Anrufers und der ressourcenbasierten Richtlinie der Webfunktion zu authentifizieren und zu autorisieren. Entweder signiert der Anrufer Anfragen direkt mit AWS Signature Version 4 (Sigv4) oder mit Signature Version 4a (SigV4a) für `MultiRegion` Endgeräte, oder Amazon CloudFront signiert in seinem Namen, wenn er den Endpunkt öffnet (siehe). AWS-Service [CloudFront Integration](#web-functions-endpoint-access-control-cloudfront) Wählen Sie diese Option, wenn Lambda die IAM-based Zugriffskontrolle auf Ihrem Endpunkt durchsetzen soll.

`ApplicationManaged`  
Lambda authentifiziert oder autorisiert keine Anfragen. Jede Anfrage erreicht Ihre Funktion, und Ihr Funktionscode ist für jede Authentifizierung verantwortlich. Wählen Sie diese Option für öffentliche Endpunkte oder wenn Sie die Authentifizierung in Ihrem eigenen Code durchführen.

Die IAM-Aktion zum Aufrufen eines Endpunkts ist. `lambda:InvokeWebFunctionEndpoint`

Sie legen den Authentifizierungstyp eines Endpunkts mit dem `--auth-type` Parameter fest, wenn Sie den Endpunkt (`create-web-function-endpoint`) erstellen, und Sie können ihn später mit ändern. `update-web-function-endpoint` Informationen zum Befehl create finden Sie unter[Erstellen eines Endpunkts](web-functions-endpoints.md#web-functions-endpoint-create). Informationen zu den Eigenschaften, die Sie ändern können, finden Sie unter[Aktualisierung eines Endpunkts](web-functions-endpoints.md#web-functions-endpoint-update).

## Verwenden Sie den `IamAuth`Authentifizierungstyp
<a name="web-functions-endpoint-access-control-iam"></a>

Wenn Sie den `IamAuth` Authentifizierungstyp wählen, müssen Anrufer jede Anfrage mit SigV4 (SigV4a für `MultiRegion` Endpunkte) signieren und dürfen den Endpunkt aufrufen. Je nachdem, wer die Anfrage stellt, erteilen Sie diese Berechtigung mit einer ressourcenbasierten Richtlinie für die Webfunktion, einer identitätsbasierten Richtlinie für den Anrufer oder mit beidem.

Befindet sich der Anrufer in derselben AWS-Konto Webfunktion, kann er entweder `lambda:InvokeWebFunctionEndpoint` über eine identitätsbasierte Richtlinie oder über die ressourcenbasierte Richtlinie der Funktion erteilt werden. Wenn der Anrufer ein anderes Konto hat, benötigt er sowohl eine identitätsbasierte Richtlinie, die die Aktion gewährt, als auch eine ressourcenbasierte Richtlinie für die Funktion, die dies zulässt.

Resource-based Richtlinien sind an die Webfunktion angehängt, aber jede Anweisung kann sich `Resource` auf einen bestimmten Endpunkt-ARN ARN. Die folgende ressourcenbasierte Richtlinie ermöglicht es der `InvokeRole` Rolle im Konto`222233334444`, den Endpunkt von aufzurufen: `prod` `my-function`

**Example Cross-account ressourcenbasierte Richtlinie**  

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::222233334444:role/InvokeRole"
            },
            "Action": "lambda:InvokeWebFunctionEndpoint",
            "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod"
        }
    ]
}
```

Verwenden `put-resource-policy` Sie zum Anhängen der ressourcenbasierten Richtlinie die 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 `get-resource-policy` und überprüfen oder entfernen. `delete-resource-policy`

Eine Webfunktion hat eine ressourcenbasierte Richtlinie und `put-resource-policy` ersetzt diese. Um eine Anweisung hinzuzufügen, z. B. die CloudFront Anweisung in[CloudFront Integration](#web-functions-endpoint-access-control-cloudfront), rufen Sie die aktuelle Richtlinie mit ab`get-resource-policy`, fügen die Anweisung dem zugehörigen `Statement` Array hinzu und übergeben das zurückgegebene `revisionId` mit. `--revision-id` Wenn jemand die Richtlinie geändert hat, nachdem Sie sie gelesen haben, schlägt die Anfrage fehl und `ConflictException` die Änderung wird nicht überschrieben.

Um das Aufrufen aller Endpunkte einer Funktion zu ermöglichen, verwenden Sie einen Platzhalter im Ressourcen-ARN:

```
"Resource": "arn:aws:lambda:{{us-east-1}}:{{111122223333}}:web-function/{{my-function}}/endpoint/*"
```

Ersetzen Sie die Region, die Konto-ID und den Funktionsnamen durch Ihre eigenen Werte. Bleib `endpoint/*` am Ende.

### Einem Principal die Erlaubnis zum Aufrufen erteilen
<a name="web-functions-endpoint-access-control-iam-grant"></a>

Ein Aufrufer `lambda:InvokeWebFunctionEndpoint` muss einen Endpunkt aufrufen. Für einen Anrufer mit demselben Konto wie die Web-Funktion ist es ausreichend, dem Anrufer diese Aktion in der identitätsbasierten Richtlinie zuzuweisen. Es ist keine ressourcenbasierte Richtlinie erforderlich. Für einen Anrufer mit einem anderen Konto ist diese identitätsbasierte Richtlinie zusätzlich zu einer ressourcenbasierten Richtlinie für die Funktion erforderlich, die dies zulässt.

Fügen Sie der IAM-Rolle oder dem IAM-Benutzer, der den Endpunkt aufruft, die folgende Richtlinie hinzu:

**Example Identity-based Richtlinie zum Aufrufen eines Endpunkts**  

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeWebFunctionEndpoint",
            "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod"
        }
    ]
}
```

### Signieren von Anforderungen
<a name="web-functions-endpoint-access-control-signing"></a>

Lambda bietet kein spezielles SDK zum Aufrufen von Endpunkten. Sie senden Standard-HTTP-Anfragen und signieren sie selbst mit SigV4 oder SigV4a, wobei Sie den Dienstnamen verwenden. `lambda` Beachten Sie Folgendes:
+ Jede signierte Anfrage muss den `X-Amz-Content-SHA256` Header enthalten, auch Anfragen ohne Hauptteil. Lambda liest den Anforderungstext nicht, wenn es die Signatur validiert, und verwendet daher diesen Header-Wert als Nutzlast-Hash. Anfragen ohne diesen Wert werden mit abgelehnt. `403 Forbidden`
+ Wenn Sie den Text nicht signieren (z. B. beim Streamen), verwenden Sie den Literalwert `UNSIGNED-PAYLOAD` für`X-Amz-Content-SHA256`. Lambda unterstützt kein Chunked Body Signing.
+ Lambda vergleicht den Anforderungstext nicht mit dem `X-Amz-Content-SHA256` Wert. Die Signatur deckt den Header-Wert ab, nicht den Hauptinhalt. Wenn Sie einen Schutz der Körperintegrität benötigen, der über TLS hinausgeht, implementieren Sie ihn in Ihrer Anwendung.
+ Regionale Endpunkte (`HomeRegion`,`PerRegion`) verwenden SigV4 mit der Region des Endpunkts. `MultiRegion`Endpunkte verwenden AWS Signature Version 4a (SigV4a), die für eine Reihe von Regionen statt für eine Region signiert. Verwenden Sie das Regions-Set. `*`
+ Wenn eine `IamAuth` Anfrage zurückkehrt`403 Forbidden`, überprüfen Sie, ob die Anfrage mit SigV4 (oder SigV4a) signiert ist, den `X-Amz-Content-SHA256` Header enthält und nicht abgelaufene Anmeldeinformationen verwendet und ob Ihre Richtlinien `lambda:InvokeWebFunctionEndpoint` auf dem Endpunkt-ARN dies zulassen.

[Weitere Informationen zum Signieren von Anfragen finden Sie unter Signieren von API-Anfragen. AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)

Nachdem Lambda die Sigv4- oder SigV4A-Signatur validiert hat, entfernt es den `Authorization` Header, bevor die Anfrage an Ihre Funktion weitergeleitet wird. Wenn Sie möchten, dass Ihre Funktion den `Authorization` Header auf einem `IamAuth` Endpunkt empfängt, senden Sie Anfragen über CloudFront, der sie in Ihrem Namen signiert (siehe). [CloudFront Integration](#web-functions-endpoint-access-control-cloudfront)

### CloudFront Integration
<a name="web-functions-endpoint-access-control-cloudfront"></a>

Sie können Amazon CloudFront Origin Access Control (OAC) verwenden, um eine CloudFront Distribution vor einen `IamAuth` Endpunkt zu stellen. Bei OAC CloudFront signiert jede ursprüngliche Anfrage im Namen des Betrachters, sodass Anrufer Anfragen nicht selbst unterschreiben. CloudFront verwendet den `Authorization` Header nicht, um die ursprüngliche Anfrage zu signieren, sodass es Ihren `Authorization` Header an die Funktion weiterleiten kann.

Lambda entfernt jeden `Authorization` Wert, der selbst eine AWS Signatur ist (ein Wert, der mit beginnt`AWS4-`). Auf diese Weise können Sie die Authentifizierung Ihrer Anwendung (z. B. JWT oder Cookies) beibehalten und gleichzeitig jede ursprüngliche CloudFront Anfrage signieren. Konfigurieren Sie dazu die Distribution so, dass sie den `Authorization` Header weiterleitet. Weitere Informationen finden Sie unter [Beschränken des Zugriffs auf einen AWS Ursprung](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html).

Die Endpunktdomäne bleibt im Internet erreichbar, und Lambda akzeptiert auch direkt signierte Anfragen von jedem Prinzipal, den Ihre Richtlinien zulassen.

Dies setzt voraus, dass der Authentifizierungstyp des Endpunkts `IamAuth` Erstellen Sie die Origin-Zugriffskontrolle mit Ursprungstyp `lambda` und Signaturverhalten`always-amz-auth`. CloudFront lehnt andere Signaturverhalten für Webfunktions-Ursprünge ab.

**Anmerkung**  
Lambda authentifiziert keine Anfragen an einen `ApplicationManaged` Endpunkt und bewertet auch nicht die ressourcenbasierte Richtlinie der Webfunktion für sie. Ein solcher Endpunkt bleibt unter seiner eigenen Domain öffentlich erreichbar, auch wenn er dahinter liegt. CloudFront

Um den Endpunkt aufrufen CloudFront zu können, fügen Sie der Webfunktion eine ressourcenbasierte Richtlinie hinzu, die dem CloudFront Dienstprinzipal (`cloudfront.amazonaws.com`) die Aktion erteilt. `lambda:InvokeWebFunctionEndpoint` Verwenden Sie eine `aws:SourceArn` Bedingung, um nur Ihre spezifische Distribution zuzulassen:

**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/<distribution-id>"
                }
            }
        }
    ]
}
```

## Verwenden Sie den `ApplicationManaged`Authentifizierungstyp
<a name="web-functions-endpoint-access-control-appmanaged"></a>

Wenn der Authentifizierungstyp eines Endpunkts lautet`ApplicationManaged`, kann jeder, der die Domäne des Endpunkts besitzt, Ihre Funktion aufrufen. Lambda führt keine Authentifizierung oder Autorisierung durch.

Wählen Sie aus, `ApplicationManaged` wann Ihr Endpunkt öffentlich erreichbar sein soll, um beispielsweise Anfragen direkt von einem Webbrowser aus zu bearbeiten. Sie können es auch wählen, wenn Sie die Authentifizierung in Ihrem eigenen Code abwickeln, z. B. OAuth 2.0, OpenID Connect oder einem benutzerdefinierten Token-Schema.

Mit diesem Authentifizierungstyp:
+ Lambda ermöglicht es allen Aufrufern, den Endpunkt aufzurufen. Es bewertet keine ressourcenbasierte Richtlinie für diese Anfragen.
+ Lambda leitet den `Authorization` Header des Aufrufers an Ihre Funktion weiter, sodass Ihr Code ihn validieren kann. Wenn der Header eine AWS Signature Version 4 (Sigv4) -Signatur enthält, entfernt Lambda sie zusammen mit allen `X-Amz-Security-Token` Headern, sodass AWS Anmeldeinformationen nicht an Ihren Funktionscode übergeben werden.
+ Ihre Funktion ist für die gesamte Authentifizierung und Autorisierung verantwortlich.

**Anmerkung**  
Bei `ApplicationManaged` Endpunkten bewertet Lambda die ressourcenbasierte Richtlinie der Webfunktion für Aufrufanforderungen nicht. Sie können eine ressourcenbasierte Richtlinie nicht verwenden, um einzuschränken, wer einen Endpunkt aufruft. `ApplicationManaged` Um den Aufruf einzuschränken, verwenden Sie stattdessen. `IamAuth` Die ressourcenbasierte Richtlinie gilt weiterhin für Verwaltungsaktionen. Beispielsweise kann sie einem anderen Konto die Erlaubnis erteilen, den Endpunkt zu aktualisieren. Weitere Informationen finden Sie unter [Resource-based Richtlinien](web-functions-permissions.md#web-functions-permissions-resource-policy).

## Governance und Zugriffskontrolle
<a name="web-functions-endpoint-access-control-governance"></a>

Sie können steuern, wer Endpunkte konfigurieren kann.

Lambda unterstützt die folgenden IAM-Aktionen für die Verwaltung von Endpunkten:
+ `lambda:CreateWebFunction`— Erstellen Sie eine Webfunktion und konfigurieren Sie ihren anfänglichen Endpunkt, einschließlich ihres. `AuthType`
+ `lambda:CreateWebFunctionEndpoint`— Erstellen Sie einen Endpunkt und legen Sie seinen fest`AuthType`.
+ `lambda:UpdateWebFunctionEndpoint`— Aktualisiere einen Endpunkt, einschließlich seines`AuthType`.
+ `lambda:GetWebFunctionEndpoint`— Zeigt die Konfiguration eines Endpunkts an.
+ `lambda:ListWebFunctionEndpoints`— Listet die Endpunkte einer Webfunktion auf.
+ `lambda:DeleteWebFunctionEndpoint`— Löscht einen Endpunkt.

Verwenden Sie einen Bedingungsschlüssel, um eine Aktion auf der Grundlage eines Authentifizierungstyps zuzulassen oder abzulehnen. `lambda:Request/WebFunctionAuthType`gilt für `CreateWebFunction``CreateWebFunctionEndpoint`, und`UpdateWebFunctionEndpoint`. `lambda:Resource/WebFunctionAuthType`gilt für `InvokeWebFunctionEndpoint` (auf `IamAuth` Endpunkten), `UpdateWebFunctionEndpoint``GetWebFunctionEndpoint`, und`DeleteWebFunctionEndpoint`. Details hierzu finden Sie unter [Bedingungsschlüssel](#web-functions-endpoint-access-control-condition-keys).

### Einschränkung öffentlicher Endpunkte in einer Organisation
<a name="web-functions-endpoint-access-control-scp"></a>

Wenn Sie eine AWS Organisation verwalten und Entwickler daran hindern möchten, öffentliche Endpunkte zu erstellen, verwenden Sie eine Service Control Policy (SCP), die die Erstellung oder Aktualisierung von Endpunkten mit dem Authentifizierungstyp verweigert. `ApplicationManaged` Verwenden Sie den `lambda:Request/WebFunctionAuthType` Bedingungsschlüssel, der den Authentifizierungstyp in der Anfrage widerspiegelt:

**Example SCP verweigert öffentliche Endpunkte**  

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "lambda:CreateWebFunction",
                "lambda:CreateWebFunctionEndpoint",
                "lambda:UpdateWebFunctionEndpoint"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "lambda:Request/WebFunctionAuthType": "ApplicationManaged"
                }
            }
        }
    ]
}
```

Die Richtlinie schließt ein, `lambda:CreateWebFunction` weil bei diesem Vorgang der erste Endpunkt anhand des Endpunkts der Anfrage erstellt wird. `endpointConfig` Wenn diese Richtlinie aktiviert ist, `aws lambda-web deploy` schlägt der Fehler mit der Meldung „Zugriff verweigert“ fehl, sofern der Entwickler nichts hinzufügt`--auth-type IamAuth`. Standardmäßig erstellt der Befehl einen `ApplicationManaged` Endpunkt.

### Bedingungsschlüssel
<a name="web-functions-endpoint-access-control-condition-keys"></a>

Für eine differenzierte Zugriffskontrolle unterstützt Lambda die folgenden Bedingungskontextschlüssel:
+ `lambda:Request/WebFunctionAuthType`— Der in einer Anfrage angegebene Authentifizierungstyp. Verfügbar während `CreateWebFunction``CreateWebFunctionEndpoint`, und`UpdateWebFunctionEndpoint`. Verwenden Sie es, um zu steuern, welche Authentifizierungstypen konfiguriert werden können.
+ `lambda:Resource/WebFunctionAuthType`— Der aktuell auf einem Endpunkt konfigurierte Authentifizierungstyp mit den Werten `IamAuth` und`ApplicationManaged`. Verfügbar während `InvokeWebFunctionEndpoint``UpdateWebFunctionEndpoint`,`DeleteWebFunctionEndpoint`, und`GetWebFunctionEndpoint`. Denn `InvokeWebFunctionEndpoint` Lambda wertet den Schlüssel nur auf `IamAuth` Endpunkten aus, da Anfragen an `ApplicationManaged` Endpunkte nicht mit IAM autorisiert sind.
+ `aws:ResourceTag/${TagKey}`— Filtert den Zugriff anhand der Tags in der Webfunktion. Endpunkte und Revisionen erben die Tags der übergeordneten Funktion, sodass Sie ABAC verwenden können, um den Aufrufzugriff zu kontrollieren.

**Example Erlauben Sie den Aufruf nur auf Endpunkten einer markierten Funktion**  

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeWebFunctionEndpoint",
            "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/*/endpoint/prod",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Environment": "Production"
                }
            }
        }
    ]
}
```