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.
Associer une fonction CloudFront de connexion
CloudFront Les fonctions de connexion vous permettent d'implémenter une logique de validation de certificat personnalisée lors des handshakes TLS, en fournissant des extensions aux fonctionnalités d'authentification mTLS intégrées.
Que sont les fonctions de connexion ?
Les fonctions de connexion sont des JavaScript fonctions qui s'exécutent lors de la prise de contact 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, consultezPersonnalisez à la périphérie avec CloudFront Functions.
Comment les fonctions de connexion fonctionnent avec mTLS
Lorsqu'un client tente d'établir une connexion mTLS à votre CloudFront distribution, la séquence suivante se produit :
-
Le client lance une prise de contact TLS avec CloudFront Edge Location.
-
CloudFront demande et reçoit un certificat client.
-
CloudFront effectue la validation standard des certificats par rapport à Trust Store.
-
Si le certificat passe la validation standard, CloudFront invoque votre fonction de connexion. Si cette option IgnoreCertificateExpiry est activée dans votre ViewerMtlsConfig, vos certificats expirés, mais valides par ailleurs, sont également transmis à la fonction de connexion. Si les certificats clients ne sont pas valides, les fonctions de connexion ne seront pas invoquées.
-
Votre fonction de connexion reçoit les informations de certificat analysées et les détails de connexion.
-
Votre fonction prend une allow/deny décision en fonction d'une logique personnalisée.
-
CloudFront termine ou met fin à la connexion TLS en fonction de votre décision.
Les fonctions de connexion sont invoquées à la fois pour le mode de vérification et le mode optionnel (lorsque les clients présentent des certificats).
Création d'une fonction de connexion
Vous pouvez créer des fonctions de connexion à l'aide de la CloudFront console ou de l' AWS interface de ligne de commande.
Pour créer une fonction de connexion (console)
Connectez-vous à Console de gestion AWS et ouvrez la CloudFront console à l'adressehttps://console.aws.amazon.com/cloudfront/v4/home
. -
Dans le volet de navigation, choisissez Fonctions.
-
Choisissez l'onglet Fonctions de connexion et choisissez Créer une fonction de connexion.
-
Entrez un nom de fonction unique dans votre AWS compte.
-
Sélectionnez Continuer.
-
Dans l'éditeur de fonctions, écrivez votre JavaScript code pour la validation du certificat. Le gestionnaire de fonctions doit appeler allow ou deny.
-
Facultatif : un KeyValue magasin peut être associé à la fonction de connexion pour implémenter le contrôle de révocation.
-
Sélectionnez Enregistrer les modifications.
Pour créer une fonction de connexion (AWS CLI)
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
Les fonctions de connexion implémentent la fonction ConnectionHandler qui reçoit un objet de connexion contenant des informations de certificat et de connexion. Votre fonction doit utiliser l'une connection.allow() ou connection.deny() l'autre pour prendre une décision concernant la connexion.
Exemple de fonction de connexion de base
L'exemple suivant montre une fonction de connexion simple qui vérifie le champ d'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": { "serialNumber": "4a:3f:5c:92:d1:e8:7b:6c", // Unique serial number assigned by the issuing CA (hexadecimal) "issuer": "CN=Example Corp Intermediate CA,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate authority that issued this certificate. "subject": "CN=client.example.com,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate holder. "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) "ocspEndpoint": "http://ocsp.example.com", // OCSP responder URL from the certificate's AIA extension. "san": "DNS:client.example.com,DNS:api.example.com", // Subject Alternative Names. "spki": "30820122300d06092a864886f70d01010105000382010f003082010a0282010100...", // Subject Public Key Info (DER-encoded, hex). "sanHex": "3032820f636c69656e742e6578616d706c652e636f6d820f6170692e6578616d706c652e636f6d..." // Subject Alternative Names (DER-encoded, hex). }, "intermediates": [ { "serialNumber": "00:d4:04:a5:fd:cb:20:37:54", // Serial number of the intermediate certificate. "issuer": "CN=Example Corp Root CA,O=Example Corp,C=US", // Issuer of the intermediate certificate. "subject": "CN=Example Corp Intermediate CA,O=Example Corp,C=US", // Subject of the intermediate certificate. "validity": { "notBefore": "2020-01-01T00:00:00Z", "notAfter": "2030-01-01T23:59:59Z" }, "sha256Fingerprint": "b2c3d4e5f6a1...def456abc123", "ocspEndpoint": "http://ocsp.example.com/intermediate", "san": "DNS:ca.example.com", "spki": "30820122300d06092a864886f70d01010105000382010f003082010a0282010100b389dd513b...", "sanHex": "3015820d63612e6578616d706c652e636f6d..." } ] } } }
Associer une fonction de connexion
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)
Connectez-vous à Console de gestion AWS et ouvrez la CloudFront console à l'adressehttps://console.aws.amazon.com/cloudfront/v4/home
. -
Dans le volet de navigation, choisissez Fonctions
-
Choisissez l'onglet Fonctions de connexion et sélectionnez votre fonction de connexion.
-
Choisissez Publier pour le déplacer vers la scène LIVE.
-
Choisissez Ajouter une association dans le tableau des distributions associées situé sous la section de publication.
-
Sélectionnez la distribution avec Viewer mTLS activé que vous souhaitez associer.
Les fonctions de connexion publiées peuvent également être associées à partir de la page des détails de distribution.
-
Accédez à la page d'accueil de la console où toutes vos distributions sont répertoriées.
-
Sélectionnez la distribution que vous souhaitez associer.
-
Choisissez l'onglet Général.
-
Dans la section Settings (Paramètres), choisissez Edit (Modifier).
-
Dans la section Connectivité, recherchez Viewer Mutual Authentication (mTLS).
-
Pour Fonction de connexion, sélectionnez votre fonction.
-
Sélectionnez Enregistrer les modifications.
Pour associer une fonction de connexion (AWS CLI)
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
Les fonctions de connexion permettent plusieurs cas d'utilisation avancés de mTLS :
-
Validation des attributs des certificats : vérifiez des champs spécifiques dans les certificats clients, tels que les exigences des unités organisationnelles ou les modèles de noms alternatifs des sujets.
-
Vérification de la révocation des certificats - Implémentez une vérification de révocation de certificat personnalisée en stockant KeyValueStore les numéros de série des certificats révoqués.
-
IP-based politiques de certification : appliquez différentes politiques de certification en fonction des adresses IP des clients ou des restrictions géographiques.
-
Multi-tenant validation : 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 de certificat.
Note
Les fonctions de connexion sont exécutées une fois par connexion client pendant l'établissement de liaison TLS.
Les fonctions de connexion peuvent uniquement autoriser ou refuser les connexions, pas modifier le protocole HTTP requests/responses.
Seules les fonctions de scène LIVE (publiées) peuvent être associées à des distributions.
Chaque distribution peut avoir au plus une fonction de connexion.
Étapes suivantes
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 facultatif de validation des certificats clients, consultezConfiguration de paramètres supplémentaires.