

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.

# Authentification TLS mutuelle avec CloudFront (Viewer MTLS)
<a name="mtls-authentication"></a>

L'authentification TLS mutuelle (Mutual Transport Layer Security Authentication — MTLS) est un protocole de sécurité qui étend l'authentification TLS standard en exigeant une authentification bidirectionnelle basée sur des certificats, dans laquelle le client et le serveur doivent prouver leur identité avant d'établir une connexion sécurisée. Grâce au protocole TLS mutuel, vous pouvez vous assurer que seuls les clients présentant des certificats TLS fiables ont accès à vos CloudFront distributions.

## Comment ça marche
<a name="how-mtls-works"></a>

Dans un handshake TLS standard, seul le serveur présente un certificat prouvant son identité au client. Avec le protocole TLS mutuel, le processus d'authentification devient bidirectionnel. Lorsqu'un client tente de se connecter à votre CloudFront distribution, il CloudFront demande un certificat client lors de la prise de contact TLS. Le client doit présenter un certificat X.509 valide par rapport à votre magasin de confiance configuré avant d'établir la connexion sécurisée. CloudFront 

CloudFront effectue cette validation des certificats sur des sites AWS périphériques, déchargeant ainsi vos serveurs d'origine de la complexité de l'authentification tout en préservant les avantages en termes CloudFront de performances globales. Vous pouvez configurer les MTL selon deux modes : le mode vérification (qui oblige tous les clients à présenter des certificats valides) ou le mode facultatif (qui valide les certificats lorsqu'ils sont présentés mais autorise également les connexions sans certificat).

## Cas d’utilisation
<a name="mtls-use-cases"></a>

L'authentification TLS mutuelle CloudFront répond à plusieurs scénarios de sécurité critiques dans lesquels les méthodes d'authentification traditionnelles sont insuffisantes :
+ **Authentification des appareils avec mise en cache du contenu** : vous pouvez authentifier les consoles de jeu, les appareils IoT ou le matériel de l'entreprise avant d'autoriser l'accès aux mises à jour du microprogramme, aux téléchargements de jeux ou aux ressources internes. Chaque appareil contient un certificat unique qui prouve son authenticité tout en bénéficiant des fonctionnalités CloudFront de mise en cache.
+ **API-to-API authentification** - Vous pouvez sécuriser les machine-to-machine communications entre des partenaires commerciaux de confiance, des systèmes de paiement ou des microservices. L'authentification basée sur des certificats élimine le besoin de partager des secrets ou des clés d'API tout en fournissant une vérification d'identité solide pour les échanges de données automatisés.

**Topics**
+ [

## Comment ça marche
](#how-mtls-works)
+ [

## Cas d’utilisation
](#mtls-use-cases)
+ [

# Trust Stores et gestion des certificats
](trust-stores-certificate-management.md)
+ [

# Activer le protocole TLS mutuel pour les distributions CloudFront
](enable-mtls-distributions.md)
+ [

# Associer une fonction CloudFront de connexion
](connection-functions.md)
+ [

# Configuration de paramètres supplémentaires
](configuring-additional-settings.md)
+ [

# En-têtes MTLS Viewer pour les politiques de cache et transférés à l'origine
](viewer-mtls-headers.md)
+ [

# Révocation à l'aide de la fonction CloudFront de connexion et du KVS
](revocation-connection-function-kvs.md)
+ [

# Observabilité à l'aide des journaux de connexion
](connection-logs.md)

# Trust Stores et gestion des certificats
<a name="trust-stores-certificate-management"></a>

La création et la configuration d'un trust store sont obligatoires pour implémenter l'authentification TLS mutuelle avec CloudFront. Les magasins de confiance contiennent les certificats de l'autorité de certification (CA) CloudFront utilisés pour valider les certificats clients lors du processus d'authentification.

## Qu'est-ce qu'un trust store ?
<a name="what-is-trust-store"></a>

Un trust store est un référentiel de certificats CA CloudFront utilisé pour valider les certificats clients lors de l'authentification TLS mutuelle. Les magasins de confiance contiennent les certificats racine et intermédiaires de l'autorité de certification qui forment la chaîne de confiance pour authentifier les certificats clients.

Lorsque vous implémentez le protocole TLS mutuel avec CloudFront, le trust store définit les autorités de certification auxquelles vous faites confiance pour délivrer des certificats clients valides. CloudFront valide chaque certificat client par rapport à votre magasin de confiance lors de la prise de contact TLS. Seuls les clients présentant des certificats liés à l'un des certificats CAs de votre magasin de confiance seront authentifiés avec succès.

Les dépôts de confiance CloudFront sont des ressources au niveau du compte que vous pouvez associer à plusieurs distributions. Cela vous permet de maintenir des politiques de validation des certificats cohérentes sur l'ensemble de votre CloudFront déploiement tout en simplifiant la gestion des certificats CA.

## Assistance aux autorités de certification
<a name="ca-support"></a>

CloudFront prend en charge les certificats émis à la fois par une autorité de certification AWS privée et par des autorités de certification privées tierces. Cette flexibilité vous permet d'utiliser votre infrastructure de certificats existante ou de tirer parti des services de certificats AWS gérés en fonction des besoins de votre organisation.
+ **AWS Autorité de certification privée :** vous pouvez utiliser des certificats émis par AWS Private CA, qui fournit un service d'autorité de certification privée géré. Cette intégration simplifie la gestion du cycle de vie des certificats et permet une intégration parfaite avec d'autres AWS services.
+ **Autorités de certification privées tierces :** vous pouvez également utiliser des certificats provenant de votre infrastructure d'autorité de certification privée existante, y compris des fournisseurs de certificats d'entreprise CAs ou d'autres fournisseurs de certificats tiers. Cela vous permet de maintenir vos processus actuels de gestion des certificats tout en ajoutant CloudFront des fonctionnalités mTLS.

## Exigences et spécifications relatives aux certificats
<a name="certificate-requirements"></a>

Les magasins de confiance ont des exigences spécifiques concernant les certificats CA qu'ils contiennent :

### Exigences relatives au format des certificats CA
<a name="ca-cert-format-requirements"></a>
+ **Format : format** PEM (Privacy Enhanced Mail)
+ **Limites du contenu : les certificats doivent être placés dans les limites** -----BEGIN CERTIFICATE----- et -----END CERTIFICATE-----
+ **Commentaires :** Doit être précédé d'un caractère \$1 et ne peut contenir aucun caractère -
+ **Sauts de ligne :** aucune ligne vide n'est autorisée entre les certificats

### Spécifications des certificats pris en charge
<a name="supported-cert-specs"></a>
+ **Type de certificat : X.509v3**
+ **Types de clés publiques :**
  + RSA 2048, RSA 3072, RSA 4096
  + ECDSA : secp256r1, secp384r1
+ **Algorithmes de signature :**
  + SHA256 SHA384, SHA512 avec RSA
  + SHA256 SHA384, SHA512 avec EC
  + SHA256 SHA384, SHA512 avec RASSA-PSS avec MGF1

### Exemple de format de bundle de certificats
<a name="example-cert-bundle"></a>

Certificats multiples (codés PEM) :

```
# Root CA Certificate
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/OvD/XqiMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcwNzEyMTU0NzQ4WhcNMjcwNzEwMTU0NzQ4WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuuExKvY1xzHFylsHiuowqpmzs7rEcuuylOuEszpFp+BtXh0ZuEtts9LP
-----END CERTIFICATE-----
# Intermediate CA Certificate
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/OvD/XqjMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcwNzEyMTU0NzQ4WhcNMjcwNzEwMTU0NzQ4WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuuExKvY1xzHFylsHiuowqpmzs7rEcuuylOuEszpFp+BtXh0ZuEtts9LP
-----END CERTIFICATE-----
```

## Créez un trust store
<a name="create-trust-store"></a>

Avant de créer un trust store, vous devez télécharger votre bundle de certificats CA au format PEM dans un compartiment Amazon S3. Le bundle de certificats doit contenir tous les certificats d'autorité de certification racine et intermédiaire sécurisés nécessaires à la validation de vos certificats clients.

Le bundle de certificats CA n'est lu qu'une seule fois depuis S3 lors de la création d'un trust store. Si de futures modifications sont apportées au bundle de certificats CA, le trust store devra être mis à jour manuellement. Aucune synchronisation n'est maintenue entre le trust store et le bundle de certificats S3 CA.

### Conditions préalables
<a name="trust-store-prerequisites"></a>
+ Un bundle de certificats de votre autorité de certification (CA) chargé dans un compartiment Amazon S3
+ Les autorisations nécessaires pour créer des CloudFront ressources

### Pour créer un trust store (console)
<a name="create-trust-store-console"></a>

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans le volet de navigation, choisissez **Trust stores**.

1. Choisissez **Create trust store**.

1. Dans **Nom de la boutique de confiance**, entrez le nom de votre boutique de confiance.

1. Pour le **bundle d'autorité de certification (CA)**, entrez le chemin Amazon S3 vers votre bundle de certificats CA au format PEM.

1. Choisissez **Create trust store**.

### Pour créer un trust store (AWS CLI)
<a name="create-trust-store-cli"></a>

```
aws cloudfront create-trust-store \
  --name MyTrustStore \
  --ca-certificates-bundle-source '{"CaCertificatesBundleS3Location":{"Bucket":"my-bucket","Key":"ca-bundle.pem","Region":"bucket-region"}}' \
  --tags Items=[{Key=Environment,Value=Production}]
```

## Associez Trust Store aux distributions
<a name="associate-trust-store"></a>

Après avoir créé un trust store, vous devez l'associer à une CloudFront distribution pour permettre l'authentification TLS mutuelle.

### Conditions préalables
<a name="associate-prerequisites"></a>
+ Une CloudFront distribution existante avec la politique de protocole de visualisation HTTPS uniquement activée et le HTTP3 support désactivé.

### Pour associer un trust store (console)
<a name="associate-trust-store-console"></a>

Il existe deux manières d'associer un trust store dans la CloudFront console : via la page de détails du trust store ou via la page des paramètres de distribution.

**Associer un trust store via la page de détails du trust store :**

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans le volet de navigation, choisissez **Trust stores**.

1. Choisissez le nom du trust store que vous souhaitez associer.

1. Choisissez **Associer à la distribution**.

1. Configurez les options mTLS du Viewer disponibles :
   + **Mode de validation du certificat client :** choisissez entre le mode obligatoire et le mode facultatif. En mode obligatoire, tous les clients sont tenus de présenter des certificats. En mode facultatif, les clients qui présentent des certificats sont validés, tandis que les clients qui ne présentent pas de certificats sont autorisés à y accéder.
   + **Publiez les noms des autorités de certification de confiance :** choisissez si vous souhaitez annoncer les noms des autorités de certification de votre boutique de confiance aux clients lors de la poignée de main TLS.
   + **Ignorer la date d'expiration du certificat :** choisissez si vous souhaitez autoriser les connexions avec des certificats expirés (les autres critères de validation s'appliquent toujours).
   + **Fonction de connexion :** une fonction de connexion optionnelle peut être associée aux allow/deny connexions en fonction d'autres critères personnalisés.

1. Sélectionnez une ou plusieurs distributions à associer au trust store. Seules les distributions dont les comportements de cache sont HTTP3 désactivés ou dont les comportements de cache sont uniquement HTTPS peuvent prendre en charge les fichiers MTL Viewer.

1. Choisissez **Associer**.

**Associer un trust store via la page des paramètres de distribution :**

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Sélectionnez la distribution que vous souhaitez associer

1. Sous l'onglet **Général**, dans le conteneur **Paramètres**, choisissez **Modifier** dans le coin supérieur droit

1. Faites défiler la page vers le bas, dans le conteneur de **connectivité**, activez le commutateur **Viewer mTLS**

1. Configurez les options mTLS du Viewer disponibles :
   + **Mode de validation du certificat client :** choisissez entre le mode obligatoire et le mode facultatif. En mode obligatoire, tous les clients sont tenus de présenter des certificats. En mode facultatif, les clients qui présentent des certificats sont validés, tandis que les clients qui ne présentent pas de certificats sont autorisés à y accéder.
   + **Publiez les noms des autorités de certification de confiance :** choisissez si vous souhaitez annoncer les noms des autorités de certification de votre boutique de confiance aux clients lors de la poignée de main TLS.
   + **Ignorer la date d'expiration du certificat :** choisissez si vous souhaitez autoriser les connexions avec des certificats expirés (les autres critères de validation s'appliquent toujours).
   + **Fonction de connexion :** une fonction de connexion optionnelle peut être associée aux allow/deny connexions en fonction d'autres critères personnalisés.

1. Choisissez **Enregistrer les modifications** dans le coin inférieur droit.

### Pour associer un trust store (AWS CLI)
<a name="associate-trust-store-cli"></a>

Les magasins de confiance peuvent être associés aux distributions via le DistributionConfig. ViewerMtlsConfig propriété. Cela signifie que nous devons d'abord récupérer la configuration de distribution, puis la fournir ViewerMtlsConfig dans une UpdateDistribution demande ultérieure.

```
// First fetch the distribution
aws cloudfront get-distribution {DISTRIBUTION_ID}

// Update the distribution config, for example:
Distribution config, file://distConf.json: 
{
  ...other fields,
  ViewerMtlsConfig: {
    Mode: 'required',
    TrustStoreConfig: {
        AdvertiseTrustStoreCaNames: false,
        IgnoreCertificateExpiry: true,
        TrustStoreId: {TRUST_STORE_ID}
    }
  }
}

aws cloudfront update-distribution \
   --id {DISTRIBUTION_ID} \
   --if-match {ETAG} \
   --distribution-config file://distConf.json
```

## Gérez les magasins de confiance
<a name="manage-trust-stores"></a>

### Afficher les détails de Trust Store
<a name="view-trust-store-details"></a>

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans le volet de navigation, choisissez **Trust stores**.

1. Choisissez le nom du trust store pour afficher sa page de détails.

La page de détails présente :
+ Nom et identifiant du magasin de confiance
+ Nombre de certificats CA
+ Date de création et date de dernière modification
+ Distributions associées
+ Étiquettes

### Modifier un trust store
<a name="modify-trust-store"></a>

Pour remplacer le bundle de certificats CA :

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans le volet de navigation, choisissez **Trust stores**.

1. Choisissez le nom du trust store.

1. Choisissez **Actions**, puis **Modifier**.

1. Pour le **bundle d'autorité de certification (CA)**, entrez l'emplacement Amazon S3 du fichier PEM du bundle CA mis à jour.

1. Choisissez **Update Trust Store**.

### Supprimer un trust store
<a name="delete-trust-store"></a>

**Conditions préalables :** vous devez d'abord dissocier le trust store de toutes les CloudFront distributions.

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans le volet de navigation, choisissez **Trust stores**.

1. Choisissez le nom du trust store.

1. Choisissez **Supprimer le trust store**.

1. Choisissez **Supprimer** pour confirmer.

### Étapes suivantes
<a name="trust-store-next-steps"></a>

Après avoir créé et associé votre trust store à une CloudFront distribution, vous pouvez activer l'authentification TLS mutuelle sur votre distribution et configurer des paramètres supplémentaires tels que le transfert des en-têtes de certificats vers vos origines. Pour obtenir des instructions détaillées sur l'activation des MTLs sur vos distributions, consultez[Activer le protocole TLS mutuel pour les distributions CloudFront](enable-mtls-distributions.md).

# Activer le protocole TLS mutuel pour les distributions CloudFront
<a name="enable-mtls-distributions"></a>

## Prérequis et exigences
<a name="mtls-prerequisites-requirements"></a>

CloudFrontle mode de vérification TLS mutuelle oblige tous les clients à présenter des certificats valides lors de la prise de contact TLS et rejette les connexions sans certificats valides. Avant d'activer le protocole TLS mutuel sur une CloudFront distribution, assurez-vous d'avoir :
+ Création d'un magasin de confiance avec les certificats de votre autorité de certification
+ Associez le trust store à votre CloudFront distribution
+ Garantie que tous les comportements du cache de distribution utilisent une politique de protocole de visualisation HTTPS uniquement
+ Assurez-vous que votre distribution utilise le protocole HTTP/2 (paramètre par défaut, Viewer mTLS, n'est pas pris en charge sur HTTP/3)

**Note**  
L'authentification TLS mutuelle nécessite des connexions HTTPS entre les utilisateurs et CloudFront. Vous ne pouvez pas activer le protocole MTL sur une distribution dont les comportements de cache prennent en charge les connexions HTTP.

## Activer le protocole TLS mutuel (console)
<a name="enable-mtls-console"></a>

### Pour les nouvelles distributions
<a name="enable-mtls-new-distributions"></a>

Les fichiers MTL Viewer ne peuvent pas être configurés lors de la création d'une nouvelle distribution dans la CloudFront console. Créez d'abord la distribution par n'importe quel moyen (console, CLI, API), puis modifiez les paramètres de distribution pour activer Viewer MTL conformément aux instructions de distribution existantes ci-dessous.

### Pour les distributions existantes
<a name="enable-mtls-existing-distributions"></a>

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans la liste de distribution, sélectionnez la distribution que vous souhaitez modifier.

1. Assurez-vous que la politique du protocole Viewer est définie sur **Rediriger le HTTP vers HTTPS** ou **HTTPS uniquement** pour tous les comportements du cache. (Vous pouvez choisir l'onglet **Comportements du cache** pour afficher et mettre à jour les comportements du cache conformément aux politiques du protocole HTTP.)

1. Choisissez l'onglet **Général**.

1. Dans la section **Settings** (Paramètres), choisissez **Edit** (Modifier).

1. Dans la section **Connectivité**, recherchez l'**authentification mutuelle (mTLS) du visualiseur**.

1. Activez **Activer l'authentification mutuelle**.

1. Pour **le mode de validation du certificat client**, sélectionnez **Obligatoire** (tous les clients doivent présenter des certificats) ou **Facultatif** (les clients peuvent éventuellement présenter des certificats).

1. Pour **Trust store**, sélectionnez le trust store que vous avez créé précédemment.

1. (Facultatif) Activez **Advertise trust store CA names** si vous souhaitez envoyer des noms CloudFront d'autorité de certification aux clients lors de la prise de contact TLS.

1. (Facultatif) Activez l'option **Ignorer la date d'expiration du certificat** si vous souhaitez autoriser les connexions avec des certificats expirés.

1. Sélectionnez **Enregistrer les modifications**.

## Activer le protocole TLS mutuel (AWS CLI)
<a name="enable-mtls-cli"></a>

### Pour les nouvelles distributions
<a name="enable-mtls-cli-new"></a>

L'exemple suivant montre comment créer un fichier de configuration de distribution (distribution-config.json) qui inclut les paramètres mTLS :

```
{
  "CallerReference": "cli-example-1",
  "Origins": {
    "Quantity": 1,
    "Items": [
      {
        "Id": "my-origin",
        "DomainName": "example.com",
        "CustomOriginConfig": {
          "HTTPPort": 80,
          "HTTPSPort": 443,
          "OriginProtocolPolicy": "https-only"
        }
      }
    ]
  },
  "DefaultCacheBehavior": {
    "TargetOriginId": "my-origin",
    "ViewerProtocolPolicy": "https-only",
    "MinTTL": 0,
    "ForwardedValues": {
      "QueryString": false,
      "Cookies": {
        "Forward": "none"
      }
    }
  },
  "ViewerCertificate": {
    "CloudFrontDefaultCertificate": true
  },
  "ViewerMtlsConfig": {
    "Mode": "required", 
    "TrustStoreConfig": {
        "TrustStoreId": {TRUST_STORE_ID},
        "AdvertiseTrustStoreCaNames": true,
        "IgnoreCertificateExpiry": true
    }
  },
  "Enabled": true
}
```

Créez la distribution avec mTLS activé à l'aide de l'exemple de commande suivant :

```
aws cloudfront create-distribution --distribution-config file://distribution-config.json
```

### Pour les distributions existantes
<a name="enable-mtls-cli-existing"></a>

Obtenez la configuration de distribution actuelle à l'aide de l'exemple de commande suivant :

```
aws cloudfront get-distribution-config --id E1A2B3C4D5E6F7 --output json > dist-config.json
```

Modifiez le fichier pour ajouter les paramètres mTLS. Ajoutez la section d'exemple suivante à votre configuration de distribution :

```
"ViewerMtlsConfig": {
    "Mode": "required", 
    "TrustStoreConfig": {
        "TrustStoreId": {TRUST_STORE_ID},
        "AdvertiseTrustStoreCaNames": true,
        "IgnoreCertificateExpiry": true
    }
}
```

Supprimez le ETag champ du fichier mais enregistrez sa valeur séparément.

Mettez à jour la distribution avec la nouvelle configuration à l'aide de l'exemple de commande suivant :

```
aws cloudfront update-distribution \
    --id E1A2B3C4D5E6F7 \
    --if-match YOUR-ETAG-VALUE \
    --distribution-config file://dist-config.json
```

## Politiques du protocole Viewer
<a name="viewer-protocol-policies"></a>

Lorsque vous utilisez le protocole TLS mutuel, tous les comportements du cache de distribution doivent être configurés selon une politique de protocole de visualisation HTTPS uniquement :
+ **Rediriger le HTTP vers HTTPS :** redirige les requêtes HTTP vers le protocole HTTPS avant de procéder à la validation du certificat.
+ **HTTPS uniquement :** accepte uniquement les requêtes HTTPS et effectue la validation des certificats.

**Note**  
La politique du protocole d'affichage HTTP et HTTPS n'est pas prise en charge avec le protocole TLS mutuel, car les connexions HTTP ne peuvent pas effectuer de validation de certificat.

## Étapes suivantes
<a name="enable-mtls-next-steps"></a>

Après avoir activé Viewer TLS sur votre CloudFront distribution, vous pouvez associer des fonctions de connexion pour implémenter une logique de validation de certificat personnalisée. Les fonctions de connexion vous permettent d'étendre les capacités d'authentification mTLS intégrées grâce à des règles de validation personnalisées, à la vérification de la révocation des certificats et à la journalisation. Pour plus de détails sur la création et l'association de fonctions de connexion, consultez[Associer une fonction CloudFront de connexion](connection-functions.md).

# Associer une fonction CloudFront de connexion
<a name="connection-functions"></a>

CloudFront Les fonctions de connexion vous permettent d'implémenter une logique de validation de certificat personnalisée lors des connexions TLS, en fournissant des extensions aux fonctionnalités d'authentification MTLS intégrées.

## Que sont les fonctions de connexion ?
<a name="what-are-connection-functions"></a>

Les fonctions de connexion sont JavaScript des fonctions qui s'exécutent pendant le handshake TLS une fois que les certificats clients ont été validés. Le certificat client validé est transmis à la fonction de connexion, qui peut alors prendre une décision supplémentaire quant à l'octroi ou non de l'accès. Pour des informations détaillées sur les fonctions de connexion, consultez[Personnalisez à la périphérie avec CloudFront Functions](cloudfront-functions.md).

## Comment les fonctions de connexion fonctionnent avec les MTLs
<a name="how-connection-functions-work"></a>

Lorsqu'un client tente d'établir une connexion mTLS avec votre CloudFront distribution, la séquence suivante se produit :

1. Le client lance une prise de contact TLS avec un CloudFront emplacement périphérique.

1. CloudFront demande et reçoit un certificat client.

1. CloudFront effectue la validation standard des certificats par rapport à Trust Store.

1. Si le certificat passe la validation standard, CloudFront invoque votre fonction de connexion. S'il **IgnoreCertificateExpiry**est activé dans votre **ViewerMtlsConfig**, vos certificats expirés (mais valides pour le reste) sont également transmis à la fonction de connexion. Si les certificats clients ne sont pas valides, les fonctions de connexion ne seront pas invoquées.

1. Votre fonction de connexion reçoit les informations de certificat et les détails de connexion analysés.

1. Votre fonction prend une allow/deny décision basée sur une logique personnalisée.

1. CloudFront termine ou met fin à la connexion TLS selon votre décision.

Les fonctions de connexion sont invoquées à la fois pour le mode de vérification et le mode facultatif (lorsque les clients présentent des certificats).

## Création d'une fonction de connexion
<a name="create-connection-function"></a>

Vous pouvez créer des fonctions de connexion à l'aide de la CloudFront console ou de la AWS CLI.

### Pour créer une fonction de connexion (console)
<a name="create-connection-function-console"></a>

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans le volet de navigation, choisissez **Fonctions**.

1. Choisissez l'onglet **Fonctions de connexion**, puis sélectionnez **Créer une fonction de connexion**.

1. Entrez un nom de fonction unique au sein de votre AWS compte.

1. Sélectionnez **Continuer**.

1. Dans l'éditeur de fonctions, écrivez votre JavaScript code pour la validation du certificat. Le gestionnaire de fonctions doit appeler allow ou deny.

1. Facultatif : un KeyValue magasin peut être associé à la fonction de connexion pour implémenter le contrôle de révocation.

1. Sélectionnez **Enregistrer les modifications**.

### Pour créer une fonction de connexion (AWS CLI)
<a name="create-connection-function-cli"></a>

L'exemple suivant montre comment créer une fonction de connexion :

Écrivez le code de votre fonction dans un fichier séparé, par exemple code.js :

```
function connectionHandler(connection) {
  connection.allow();
}
```

```
aws cloudfront create-connection-function \
  --name "certificate-validator" \
  --connection-function-config '{
      "Comment": "Client certificate validation function",
      "Runtime": "cloudfront-js-2.0"
  }' \
  --connection-function-code fileb://code.js
```

## Structure du code de la fonction de connexion
<a name="connection-function-code-structure"></a>

Les fonctions de connexion implémentent la fonction ConnectionHandler qui reçoit un objet de connexion contenant le certificat et les informations de connexion. Votre fonction doit utiliser l'un `connection.allow()` ou `connection.deny()` l'autre ou prendre une décision concernant la connexion.

### Exemple de fonction de connexion de base
<a name="basic-connection-function-example"></a>

L'exemple suivant montre une fonction de connexion simple qui vérifie le champ objet des certificats clients :

```
function connectionHandler(connection) {
    // Only process if a certificate was presented
    if (!connection.clientCertificate) {
        console.log("No certificate presented");
        connection.deny();
    }
    
    // Check the subject field for specific organization
    const subject = connection.clientCertificate.certificates.leaf.subject;
    if (!subject.includes("O=ExampleCorp")) {
        console.log("Certificate not from authorized organization");
       connection.deny();
    } else {
        // All checks passed
        console.log("Certificate validation passed");
        connection.allow();
    }
}
```

La spécification complète des propriétés du certificat client disponibles sur l'objet de connexion est disponible ici :

```
{
  "connectionId": "Fdb-Eb7L9gVn2cFakz7wWyBJIDAD4-oNO6g8r3vXDV132BtnIVtqDA==", // Unique identifier for this TLS connection
  "clientIp": "203.0.113.42", // IP address of the connecting client (IPv4 or IPv6)
  "clientCertificate": {
    "certificates": {
      "leaf": {
        "subject": "CN=client.example.com,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate holder
        "issuer": "CN=Example Corp Intermediate CA,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate authority that issued this certificate
        "serialNumber": "4a:3f:5c:92:d1:e8:7b:6c", // Unique serial number assigned by the issuing CA (hexadecimal)
        "validity": {
          "notBefore": "2024-01-15T00:00:00Z", // Certificate validity start date (ISO 8601 format)
          "notAfter": "2025-01-14T23:59:59Z"   // Certificate expiration date (ISO 8601 format)
        },
        "sha256Fingerprint": "a1b2c3d4e5f6...abc123def456", // SHA-256 hash of the certificate (64 hex characters)
      },
    },
  },
}
```

## Associer une fonction de connexion
<a name="associate-connection-function-section"></a>

Après avoir créé votre fonction de connexion, vous devez la publier sur la scène LIVE et l'associer à votre distribution.

### Pour publier et associer une fonction de connexion (console)
<a name="publish-associate-console"></a>

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans le volet de navigation, sélectionnez **Functions**

1. Choisissez l'onglet **Fonctions de connexion** et sélectionnez votre fonction de connexion.

1. Choisissez **Publier** pour le déplacer vers la scène LIVE.

1. Choisissez **Ajouter une association** dans le tableau des distributions associé situé sous la section de publication.

1. Sélectionnez la distribution à laquelle Viewer mTLS est activé et que vous souhaitez associer.

Les fonctions de connexion publiées de manière alternative peuvent également être associées à partir de la page de détails de distribution.

1. Accédez à la page d'accueil de la console où toutes vos distributions sont répertoriées.

1. Sélectionnez la distribution que vous souhaitez associer.

1. Choisissez l'onglet **Général**.

1. Dans la section **Settings** (Paramètres), choisissez **Edit** (Modifier).

1. Dans la section **Connectivité**, recherchez l'**authentification mutuelle (mTLS) du visualiseur**.

1. Pour **Fonction de connexion**, sélectionnez votre fonction.

1. Sélectionnez **Enregistrer les modifications**.

### Pour associer une fonction de connexion (AWS CLI)
<a name="associate-connection-function-cli"></a>

L'exemple suivant montre comment associer une fonction de connexion à une distribution :

```
// DistributionConfig:
{
   ...other settings,
    "ConnectionFunctionAssociation": {
        "Id": "cf_30c2CV2elHwCoInb3LtcaUJkZeD"
    }
}
```

## Cas d'utilisation des fonctions de connexion
<a name="connection-function-use-cases"></a>

Les fonctions de connexion permettent plusieurs cas d'utilisation avancés des MTL :
+ **Validation des attributs de certificat** : vérifiez des champs spécifiques dans les certificats clients, tels que les exigences relatives aux unités organisationnelles ou les modèles de noms alternatifs des sujets.
+ **Vérification de la révocation des certificats** - Mettez en œuvre une vérification personnalisée de la révocation des certificats KeyValueStore pour stocker les numéros de série des certificats révoqués.
+ **Politiques de certification basées sur l'IP** : appliquez différentes politiques de certification en fonction des adresses IP des clients ou des restrictions géographiques.
+ **Validation multi-locataires** : implémentez des règles de validation spécifiques au locataire dans lesquelles différentes exigences de certificat s'appliquent en fonction des noms d'hôte ou des attributs des certificats.

**Note**  
Les fonctions de connexion s'exécutent une fois par connexion client lors de la prise de contact TLS.  
Les fonctions de connexion peuvent uniquement autoriser ou refuser les connexions, pas modifier les requêtes/réponses HTTP.  
Seules les fonctions de scène LIVE (publiées) peuvent être associées aux distributions.  
Chaque distribution peut avoir au plus une fonction de connexion.

## Étapes suivantes
<a name="connection-function-next-steps"></a>

Après avoir associé une fonction de connexion à votre CloudFront distribution, vous pouvez configurer des paramètres facultatifs pour personnaliser le comportement de votre implémentation mTLS. Pour obtenir des instructions détaillées sur la configuration de paramètres supplémentaires tels qu'un mode de validation de certificat client facultatif, consultez[Configuration de paramètres supplémentaires](configuring-additional-settings.md).

# Configuration de paramètres supplémentaires
<a name="configuring-additional-settings"></a>

Après avoir activé l'authentification TLS mutuelle de base, vous pouvez configurer des paramètres supplémentaires pour personnaliser le comportement d'authentification en fonction de cas d'utilisation et d'exigences spécifiques.

## Validation du certificat client Mode facultatif
<a name="optional-mode"></a>

CloudFront propose un autre mode facultatif de validation des certificats clients qui valide les certificats clients présentés mais autorise l'accès aux clients qui ne présentent pas de certificats.

### Comportement du mode facultatif
<a name="optional-mode-behavior"></a>
+ Accorde la connexion aux clients dotés de certificats valides (les certificats non valides sont refusés).
+ Permet la connexion aux clients sans certificat
+ Permet des scénarios d'authentification client mixtes via une distribution unique.

Le mode optionnel est idéal pour la migration progressive vers l'authentification mTLS, la prise en charge des clients détenteurs de certificats et des clients dépourvus de certificats, ou le maintien de la rétrocompatibilité avec les anciens clients.

**Note**  
En mode facultatif, les fonctions de connexion sont toujours invoquées même lorsque les clients ne présentent pas de certificats. Cela vous permet d'implémenter une logique personnalisée telle que la journalisation des adresses IP des clients ou l'application de politiques différentes en fonction de la présentation des certificats.

### Pour configurer le mode facultatif (console)
<a name="configure-optional-mode-console"></a>

1. Dans vos paramètres de distribution, accédez à l'onglet **Général**, puis choisissez **Modifier**.

1. Accédez à la section **Authentification mutuelle (mTLS) du visualiseur** dans le conteneur de **connectivité**.

1. Pour **le mode de validation du certificat client**, sélectionnez **Facultatif**.

1. Enregistrez les modifications.

### Pour configurer le mode facultatif (AWS CLI)
<a name="configure-optional-mode-cli"></a>

L'exemple suivant montre comment configurer le mode facultatif :

```
"ViewerMtlsConfig": {
   "Mode": "optional",
   ...other settings
}
```

## Publicité de l'autorité de certification
<a name="ca-advertisement"></a>

Le AdvertiseTrustStoreCaNames champ contrôle si CloudFront la liste des noms d'autorités de certification fiables est envoyée aux clients lors de la prise de contact TLS, afin d'aider les clients à sélectionner le certificat approprié.

### Pour configurer la publicité CA (console)
<a name="configure-ca-advertisement-console"></a>

1. Dans vos paramètres de distribution, accédez à l'onglet **Général**, puis choisissez **Modifier**.

1. Accédez à la section **Authentification mutuelle (mTLS) du visualiseur** dans le conteneur de **connectivité**.

1. Cochez ou désélectionnez la case **Advertise Trust Store CA names**.

1. Sélectionnez **Enregistrer les modifications**.

### Pour configurer la publicité CA (AWS CLI)
<a name="configure-ca-advertisement-cli"></a>

L'exemple suivant montre comment activer la publicité CA :

```
"ViewerMtlsConfig": {
   "Mode": "required", // or "optional"
   "TrustStoreConfig": {
      "AdvertiseTrustStoreCaNames": true,
      ...other settings
   } 
}
```

## Gestion de l'expiration des certificats
<a name="certificate-expiration-handling"></a>

La IgnoreCertificateExpiry propriété détermine le mode CloudFront de réponse aux certificats clients expirés. Par défaut, CloudFront rejette les certificats clients expirés, mais vous pouvez le configurer pour les accepter si nécessaire. Ceci est généralement activé pour les appareils dont les certificats ont expiré et qui ne peuvent pas être facilement mis à jour.

### Pour configurer la gestion de l'expiration des certificats (console)
<a name="configure-expiration-console"></a>

1. Dans vos paramètres de distribution, accédez à l'onglet **Général**, puis choisissez **Modifier**.

1. Accédez à la section **Authentification mutuelle (mTLS) Viewer** du conteneur de **connectivité**.

1. Cochez ou désélectionnez la case **Ignorer la date d'expiration du certificat**.

1. Sélectionnez **Enregistrer les modifications**.

### Pour configurer la gestion de l'expiration des certificats (AWS CLI)
<a name="configure-expiration-cli"></a>

L'exemple suivant montre comment ignorer l'expiration d'un certificat :

```
"ViewerMtlsConfig": {
  "Mode": "required", // or "optional"
  "TrustStoreConfig": {
     "IgnoreCertificateExpiry": false,
     ...other settings
  }
}
```

**Note**  
**IgnoreCertificateExpiry**ne s'applique qu'aux dates de validité des certificats. Tous les autres contrôles de validation des certificats s'appliquent toujours (chaîne de confiance, validation de signature).

## Étapes suivantes
<a name="additional-settings-next-steps"></a>

Après avoir configuré des paramètres supplémentaires, vous pouvez configurer le transfert d'en-têtes pour transmettre les informations de certificat à vos origines, implémenter la révocation des certificats à l'aide des fonctions de connexion et KeyValueStore activer les journaux de connexion à des fins de surveillance. Pour plus de détails sur le transfert des informations de certificat vers les origines, voir [Transférer les en-têtes vers les origines](viewer-mtls-headers.md).

# En-têtes MTLS Viewer pour les politiques de cache et transférés à l'origine
<a name="viewer-mtls-headers"></a>

Lorsque vous utilisez l'authentification TLS mutuelle, CloudFront vous pouvez extraire des informations des certificats clients et les transmettre à vos origines sous forme d'en-têtes HTTP. Cela permet à vos serveurs d'origine d'accéder aux détails des certificats sans implémenter de logique de validation des certificats.

Les en-têtes suivants sont disponibles pour créer des comportements de cache :


| Nom de l’en-tête | Description | Exemple de valeur | 
| --- | --- | --- | 
| CloudFront-Numéro de série Viewer-Cert | Représentation hexadécimale du numéro de série du certificat | 4a : 3 f : 5 c : 92 : d : e 8 : 7 b : 6 c | 
| CloudFront-Viewer-Cert-Emetteur | RFC2253 représentation sous forme de chaîne du nom distinctif (DN) de l'émetteur | CN=Rootcamtls.com, OU = Rootca, O = MTLS, L = Seattle, ST = Washington, C = États-Unis | 
| CloudFront-Viewer-Cert-Sujet | RFC2253 représentation sous forme de chaîne du nom distinctif (DN) du sujet | CN=Client\$1.com, OU = Client-3, O = MTLS, ST = Washington, C = États-Unis | 
| CloudFront-Viewer-Cert-Present | 1 (présent) ou 0 (absent) indiquant si le certificat est présent. Cette valeur est toujours égale à 1 en mode obligatoire. | 1 | 
| CloudFront-Viewer-Cert-Sha256 | Le SHA256 hachage du certificat client | 01fbf94fef5569753420c349f49adbfd80af5275377816e3ab1fb371b29cb586 | 

Pour les demandes d'origine, deux en-têtes supplémentaires sont fournis, en plus des en-têtes ci-dessus mis à disposition pour les comportements du cache. En raison de la taille potentielle de l' CloudFront-Viewer-Cert-Pemen-tête, l'en-tête n'est pas exposé aux fonctions périphériques (Lambda @Edge ou CloudFront Functions) et est uniquement transmis à l'origine.


| Nom de l’en-tête | Description | Exemple de valeur | 
| --- | --- | --- | 
| CloudFront-Validité du certificat de visualisation | ISO8601 format des dates NotBefore et NotAfter | CloudFront- Validité du certificat d'affichage : =2024-09-21T 01:50:17 Z ; NotBefore =2024-09-20T 01:50:17 Z NotAfter | 
| CloudFront-Viewer-Cert-Pem | Format PEM codé par URL du certificat feuille | CloudFront-Viewer-Cert-Pem : -----BEGIN%20CERTIFICATE-----%0AMIIG<... réduit... > NmrUlw %0A----END%20CERTIFICAT------------A | 

## Configurer le transfert d'en-têtes
<a name="configure-header-forwarding"></a>

### Console
<a name="configure-headers-console"></a>

En mode vérification, ajoute CloudFront automatiquement les en-têtes CloudFront-Viewer-Cert -\$1 à toutes les demandes des utilisateurs. Pour transférer ces en-têtes vers votre source :

1. Sur la page principale des distributions de la liste, sélectionnez votre distribution avec les lecteurs MTL activés et accédez à l'onglet **Comportements**

1. Sélectionnez le comportement du cache et choisissez **Modifier**

1. Dans la section **Politique de demande d'origine**, choisissez **Créer une politique** ou sélectionnez une politique existante

1. Assurez-vous que les en-têtes suivants sont inclus dans la politique de demande d'origine :
   + CloudFront-Numéro de série Viewer-Cert
   + CloudFront-Viewer-Cert-Emetteur
   + CloudFront-Viewer-Cert-Sujet
   + CloudFront-Viewer-Cert-Present
   + Cloudfront Viewer-Cert-Sha256
   + CloudFront-Validité du certificat de visualisation
   + CloudFront-Viewer-Cert-Pem

1. Choisissez **Créer** (pour les nouvelles politiques) ou **Enregistrer les modifications** (pour les politiques existantes)

1. Sélectionnez la politique dans le comportement de votre cache et enregistrez les modifications

### Utilisation de la AWS CLI
<a name="configure-headers-cli"></a>

L'exemple suivant montre comment créer une politique de demande d'origine qui inclut les en-têtes mTLS pour le mode vérification :

```
aws cloudfront create-origin-request-policy \
  --origin-request-policy-config '{
    "Name": "MTLSHeadersPolicy",
    "HeadersConfig": {
      "HeaderBehavior": "whitelist",
      "Headers": {
        "Quantity": 5,
        "Items": [
          "CloudFront-Viewer-Cert-Serial-Number",
          "CloudFront-Viewer-Cert-Issuer",
          "CloudFront-Viewer-Cert-Subject",
          "CloudFront-Viewer-Cert-Validity",
          "CloudFront-Viewer-Cert-Pem"
        ]
      }
    },
    "CookiesConfig": {
      "CookieBehavior": "none"
    },
    "QueryStringsConfig": {
      "QueryStringBehavior": "none"
    }
  }'
```

## Considérations relatives au traitement des en-
<a name="header-processing-considerations"></a>

Lorsque vous travaillez avec des en-têtes de certificat, tenez compte des meilleures pratiques suivantes :
+ **Validation des en-têtes :** vérifiez les valeurs des en-têtes des certificats à l'origine comme mesure de sécurité supplémentaire
+ **Limites de taille des en-têtes :** les en-têtes des certificats PEM peuvent être volumineux, assurez-vous que votre serveur d'origine peut les gérer
+ **Considérations relatives au cache :** l'utilisation d'en-têtes de certificat dans votre clé de cache augmente la fragmentation du cache
+ **Demandes d'origine croisée :** si votre application utilise le CORS, vous devrez peut-être le configurer pour autoriser les en-têtes de certificat

## Étapes suivantes
<a name="headers-next-steps"></a>

Après avoir configuré le transfert d'en-têtes, vous pouvez implémenter la vérification de révocation des certificats à l'aide des fonctions de CloudFront connexion et KeyValueStore. Pour plus de détails sur la mise en œuvre des contrôles de révocation, consultez[Révocation à l'aide de la fonction CloudFront de connexion et du KVS](revocation-connection-function-kvs.md).

# Révocation à l'aide de la fonction CloudFront de connexion et du KVS
<a name="revocation-connection-function-kvs"></a>

Vous pouvez implémenter le contrôle de révocation des certificats pour l'authentification TLS mutuelle en combinant les fonctions de CloudFront connexion avec. KeyValueStore Cette approche fournit un mécanisme de révocation des certificats évolutif et en temps réel qui complète CloudFront la validation des certificats intégrée.

Les fonctions de connexion sont des JavaScript fonctions qui s'exécutent lors de l'établissement de la connexion TLS sur des sites CloudFront périphériques et vous permettent de mettre en œuvre une logique de validation de certificat personnalisée pour l'authentification MTLS. Pour des informations détaillées sur les fonctions de connexion, consultez[Associer une fonction CloudFront de connexion](connection-functions.md).

## Comment fonctionne la révocation des certificats avec Connection Functions
<a name="how-revocation-works"></a>

CloudFrontla validation standard des certificats vérifie la chaîne de certificats, la signature et l'expiration, mais n'inclut pas le contrôle intégré de révocation des certificats. En utilisant les fonctions de connexion, vous pouvez implémenter un contrôle de révocation personnalisé lors de la prise de contact TLS.

Le processus de révocation des certificats se déroule comme suit :

1. Stockez les numéros de série des certificats révoqués dans un CloudFront KeyValueStore.

1. Lorsqu'un client présente un certificat, votre fonction de connexion est invoquée.

1. La fonction compare le numéro de série du certificat au KeyValueStore.

1. Si le numéro de série se trouve dans le magasin, le certificat est révoqué.

1. Votre fonction refuse la connexion pour les certificats révoqués.

Cette approche permet de vérifier les near-real-time révocations sur CloudFront le réseau périphérique mondial.

## Configuration KeyValueStore pour les certificats révoqués
<a name="setup-kvs-revoked-certs"></a>

Tout d'abord, créez un KeyValueStore pour stocker les numéros de série des certificats révoqués :

### Pour créer une KeyValueStore (console)
<a name="create-kvs-console"></a>

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans le volet de navigation, sélectionnez **Key value stores**.

1. Choisissez **Créer un magasin de valeurs clés**.

1. Entrez un nom pour votre magasin de valeurs clés (par exemple, certificats révoqués).

1. (Facultatif) Ajoutez une description.

1. Choisissez **Créer un magasin de valeurs clés**.

### Pour créer une KeyValueStore (AWS CLI)
<a name="create-kvs-cli"></a>

L'exemple suivant montre comment créer un KeyValueStore :

```
aws cloudfront create-key-value-store \
  --name "revoked-certificates" \
  --comment "Store for revoked certificate serial numbers"
```

## Importer les numéros de série des certificats révoqués
<a name="import-revoked-serials"></a>

Après avoir créé un KeyValueStore, vous devez importer les numéros de série des certificats révoqués :

### Préparer les données de révocation
<a name="prepare-revocation-data"></a>

Créez un fichier JSON avec les numéros de série de vos certificats révoqués :

```
{
  "data": [
    {
      "key": "ABC123DEF456",
      "value": ""
    },
    {
      "key": "789XYZ012GHI",
      "value": ""
    }
  ]
}
```

### Importer des données depuis S3
<a name="import-from-s3"></a>

1. Téléchargez le fichier JSON dans un compartiment S3

1. Importez le fichier dans votre KeyValueStore :

   ```
   aws cloudfront create-key-value-store \
     --name "revoked-certificates" \
     --import-source '{
       "SourceType": "S3",
       "SourceARN": "arn:aws:s3:::amzn-s3-demo-bucket1/revoked-serials.json"
     }'
   ```

## Créer une fonction de connexion pour vérifier les révocations
<a name="create-revocation-connection-function"></a>

Créez une fonction de connexion qui vérifie les numéros de série des certificats par rapport à vos KeyValueStore :

### Exemple de code de fonction de connexion
<a name="revocation-function-example"></a>

L'exemple suivant montre une fonction de connexion qui vérifie la révocation des certificats :

```
import cf from 'cloudfront';

async function connectionHandler(connection) {
    const kvsHandle = cf.kvs();
    
    // Get client certificate serial number
    const clientSerialNumber = connection.clientCertificate.certificates.leaf.serialNumber;
    
    // Check if the serial number exists in the KeyValueStore
    const isRevoked = await kvsHandle.exists(clientSerialNumber.replaceAll(':', ''));
    
    if (isRevoked) {
        console.log(`Certificate ${clientSerialNumber} is revoked. Denying connection.`);
        connection.logCustomData(`REVOKED:${clientSerialNumber}`);
        connection.deny();
    } else {
        console.log(`Certificate ${clientSerialNumber} is valid. Allowing connection.`);
        connection.allow();
    }
    
}
```

### Pour créer la fonction de connexion (AWS CLI)
<a name="create-revocation-function-cli"></a>

L'exemple suivant montre comment créer une fonction de connexion avec KeyValueStore association :

```
aws cloudfront create-connection-function \
  --name "revocation-checker" \
  --connection-function-config '{
      "Comment": "Certificate revocation checking function",
      "Runtime": "cloudfront-js-2.0",
      "KeyValueStoreAssociations": {
          "Quantity": 1,
          "Items": [
              {
                  "KeyValueStoreARN": "arn:aws:cloudfront::123456789012:key-value-store/revoked-certificates"
              }
          ]
      }
  }' \
  --connection-function-code fileb://revocation-checker.js
```

## Associez la fonction à votre distribution
<a name="associate-revocation-function"></a>

Après avoir créé et publié votre fonction de connexion, associez-la à votre CloudFront distribution compatible MTLS comme décrit dans la section. [Associer une fonction CloudFront de connexion](connection-functions.md)

# Observabilité à l'aide des journaux de connexion
<a name="connection-logs"></a>

CloudFront les journaux de connexion fournissent une visibilité détaillée sur les événements d'authentification TLS mutuels, ce qui vous permet de surveiller la validation des certificats, de suivre les tentatives de connexion et de résoudre les problèmes d'authentification.

## Que sont les journaux de connexion ?
<a name="what-are-connection-logs"></a>

Les journaux de connexion capturent des informations détaillées sur les connexions TLS et la validation des certificats pour les distributions mutuelles compatibles TLS. Contrairement aux journaux d'accès standard qui enregistrent les informations relatives aux requêtes HTTP, les journaux de connexion se concentrent spécifiquement sur la phase d'établissement de la connexion TLS, notamment :
+ État de la connexion (succès/échec)
+ Détails du certificat client
+ Protocole TLS et informations de chiffrement
+ Métriques de synchronisation des connexions
+ Données personnalisées provenant de Connection Functions

Ces journaux fournissent une visibilité complète sur les événements d'authentification basés sur des certificats, ce qui vous aide à surveiller la sécurité, à résoudre les problèmes et à respecter les exigences de conformité.

## Activer les journaux de connexion
<a name="enable-connection-logs"></a>

Les journaux de connexion ne sont disponibles que pour les distributions où l'authentification TLS mutuelle est activée. Vous pouvez envoyer des journaux de connexion vers plusieurs destinations, notamment CloudWatch Logs, Amazon Data Firehose et Amazon S3.

### Conditions préalables
<a name="connection-logs-prerequisites"></a>

Avant d'activer les journaux de connexion :
+ Configurez le protocole TLS mutuel pour votre distribution CloudFront 
+ Activez les journaux de connexion pour votre CloudFront distribution
+ Assurez-vous de disposer des autorisations requises pour la destination de journalisation que vous avez choisie
+ Pour la livraison entre comptes, configurez les politiques IAM appropriées

### Pour activer les journaux de connexion (console)
<a name="enable-connection-logs-console"></a>

1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adresse[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dans la liste de distribution, sélectionnez votre distribution compatible MTLS.

1. Sélectionnez l'onglet **Logging** (Journalisation).

1. Choisissez **Ajouter**.

1. Sélectionnez le service pour recevoir vos journaux :
   + **CloudWatch Journaux**
   + **Firehose**
   + **Amazon S3**

1. Pour **Destination**, sélectionnez la ressource correspondant au service que vous avez choisi :
   + Pour CloudWatch Logs, entrez le **nom du groupe de logs**
   + **Pour Firehose, sélectionnez le flux de diffusion Firehose**
   + Pour Amazon S3, entrez le **nom du compartiment** (éventuellement avec un préfixe)

1. (Facultatif) Configurez des paramètres supplémentaires :
   + **Sélection des champs :** sélectionnez les champs de journal spécifiques à inclure.
   + **Format de sortie :** Choisissez entre JSON, Plain, W3C, Raw ou Parquet (S3 uniquement).
   + **Délimiteur de champs :** spécifiez comment séparer les champs du journal.

1. Choisissez **Enregistrer les modifications**

### Pour activer les journaux de connexion (AWS CLI)
<a name="enable-connection-logs-cli"></a>

L'exemple suivant montre comment activer les journaux de connexion à l'aide de l' CloudWatch API :

```
# Step 1: Create a delivery source
aws logs put-delivery-source \
  --name "cf-mtls-connection-logs" \
  --resource-arn "arn:aws:cloudfront::123456789012:distribution/E1A2B3C4D5E6F7" \
  --log-type CONNECTION_LOGS

# Step 2: Create a delivery destination
aws logs put-delivery-destination \
  --name "s3-destination" \
  --delivery-destination-configuration \
  "destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket1"

# Step 3: Create the delivery
aws logs create-delivery \
  --delivery-source-name "cf-mtls-connection-logs" \
  --delivery-destination-arn "arn:aws:logs:us-east-1:123456789012:delivery-destination:s3-destination"
```

**Note**  
Lorsque vous utilisez l' CloudWatch API, vous devez spécifier la région USA Est (Virginie du Nord) (us-east-1) même lorsque vous distribuez des logs à d'autres régions.

## Champs du journal de connexion
<a name="connection-log-fields"></a>

Les journaux de connexion contiennent des informations détaillées sur chaque tentative de connexion TLS :


| Champ | Description | Exemple | 
| --- | --- | --- | 
| eventTimestamp | Horodatage ISO 8601 lorsque la connexion a été établie ou a échoué | 1731620046814 | 
| connectionId | Identifiant unique pour la connexion TLS | oLHiEKbQSn8lkvJfA3D4gFowK3\$1iZ0g4i5nMUjE1Akod8TuAzn5nzg== | 
| connectionStatus |  État de la tentative de connexion mTLS.  | Success ou Failed | 
| clientIp | Adresse IP du client qui se connecte | 2001:0db8:85a3:0000:0000:8a2e:0370:7334 | 
| clientPort | Port utilisé par le client | 12137 | 
| serverIp | Adresse IP du serveur CloudFront Edge | 99.84.71.136 | 
| distributionId | CloudFront ID de distribution | E2DX1SLDPK0123 | 
| distributionTenantId | CloudFront ID du locataire de distribution (le cas échéant) | dt\$12te1Ura9X3R2iCGNjW123 | 
| tlsProtocol | Version du protocole TLS utilisée | TLSv1.3 | 
| tlsCipher | Suite de chiffrement TLS utilisée pour la connexion | TLS\$1AES\$1128\$1GCM\$1SHA256 | 
| tlsHandshakeDuration | Durée de la poignée de main TLS en millisecondes | 153 | 
| tlsSni | Valeur d'indication du nom du serveur issue de la poignée de contact TLS | d111111abcdef8.cloudfront.net | 
| clientLeafCertSerialNumber | Numéro de série du certificat du client | 00:b1:43:ed:93:d2:d8:f3:9d | 
| clientLeafCertSubject | Champ d'objet du certificat du client | C=US, ST=WA, L=Seattle, O=Amazon.com, OU=CloudFront, CN=client.test.mtls.net | 
| clientLeafCertIssuer | Champ émetteur du certificat du client | C=US, ST=WA, L=Seattle, O=Amazon.com, OU=CloudFront, CN=test.mtls.net | 
| clientLeafCertValidity | Période de validité du certificat du client | NotBefore=2025-06-05T23:28:21Z;NotAfter=2125-05-12T23:28:21Z | 
| connectionLogCustomData | Données personnalisées ajoutées via les fonctions de connexion | REVOKED:00:b1:43:ed:93:d2:d8:f3:9d | 

## Codes d'erreur de connexion
<a name="connection-error-codes"></a>

```
Failed:ClientCertMaxChainDepthExceeded
Failed:ClientCertMaxSizeExceeded
Failed:ClientCertUntrusted
Failed:ClientCertNotYetValid
Failed:ClientCertExpired
Failed:ClientCertTypeUnsupported
Failed:ClientCertInvalid
Failed:ClientCertIntentInvalid
Failed:ClientCertRejected
Failed:ClientCertMissing
Failed:TcpError
Failed:TcpTimeout
Failed:ConnectionFunctionError
Failed:ConnectionFunctionDenied
Failed:Internal
Failed:UnmappedConnectionError
```

Lorsque les connexions échouent, CloudFront enregistre des codes de motif spécifiques :


| Code | Description | 
| --- | --- | 
| ClientCertMaxChainDepthExceeded | Profondeur maximale de la chaîne de certificats dépassée | 
| ClientCertMaxSizeExceeded | Taille maximale du certificat dépassée | 
| ClientCertUntrusted | Le certificat n'est pas fiable | 
| ClientCertNotYetValid | Le certificat n'est pas encore valide | 
| ClientCertExpired | Le certificat est expiré | 
| ClientCertTypeUnsupported | Le type de certificat n'est pas pris en charge | 
| ClientCertInvalid | Le certificat n'est pas valide | 
| ClientCertIntentInvalid | L'intention du certificat n'est pas valide | 
| ClientCertRejected | Certificat rejeté par validation personnalisée | 
| ClientCertMissing | Le certificat est manquant | 
| TcpError |  Une erreur s'est produite lors de la tentative d'établissement d'une connexion  | 
| TcpTimeout |  La connexion n'a pas pu être établie dans le délai imparti  | 
| ConnectionFunctionError |  Une exception non détectée a été déclenchée lors de l'exécution de la fonction de connexion  | 
| Internal (Interne) |  Une erreur de service interne s'est produite  | 
| UnmappedConnectionError |  Une erreur s'est produite qui ne correspond à aucune des autres catégories  | 