

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Contrôle d'accès aux terminaux Lambda Web Function
<a name="web-functions-endpoint-access-control"></a>

Vous pouvez contrôler l'accès aux points de terminaison de vos fonctions AWS Lambda Web à l'aide de ceux `AuthType` que vous avez définis sur chaque point de terminaison. Selon le type d'authentification, vous pouvez également associer une politique basée sur les ressources à la fonction Web pour contrôler qui peut invoquer un point de terminaison.

Lorsque vous configurez un point de terminaison, vous spécifiez l'une des `AuthType` options suivantes :

`IamAuth`  
Avec ce type d'authentification, Lambda utilise Gestion des identités et des accès AWS (IAM) pour authentifier et autoriser les demandes en fonction de la politique d'identité de l'appelant et de la politique basée sur les ressources de la fonction Web. Soit l'appelant signe les demandes directement avec AWS Signature Version 4 (SigV4), soit avec Signature Version 4a (SigV4a) pour les `MultiRegion` terminaux, soit Amazon CloudFront signe Service AWS en son nom lorsqu'il fait face au terminal (voir). [CloudFront intégration](#web-functions-endpoint-access-control-cloudfront) Choisissez cette option lorsque vous souhaitez que Lambda applique le contrôle d' IAM-based accès à votre terminal.

`ApplicationManaged`  
Lambda n'authentifie ni n'autorise les demandes. Chaque demande atteint votre fonction, et votre code de fonction est responsable de toute authentification. Choisissez cette option pour les points de terminaison publics ou lorsque vous gérez l'authentification dans votre propre code.

L'action IAM pour appeler un point de terminaison est. `lambda:InvokeWebFunctionEndpoint`

Vous définissez le type d'authentification d'un point de terminaison avec le `--auth-type` paramètre lorsque vous créez le point de terminaison (`create-web-function-endpoint`), et vous pouvez le modifier ultérieurement avec`update-web-function-endpoint`. Pour la commande de création, voir[Création d’un point de terminaison](web-functions-endpoints.md#web-functions-endpoint-create). Pour les propriétés que vous pouvez modifier, consultez[Mise à jour d'un terminal](web-functions-endpoints.md#web-functions-endpoint-update).

## Utilisation du type `IamAuth`d'authentification
<a name="web-functions-endpoint-access-control-iam"></a>

Si vous choisissez le type `IamAuth` d'authentification, les appelants doivent signer chaque demande avec SigV4 (SigV4a pour les `MultiRegion` points de terminaison) et doivent être autorisés à invoquer le point de terminaison. En fonction de l'auteur de la demande, vous accordez cette autorisation avec une politique basée sur les ressources sur la fonction Web, une politique basée sur l'identité de l'appelant, ou les deux.

Si l'appelant se trouve dans la même zone Compte AWS que la fonction Web, ils peuvent être accordés `lambda:InvokeWebFunctionEndpoint` par le biais d'une politique basée sur l'identité ou de la politique basée sur les ressources de la fonction. Si l'appelant utilise un autre compte, il a besoin à la fois d'une politique basée sur l'identité autorisant l'action et d'une politique basée sur les ressources concernant la fonction qui l'autorise.

Resource-based les politiques sont associées à la fonction Web, mais chaque instruction peut les étendre `Resource` à un ARN de point de terminaison spécifique. La politique basée sur les ressources suivante permet au `InvokeRole` rôle du compte d'invoquer le point `222233334444` de `prod` terminaison de : `my-function`

**Example Cross-account politique basée sur les ressources**  

```
{
    "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"
        }
    ]
}
```

Pour associer la politique basée sur les ressources, utilisez `put-resource-policy` la fonction ARN (et non un ARN de point de terminaison) :

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

Vous pouvez consulter ou supprimer la politique à l'aide de `get-resource-policy` et`delete-resource-policy`.

Une fonction Web possède une politique basée sur les ressources et la `put-resource-policy` remplace. Pour ajouter une instruction, telle que l' CloudFront instruction in[CloudFront intégration](#web-functions-endpoint-access-control-cloudfront), obtenez la politique actuelle avec`get-resource-policy`, ajoutez l'instruction à son `Statement` tableau et transmettez la valeur renvoyée `revisionId` avec`--revision-id`. Si quelqu'un a modifié la politique après que vous l'ayez lue, la demande échoue avec un `ConflictException` au lieu de remplacer sa modification.

Pour autoriser l'appel de tous les points de terminaison d'une fonction, utilisez un caractère générique dans l'ARN de la ressource :

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

Remplacez la région, l'ID de compte et le nom de la fonction par vos propres valeurs. Restez `endpoint/*` à la fin.

### Octroi d'une autorisation d'appel à un directeur
<a name="web-functions-endpoint-access-control-iam-grant"></a>

L'appelant doit invoquer un point `lambda:InvokeWebFunctionEndpoint` de terminaison. Pour un appelant ayant le même compte que la fonction Web, l'octroi de cette action dans la politique basée sur l'identité de l'appelant est suffisant. Aucune politique basée sur les ressources n'est requise. Pour un appelant utilisant un autre compte, cette politique basée sur l'identité est requise en plus d'une politique basée sur les ressources concernant la fonction qui l'autorise.

Associez la politique suivante au rôle ou à l'utilisateur IAM qui appellera le point de terminaison :

**Example Identity-based politique pour invoquer un point de terminaison**  

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

### Signature des requêtes
<a name="web-functions-endpoint-access-control-signing"></a>

Lambda ne fournit pas de SDK dédié pour appeler des points de terminaison. Vous envoyez des requêtes HTTP standard et vous les signez vous-même avec SigV4 ou Sigv4a, en utilisant le nom du service. `lambda` Notez ce qui suit :
+ Chaque demande signée doit inclure l'`X-Amz-Content-SHA256`en-tête, y compris les demandes sans corps. Lambda ne lit pas le corps de la demande lorsqu'il valide la signature. Il utilise donc cette valeur d'en-tête comme hachage de la charge utile. Les demandes qui ne le sont pas sont rejetées avec`403 Forbidden`.
+ Si vous ne signez pas le corps (par exemple, lors du streaming), utilisez la valeur littérale `UNSIGNED-PAYLOAD` pour`X-Amz-Content-SHA256`. Lambda ne prend pas en charge la signature corporelle fragmentée.
+ Lambda ne vérifie pas le corps de la requête par rapport à la `X-Amz-Content-SHA256` valeur. La signature couvre la valeur de l'en-tête, et non le contenu du corps. Si vous avez besoin d'une protection de l'intégrité corporelle allant au-delà du protocole TLS, implémentez-la dans votre application.
+ Les points de terminaison régionaux (`HomeRegion`,`PerRegion`) utilisent SigV4 avec la région du point de terminaison. `MultiRegion`les points de terminaison utilisent la version 4a de AWS signature (SigV4a), qui signe pour un ensemble de régions au lieu d'une région. Utilisez l'ensemble de régions`*`.
+ Si une `IamAuth` demande est renvoyée`403 Forbidden`, vérifiez qu'elle est signée avec SigV4 (ou SigV4a), qu'elle inclut l'`X-Amz-Content-SHA256`en-tête, qu'elle utilise des informations d'identification non expirées, et que vos politiques l'autorisent sur l'ARN `lambda:InvokeWebFunctionEndpoint` du point de terminaison.

Pour plus d'informations sur les demandes de signature, consultez [la section Signature des demandes AWS d'API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html).

Une fois que Lambda a validé la signature SigV4 ou SigV4a, il supprime l'`Authorization`en-tête avant de transmettre la demande à votre fonction. Si vous souhaitez que votre fonction reçoive l'`Authorization`en-tête d'un `IamAuth` point de terminaison, envoyez des demandes CloudFront, qui les signeront en votre nom (voir[CloudFront intégration](#web-functions-endpoint-access-control-cloudfront)).

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

Vous pouvez utiliser le contrôle CloudFront d'accès aux origines (OAC) d'Amazon pour placer une CloudFront distribution devant un point de `IamAuth` terminaison. Avec OAC, CloudFront signe chaque demande d'origine au nom du téléspectateur, afin que les appelants ne signent pas eux-mêmes les demandes. CloudFront n'utilise pas l'`Authorization`en-tête pour signer la demande d'origine, il peut donc transmettre votre `Authorization` en-tête à la fonction.

Lambda supprime toute `Authorization` valeur qui est elle-même une AWS signature (une valeur commençant `AWS4-` par). Cela vous permet de conserver l'authentification de votre application (par exemple, JWT ou cookies) tout en CloudFront signant chaque demande d'origine. Pour ce faire, configurez la distribution pour transférer l'`Authorization`en-tête. Pour plus d'informations, consultez [Restreindre l'accès à une AWS origine](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html).

Le domaine du point de terminaison reste accessible sur Internet, et Lambda accepte également les demandes signées directes provenant de tout principal autorisé par vos politiques.

Cela nécessite que le type d'authentification du point de terminaison soit`IamAuth`. Créez le contrôle d'accès à l'origine avec le type d'origine `lambda` et le comportement de signature`always-amz-auth`. CloudFront rejette les autres comportements de signature pour les origines des fonctions Web.

**Note**  
Lambda n'authentifie pas les demandes adressées à un `ApplicationManaged` point de terminaison et n'évalue pas la politique basée sur les ressources de la fonction Web pour celles-ci. Un tel point de terminaison reste accessible au public sur son propre domaine, même en arrière CloudFront.

 CloudFront Pour autoriser l'appel du point de terminaison, associez une politique basée sur les ressources à la fonction Web qui accorde l'action au principal du CloudFront service (`cloudfront.amazonaws.com`). `lambda:InvokeWebFunctionEndpoint` Utilisez une `aws:SourceArn` condition pour autoriser uniquement votre distribution spécifique :

**Example Resource-based politique de l' 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>"
                }
            }
        }
    ]
}
```

## Utilisation du type `ApplicationManaged`d'authentification
<a name="web-functions-endpoint-access-control-appmanaged"></a>

Lorsque le type d'authentification d'un point de terminaison est défini`ApplicationManaged`, toute personne possédant le domaine du point de terminaison peut invoquer votre fonction. Lambda n'effectue aucune authentification ou autorisation.

Choisissez le `ApplicationManaged` moment où vous souhaitez que votre point de terminaison soit accessible au public, par exemple pour répondre aux demandes directement depuis un navigateur Web. Vous pouvez également le choisir lorsque vous gérez l'authentification dans votre propre code, tel que OAuth 2.0, OpenID Connect ou un schéma de jetons personnalisé.

Avec ce type d'authentification :
+ Lambda permet à tous les appelants d'invoquer le point de terminaison. Il n'évalue pas de politique basée sur les ressources pour ces demandes.
+ Lambda transmet l'`Authorization`en-tête de l'appelant à votre fonction, afin que votre code puisse le valider. Si l'en-tête contient une AWS signature Signature Version 4 (SigV4), Lambda la supprime, ainsi que `X-Amz-Security-Token` tout en-tête, afin AWS que les informations d'identification ne soient pas transmises à votre code de fonction.
+ Votre fonction est responsable de toutes les authentifications et autorisations.

**Note**  
Pour les `ApplicationManaged` points de terminaison, Lambda n'évalue pas la politique basée sur les ressources de la fonction Web pour les demandes d'appel. Vous ne pouvez pas utiliser une politique basée sur les ressources pour restreindre les personnes qui invoquent un point de terminaison. `ApplicationManaged` Pour limiter l'invocation, utilisez `IamAuth` plutôt. La politique basée sur les ressources s'applique toujours aux actions de gestion. Par exemple, il peut accorder à un autre compte l'autorisation de mettre à jour le point de terminaison. Pour plus d’informations, consultez [Resource-based politiques](web-functions-permissions.md#web-functions-permissions-resource-policy).

## Gouvernance et contrôle d’accès
<a name="web-functions-endpoint-access-control-governance"></a>

Vous pouvez contrôler qui peut configurer les points de terminaison.

Lambda prend en charge les actions IAM suivantes pour gérer les points de terminaison :
+ `lambda:CreateWebFunction`— Créez une fonction Web et configurez son point de terminaison initial, y compris son`AuthType`.
+ `lambda:CreateWebFunctionEndpoint`— Créez un point de terminaison et définissez-le`AuthType`.
+ `lambda:UpdateWebFunctionEndpoint`— Mettez à jour un point de terminaison, y compris son`AuthType`.
+ `lambda:GetWebFunctionEndpoint`— Affichez la configuration d'un point de terminaison.
+ `lambda:ListWebFunctionEndpoints`— Liste les points de terminaison d'une fonction Web.
+ `lambda:DeleteWebFunctionEndpoint`— Supprime un point de terminaison.

Pour autoriser ou refuser une action en fonction d'un type d'authentification, utilisez une clé de condition. `lambda:Request/WebFunctionAuthType`s'applique à `CreateWebFunction``CreateWebFunctionEndpoint`, et`UpdateWebFunctionEndpoint`. `lambda:Resource/WebFunctionAuthType`s'applique à `InvokeWebFunctionEndpoint` (sur les `IamAuth` points de terminaison)`UpdateWebFunctionEndpoint`,`GetWebFunctionEndpoint`, et`DeleteWebFunctionEndpoint`. Pour plus de détails, consultez [Clés de condition](#web-functions-endpoint-access-control-condition-keys).

### Restreindre les points de terminaison publics dans une organisation
<a name="web-functions-endpoint-access-control-scp"></a>

Si vous administrez une AWS organisation et souhaitez empêcher les développeurs de créer des points de terminaison publics, utilisez une politique de contrôle des services (SCP) qui interdit de créer ou de mettre à jour des points de terminaison avec le `ApplicationManaged` type d'authentification. Utilisez la clé de `lambda:Request/WebFunctionAuthType` condition, qui reflète le type d'authentification dans la demande :

**Example Le SCP refuse les points de terminaison publics**  

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

La politique inclut le `lambda:CreateWebFunction` fait que cette opération crée le point de terminaison initial à partir de celui de la demande`endpointConfig`. Lorsque cette politique est en place, `aws lambda-web deploy` échoue avec une erreur de refus d'accès, sauf si le développeur l'ajoute`--auth-type IamAuth`. Par défaut, la commande crée un `ApplicationManaged` point de terminaison.

### Clés de condition
<a name="web-functions-endpoint-access-control-condition-keys"></a>

Pour un contrôle d'accès précis, Lambda prend en charge les clés de contexte de condition suivantes :
+ `lambda:Request/WebFunctionAuthType`— Le type d'authentification spécifié dans une demande. Disponible pendant `CreateWebFunction``CreateWebFunctionEndpoint`, et`UpdateWebFunctionEndpoint`. Utilisez-le pour contrôler les types d'authentification qui peuvent être configurés.
+ `lambda:Resource/WebFunctionAuthType`— Le type d'authentification actuellement configuré sur un terminal, avec les valeurs `IamAuth` et`ApplicationManaged`. Disponible pendant `InvokeWebFunctionEndpoint``UpdateWebFunctionEndpoint`,`DeleteWebFunctionEndpoint`, et`GetWebFunctionEndpoint`. En effet`InvokeWebFunctionEndpoint`, Lambda évalue la clé uniquement sur les points de terminaison, car les demandes adressées aux `IamAuth` points de `ApplicationManaged` terminaison ne sont pas autorisées par IAM.
+ `aws:ResourceTag/${TagKey}`— Filtre l'accès par les balises de la fonction Web. Les points de terminaison et les révisions héritent des balises de la fonction parent. Vous pouvez donc utiliser ABAC pour contrôler l'accès aux appels.

**Example Autoriser l'invocation uniquement sur les points de terminaison d'une fonction balisée**  

```
{
    "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"
                }
            }
        }
    ]
}
```