Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Authentification personnalisée avec des certificats clients X.509

Mode de mise au point
Authentification personnalisée avec des certificats clients X.509 - AWS IoT Core

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.

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.

Lorsque vous connectez des appareils à AWS IoT Core, plusieurs types d'authentification sont disponibles. Vous pouvez utiliser des certificats client X.509 qui peuvent être utilisés pour authentifier les connexions des clients et des appareils, ou définir des autorisateurs personnalisés pour gérer votre propre logique d'authentification et d'autorisation des clients. Cette rubrique explique comment utiliser l'authentification personnalisée avec les certificats client X.509.

L'utilisation de l'authentification personnalisée avec des certificats X.509 peut être utile si vous avez déjà authentifié vos appareils à l'aide de certificats X.509 et que vous souhaitez effectuer une validation supplémentaire et une autorisation personnalisée. Par exemple, si vous stockez les données de vos appareils, telles que leurs numéros de série, dans le certificat client X.509, après avoir AWS IoT Core authentifié le certificat client X.509, vous pouvez utiliser un autorisateur personnalisé pour identifier des appareils spécifiques en fonction des informations stockées dans le champ du certificat. CommonName L'utilisation de l'authentification personnalisée avec des certificats X.509 peut améliorer la gestion de la sécurité de vos appareils lors de la connexion des appareils AWS IoT Core et offre plus de flexibilité pour gérer la logique d'authentification et d'autorisation. AWS IoT Core prend en charge l'authentification personnalisée avec des certificats X.509 utilisant le certificat X.509 et le type d'authentification d'autorisation personnalisé, qui fonctionne à la fois avec le protocole MQTT et le protocole HTTPS. Pour plus d'informations sur les types d'authentification et les protocoles d'application pris en charge par les terminaux des AWS IoT Core appareils, consultez la section Protocoles de communication des appareils.

Note

L'authentification personnalisée à l'aide de certificats clients X.509 n'est pas prise en charge dans les AWS GovCloud (US) régions.

Important

Vous devez utiliser un point de terminaison créé à l'aide de configurations de domaine. En outre, les clients doivent fournir l'extension SNI (Server Name Indication) lorsqu'ils se connectent à AWS IoT Core.

Étape 1 : enregistrez vos certificats clients X.509 auprès de AWS IoT Core

Si ce n'est pas déjà fait, enregistrez et activez vos certificats clients X.509 avec AWS IoT Core. Sinon, passez à l'étape suivante.

Pour enregistrer et activer vos certificats clients auprès de AWS IoT Core, suivez les étapes suivantes :

  1. Si vous créez des certificats clients directement avec AWS IoT. Ces certificats clients seront automatiquement enregistrés auprès de AWS IoT Core.

  2. Si vous créez vos propres certificats clients, suivez ces instructions pour les enregistrer auprès de AWS IoT Core.

  3. Pour activer vos certificats clients, suivez ces instructions.

Étape 2 : création d’une fonction Lambda

AWS IoT Core utilise des autorisateurs personnalisés pour implémenter des schémas d'authentification et d'autorisation personnalisés. Un autorisateur personnalisé est associé à une fonction Lambda qui détermine si un appareil est authentifié et quelles opérations le périphérique est autorisé à effectuer. Lorsqu'un appareil se connecte à AWS IoT Core, AWS IoT Core récupère les détails de l'autorisateur, y compris le nom de l'autorisateur et la fonction Lambda associée, et invoque la fonction Lambda. La fonction Lambda reçoit un événement contenant un objet JSON contenant les données du certificat client X.509 du périphérique. Votre fonction Lambda utilise cet objet JSON d'événement pour évaluer la demande d'authentification, décider des actions à entreprendre et renvoyer une réponse.

Exemple d'événement lié à une fonction Lambda

L'exemple d'objet JSON suivant contient tous les champs possibles qui peuvent être inclus. L'objet JSON proprement dit ne contiendra que les champs relatifs à la demande de connexion spécifique.

{ "token": "aToken", "signatureVerified": true, "protocols": [ "tls", "mqtt" ], "protocolData": { "tls": { "serverName": "serverName", "x509CertificatePem": "x509CertificatePem", "principalId": "principalId" }, "mqtt": { "clientId": "myClientId", "username": "myUserName", "password": "myPassword" } }, "connectionMetadata": { "id": "UUID" } }
signatureVerified

Valeur booléenne qui indique si la signature du jeton configurée dans l'autorisateur est vérifiée ou non avant d'appeler la fonction Lambda de l'autorisateur. Si l'autorisateur est configuré pour désactiver la signature par jeton, ce champ sera défini sur false.

protocols

Tableau contenant les protocoles attendus pour la demande.

protocolData

Objet contenant des informations sur les protocoles utilisés dans la connexion. Il fournit des informations spécifiques au protocole qui peuvent être utiles pour l'authentification, l'autorisation, etc.

tls- Cet objet contient des informations relatives au protocole TLS (Transport Layer Security).

  • serverName- La chaîne de nom d'hôte SNI (Server Name Indication). AWS IoT Core exige que les appareils envoient l'extension SNI au protocole TLS (Transport Layer Security) et fournissent l'adresse complète du point de terminaison sur le host_name terrain.

  • x509CertificatePem- Le certificat X.509 au format PEM, qui est utilisé pour l'authentification du client dans la connexion TLS.

  • principalId- L'identifiant principal associé au client dans la connexion TLS.

mqtt- Cet objet contient des informations relatives au protocole MQTT.

  • clientId- Une chaîne ne doit être incluse que dans le cas où l'appareil envoie cette valeur.

  • username- Le nom d'utilisateur fourni dans le paquet MQTT Connect.

  • password- Le mot de passe fourni dans le paquet MQTT Connect.

connectionMetadata

Métadonnées de la connexion.

id- L'identifiant de connexion, que vous pouvez utiliser pour la journalisation et le dépannage.

Note

Dans ce cas, il s'agit d'un objet JSON x509CertificatePem et principalId deux nouveaux champs figurent dans la demande. La valeur de principalId est identique à la valeur decertificateId. Pour plus d'informations, consultez la section Certificat.

Exemple de réponse de la fonction Lambda

La fonction Lambda doit utiliser les informations de l'objet JSON d'événement pour authentifier la connexion entrante et décider quelles actions sont autorisées dans la connexion.

L'objet JSON suivant contient un exemple de réponse que votre fonction Lambda peut envoyer.

{ "isAuthenticated": true, "principalId": "xxxxxxxx", "disconnectAfterInSeconds": 86400, "refreshAfterInSeconds": 300, "policyDocuments": [ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/customauthtesting" } ] } ] }

Dans cet exemple, cette fonction doit envoyer une réponse contenant les valeurs suivantes.

isAuthenticated

Valeur booléenne qui indique si la demande est authentifiée.

principalId

Chaîne alphanumérique qui sert d'identifiant pour le jeton envoyé par la demande d'autorisation personnalisée. La valeur doit être une chaîne alphanumérique comportant au moins un caractère, mais pas plus de 128. Il identifie la connexion dans les journaux. La valeur de principalId doit être identique à la valeur de l'objet JSON principalId de l'événement (c'est-à-dire le certificateID du certificat X.509).

policyDocuments

Liste des documents de politique au format JSON AWS IoT Core . La valeur est facultative et prend en charge les variables de politique d'objet et les variables de politique de certificat. Le nombre maximum de documents de politique est de 10. Chaque document de stratégie peut contenir un maximum de 2048 caractères. Si plusieurs politiques sont associées à votre certificat client et à la fonction Lambda, l'autorisation est un ensemble de toutes les politiques. Pour plus d'informations sur la création de AWS IoT Core politiques, consultez la section Politiques.

disconnectAfterInSeconds

Nombre entier qui indique la durée maximale (en secondes) de la connexion à la AWS IoT Core passerelle. La valeur minimale est de 300 secondes et la valeur maximale de 86 400 secondes. disconnectAfterInSecondsest valable pour la durée de vie d'une connexion et n'est pas actualisé lors de mises à jour consécutives des politiques.

refreshAfterInSeconds

Nombre entier qui indique l'intervalle entre les actualisations des politiques. Lorsque cet intervalle est dépassé, AWS IoT Core invoque la fonction Lambda pour permettre l'actualisation des politiques. La valeur minimale est de 300 secondes et la valeur maximale de 86 400 secondes.

Exemple de fonction Lambda

Voici un exemple de fonction Lambda de Node.js. La fonction examine le certificat X.509 du client et extrait les informations pertinentes telles que le numéro de série, l'empreinte digitale et le nom du sujet. Si les informations extraites correspondent aux valeurs attendues, le client est autorisé à se connecter. Ce mécanisme garantit que seuls les clients autorisés possédant des certificats valides peuvent établir une connexion.

const crypto = require('crypto'); exports.handler = async (event) => { // Extract the certificate PEM from the event const certPem = event.protocolData.tls.x509CertificatePem; // Parse the certificate using Node's crypto module const cert = new crypto.X509Certificate(certPem); var effect = "Deny"; // Allow permissions only for a particular certificate serial, fingerprint, and subject if (cert.serialNumber === "7F8D2E4B9C1A5036DE8F7C4B2A91E5D80463BC9A1257" // This is a random serial && cert.fingerprint === "F2:9A:C4:1D:B5:E7:08:3F:6B:D0:4E:92:A7:C1:5B:8D:16:0F:E3:7A" // This is a random fingerprint && cert.subject === "allow.example.com") { effect = "Allow"; } return generateAuthResponse(event.protocolData.tls.principalId, effect); }; // Helper function to generate the authorization response. function generateAuthResponse(principalId, effect) { const authResponse = { isAuthenticated: true, principalId, disconnectAfterInSeconds: 3600, refreshAfterInSeconds: 300, policyDocuments: [ { Version: "2012-10-17", Statement: [ { Action: ["iot:Connect"], Effect: effect, Resource: [ "arn:aws:iot:us-east-1:123456789012:client/myClientName" ] }, { Action: ["iot:Publish"], Effect: effect, Resource: [ "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName" ] }, { Action: ["iot:Subscribe"], Effect: effect, Resource: [ "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName" ] }, { Action: ["iot:Receive"], Effect: effect, Resource: [ "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName" ] } ] } ] }; return authResponse; }

La fonction Lambda précédente renvoie le code JSON suivant lorsqu'elle reçoit un certificat avec le numéro de série, l'empreinte digitale et le sujet attendus. La valeur de x509CertificatePem sera le certificat client fourni lors de la poignée de contact TLS. Pour plus d'informations, consultez la section Définition de votre fonction Lambda.

{ "isAuthenticated": true, "principalId": "principalId in the event JSON object", "policyDocuments": [ { "Version": "2012-10-17", "Statement": [ { "Action": "iot:Connect", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:client/myClientName" }, { "Action": "iot:Publish", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName" }, { "Action": "iot:Subscribe", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName" }, { "Action": "iot:Receive", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName" } ] } ], "disconnectAfterInSeconds": 3600, "refreshAfterInSeconds": 300 }

Étape 3 : créer un autorisateur personnalisé

Après avoir défini la fonction Lambda, créez un autorisateur personnalisé pour gérer votre propre logique d'authentification et d'autorisation du client. Vous pouvez suivre les instructions détaillées de l'étape 3 : créer une ressource d'autorisation client et son autorisation. Pour plus d'informations, consultez la section Création d'un autorisateur.

Lors de la création de l'autorisateur personnalisé, vous devez AWS IoT autoriser l'appel de la fonction Lambda après sa création. Pour obtenir des instructions détaillées, consultez Autoriser l'appel AWS IoT de votre fonction Lambda.

Étape 4 : définir le type d'authentification et le protocole d'application dans une configuration de domaine

Pour authentifier les appareils à l'aide d'une authentification personnalisée avec des certificats clients X.509, vous devez définir le type d'authentification et le protocole d'application dans une configuration de domaine, et vous devez envoyer l'extension SNI. La valeur de authenticationType doit êtreCUSTOM_AUTH_X509, et la valeur de applicationProtocol peut être SECURE_MQTT ouHTTPS.

Définissez le type d'authentification et le protocole d'application dans la configuration du domaine (CLI)

Si vous n'avez pas de configuration de domaine, utilisez la create-domain-configurationcommande pour en créer une. La valeur de authenticationType doit êtreCUSTOM_AUTH_X509, et la valeur de applicationProtocol peut être SECURE_MQTT ouHTTPS.

aws iot create-domain-configuration \ --domain-configuration-name domainConfigurationName \ --authentication-type CUSTOM_AUTH_X509 \ --application-protocol SECURE_MQTT \ --authorizer-config '{ "defaultAuthorizerName": my-custom-authorizer }'

Si vous avez déjà une configuration de domaine, utilisez la update-domain-configurationcommande update authenticationType et applicationProtocol si nécessaire. Notez que vous ne pouvez pas modifier le type ou le protocole d'authentification sur le point de terminaison par défaut (iot:Data-ATS).

aws iot update-domain-configuration \ --domain-configuration-name domainConfigurationName \ --authentication-type CUSTOM_AUTH_X509 \ --application-protocol SECURE_MQTT \ --authorizer-config '{ "defaultAuthorizerName": my-custom-authorizer }'
domain-configuration-name

Nom de la configuration de domaine.

authentication-type

Type d'authentification de la configuration du domaine. Pour plus d'informations, consultez la section Choix d'un type d'authentification.

application-protocol

Protocole d'application avec lequel les appareils communiquent AWS IoT Core. Pour plus d'informations, consultez la section Choix d'un protocole d'application.

--authorizer-config

Objet qui spécifie la configuration de l'autorisateur dans une configuration de domaine.

defaultAuthorizerName

Nom de l'autorisateur pour une configuration de domaine.

Pour plus d'informations, consultez CreateDomainConfigurationet consultez le UpdateDomainConfigurationGuide de référence des AWS IoT API. Pour plus d'informations sur la configuration des domaines, consultez la section Configurations des domaines.

ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.