Intégration de sécurité matérielle - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

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.

Intégration de sécurité matérielle

Cette fonctionnalité est disponible pour AWS IoT Greengrass Core v1.7 et versions ultérieures.

AWS IoT Greengrass prend en charge l'utilisation de modules de sécurité matériels (HSM) via l'interface PKCS #11 pour le stockage sécurisé et le déchargement des clés privées. Cela empêche les clés d'être exposées ou dupliquées dans les logiciels. Les clés privées peuvent être stockées en toute sécurité sur des modules matérielsHSMs, tels que les Trusted Platform Modules (TPM) ou d'autres éléments cryptographiques.

Recherchez les appareils qualifiés pour cette fonctionnalité dans le catalogue des AWS Partner appareils.

Le schéma suivant montre l'architecture de sécurité matérielle d'un AWS IoT Greengrass cœur.

AWS IoT Greengrass Core architecture with hardware security and message routing to AWS IoT Core and local devices.

Sur une installation standard, AWS IoT Greengrass utilise deux clés privées. Une clé est utilisée par le composant AWS IoT client (client IoT) lors de la poignée de main Transport Layer Security (TLS) lorsqu'un noyau Greengrass se connecte à. AWS IoT Core(Cette clé est également appelée la clé privée principale.) L'autre clé est utilisée par le MQTT serveur local, qui permet aux appareils Greengrass de communiquer avec le cœur de Greengrass. Si vous souhaitez utiliser la sécurité matérielle des deux composants, vous pouvez utiliser une clé privée partagée ou des clés privées séparées. Pour de plus amples informations, veuillez consulter Pratiques de provisionnement pour la sécurité AWS IoT Greengrass du matériel.

Note

Sur une installation standard, le Secrets Manager local utilise également la clé du client IoT pour ses processus de chiffrement, mais vous pouvez utiliser votre propre clé privée. Il doit s'agir d'une RSA clé d'une longueur minimale de 2048 bits. Pour de plus amples informations, veuillez consulter Spécifier la clé privée pour chiffrer un secret.

Prérequis

Pour pouvoir configurer la sécurité matérielle d'un noyau Greengrass, vous devez disposer des éléments suivants :

  • Module de sécurité matérielle (HSM) qui prend en charge la configuration de votre clé privée cible pour les composants du client IoT, MQTT du serveur local et du gestionnaire de secrets local. La configuration peut inclure une, deux ou trois clés privées basée sur le matériel, selon que vous configurez les composants pour partager les clés ou non. Pour plus d'informations sur la prise en charge des clés privées, consultez AWS IoT Greengrass principes de sécurité fondamentaux.

    • Pour RSA les clés : une taille de clé de RSA -2048 (ou plus) et un schéma de signature PKCS#1 v1.5.

    • Pour les touches EC : une courbe NIST P-256 ou NIST P-384.

    Note

    Recherchez les appareils qualifiés pour cette fonctionnalité dans le catalogue des AWS Partner appareils.

  • Une bibliothèque de fournisseur PKCS #11 qui est chargeable au moment de l'exécution (à l'aide de libdl) et fournit les fonctions PKCS#11.

  • Le module matériel doit pouvoir être résolu par étiquette d'emplacement, comme défini dans la spécification PKCS #11.

  • La clé privée doit être générée et chargée sur le à l'aide des outils de provisionnement fournis HSM par le fournisseur.

  • La clé privée doit être résolue par étiquette d'objet.

  • Le certificat de l'appareil noyau. Il s'agit d'un certificat client IoT qui correspond à la clé privée.

  • Si vous utilisez l'agent de OTA mise à jour Greengrass, la bibliothèque wrapper Open SSL libp11 PKCS #11 doit être installée. Pour de plus amples informations, veuillez consulter Configurer le support pour les over-the-air mises à jour.

En outre, vérifiez que les conditions suivantes sont réunies :

  • Les certificats clients IoT associés à la clé privée sont enregistrés AWS IoT et activés. Vous pouvez le vérifier dans la AWS IoT console sous Gérer, développer Tous les appareils, sélectionner Objets et choisir l'onglet Certificats pour l'élément principal.

  • Le logiciel AWS IoT Greengrass Core v1.7 ou version ultérieure est installé sur le périphérique principal, comme décrit dans le module 2 du didacticiel de démarrage. La version 1.9 ou ultérieure est requise pour utiliser une clé EC pour le MQTT serveur.

  • Les certificats sont attachés au noyau Greengrass. Vous pouvez le vérifier sur la page Gérer pour l'essentiel de la AWS IoT console.

Note

Actuellement, AWS IoT Greengrass ne prend pas en charge le chargement du certificat CA ou du certificat client IoT directement depuis leHSM. Les certificats doivent être chargés en tant que fichiers de texte brut sur le système de fichiers dans un emplacement lisible par Greengrass.

Configuration de sécurité matérielle pour un AWS IoT Greengrass cœur

La sécurité matérielle est configurée dans le fichier de configuration de Greengrass. Il s'agit du fichier config.json qui se trouve dans le répertoire /greengrass-root/config.

Note

Pour découvrir le processus de configuration d'une HSM configuration à l'aide d'une implémentation logicielle pure, voirModule 7 : Simulation d'intégration de sécurité matérielle.

Important

La configuration simulée de l'exemple n'apporte aucun avantage de sécurité. Il est destiné à vous permettre de vous renseigner sur la spécification PKCS #11 et d'effectuer les premiers tests de votre logiciel si vous prévoyez d'utiliser un logiciel basé sur du matériel HSM à l'avenir.

Pour configurer la sécurité matérielle dans AWS IoT Greengrass, vous devez modifier l'cryptoobjet dansconfig.json.

Lors de l'utilisation de la sécurité matérielle, l'cryptoobjet est utilisé pour spécifier les chemins d'accès aux certificats, aux clés privées et aux actifs pour la bibliothèque du fournisseur PKCS #11 sur le noyau, comme indiqué dans l'exemple suivant.

"crypto": { "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, "principals" : { "IoTCertificate" : { "privateKeyPath" : "pkcs11:object=core-private-key-label;type=private", "certificatePath" : "file:///path-to-core-device-certificate" }, "MQTTServerCertificate" : { "privateKeyPath" : "pkcs11:object=server-private-key-label;type=private" }, "SecretsManager" : { "privateKeyPath": "pkcs11:object=core-private-key-label;type=private" } }, "caPath" : "file:///path-to-root-ca"

L'objet crypto contient les propriétés suivantes :

Champ Description Remarques
caPath

Le chemin absolu vers l'autorité de certification AWS IoT racine.

Il doit s'agir URI d'un fichier du formulaire :file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Facultatif. Le chemin absolu vers le .so fichier Open SSL engine pour activer le support PKCS #11 sur OpenSSL.

Doit être un chemin d'accès à un fichier sur le système de fichiers.

Cette propriété est obligatoire si vous utilisez l'agent de OTA mise à jour Greengrass avec une sécurité matérielle. Pour de plus amples informations, veuillez consulter Configurer le support pour les over-the-air mises à jour.

P11Provider

Le chemin absolu vers la bibliothèque libdl-loadable de l'implémentation PKCS #11.

Doit être un chemin d'accès à un fichier sur le système de fichiers.

slotLabel

Étiquette d'emplacement qui est utilisée pour identifier le module matériel.

Doit être conforme aux spécifications de l'étiquette PKCS #11.

slotUserPin

L'utilisateur PIN utilisé pour authentifier le noyau de Greengrass auprès du module.

Vous devez disposer d'autorisations suffisantes pour exécuter C_Sign avec les clés privées configurées.

principals
IoTCertificate Certificat et clé privée que le noyau utilise pour effectuer des demandes à AWS IoT.
IoTCertificate  .privateKeyPath

Chemin d'accès à la clé privée principale.

Pour le stockage dans le système de fichiers, il doit s'agir URI d'un fichier au format :file:///absolute/path/to/file.

Pour le HSM stockage, il doit s'agir d'un chemin RFC7512 PKCS #11 qui spécifie l'étiquette de l'objet.

IoTCertificate  .certificatePath

Chemin d'accès absolu au certificat de votre noyau.

Il doit s'agir URI d'un fichier du formulaire :file:///absolute/path/to/file.

MQTTServerCertificate

Facultatif. La clé privée que le noyau utilise en combinaison avec le certificat pour agir en tant que MQTT serveur ou passerelle.

MQTTServerCertificate  .privateKeyPath

Le chemin d'accès à la clé privée MQTT du serveur local.

Utilisez cette valeur pour spécifier votre propre clé privée pour le MQTT serveur local.

Pour le stockage dans le système de fichiers, il doit s'agir URI d'un fichier au format :file:///absolute/path/to/file.

Pour le HSM stockage, il doit s'agir d'un chemin RFC7512 PKCS #11 qui spécifie l'étiquette de l'objet.

Si cette propriété est omise, fait AWS IoT Greengrass pivoter la clé en fonction de vos paramètres de rotation. Si cette propriété est spécifiée, le client est responsable de la rotation de la clé.

SecretsManager Clé privée qui sécurise la clé de données utilisée pour le chiffrement. Pour de plus amples informations, veuillez consulter Déployer des secrets sur AWS IoT Greengrass Core.
SecretsManager  .privateKeyPath

Chemin d'accès à la clé privée du Secrets Manager local.

Seule une RSA clé est prise en charge.

Pour le stockage dans le système de fichiers, il doit s'agir URI d'un fichier au format :file:///absolute/path/to/file.

Pour le HSM stockage, il doit s'agir d'un chemin RFC7512 PKCS #11 qui spécifie l'étiquette de l'objet. La clé privée doit être générée à l'aide du mécanisme de remplissage PKCS #1 v1.5.

Champ Description Remarques
caPath

Le chemin absolu vers l'autorité de certification AWS IoT racine.

Il doit s'agir URI d'un fichier du formulaire :file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Facultatif. Le chemin absolu vers le .so fichier Open SSL engine pour activer le support PKCS #11 sur OpenSSL.

Doit être un chemin d'accès à un fichier sur le système de fichiers.

Cette propriété est obligatoire si vous utilisez l'agent de OTA mise à jour Greengrass avec une sécurité matérielle. Pour de plus amples informations, veuillez consulter Configurer le support pour les over-the-air mises à jour.

P11Provider

Le chemin absolu vers la bibliothèque libdl-loadable de l'implémentation PKCS #11.

Doit être un chemin d'accès à un fichier sur le système de fichiers.

slotLabel

Étiquette d'emplacement qui est utilisée pour identifier le module matériel.

Doit être conforme aux spécifications de l'étiquette PKCS #11.

slotUserPin

L'utilisateur PIN utilisé pour authentifier le noyau de Greengrass auprès du module.

Vous devez disposer d'autorisations suffisantes pour exécuter C_Sign avec les clés privées configurées.

principals
IoTCertificate Certificat et clé privée que le noyau utilise pour effectuer des demandes à AWS IoT.
IoTCertificate  .privateKeyPath

Chemin d'accès à la clé privée principale.

Pour le stockage dans le système de fichiers, il doit s'agir URI d'un fichier au format :file:///absolute/path/to/file.

Pour le HSM stockage, il doit s'agir d'un chemin RFC7512 PKCS #11 qui spécifie l'étiquette de l'objet.

IoTCertificate  .certificatePath

Chemin d'accès absolu au certificat de votre noyau.

Il doit s'agir URI d'un fichier du formulaire :file:///absolute/path/to/file.

MQTTServerCertificate

Facultatif. La clé privée que le noyau utilise en combinaison avec le certificat pour agir en tant que MQTT serveur ou passerelle.

MQTTServerCertificate  .privateKeyPath

Le chemin d'accès à la clé privée MQTT du serveur local.

Utilisez cette valeur pour spécifier votre propre clé privée pour le MQTT serveur local.

Pour le stockage dans le système de fichiers, il doit s'agir URI d'un fichier au format :file:///absolute/path/to/file.

Pour le HSM stockage, il doit s'agir d'un chemin RFC7512 PKCS #11 qui spécifie l'étiquette de l'objet.

Si cette propriété est omise, fait AWS IoT Greengrass pivoter la clé en fonction de vos paramètres de rotation. Si cette propriété est spécifiée, le client est responsable de la rotation de la clé.

SecretsManager Clé privée qui sécurise la clé de données utilisée pour le chiffrement. Pour de plus amples informations, veuillez consulter Déployer des secrets sur AWS IoT Greengrass Core.
SecretsManager  .privateKeyPath

Chemin d'accès à la clé privée du Secrets Manager local.

Seule une RSA clé est prise en charge.

Pour le stockage dans le système de fichiers, il doit s'agir URI d'un fichier au format :file:///absolute/path/to/file.

Pour le HSM stockage, il doit s'agir d'un chemin RFC7512 PKCS #11 qui spécifie l'étiquette de l'objet. La clé privée doit être générée à l'aide du mécanisme de remplissage PKCS #1 v1.5.

Champ Description Remarques
caPath

Le chemin absolu vers l'autorité de certification AWS IoT racine.

Il doit s'agir URI d'un fichier du formulaire :file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Facultatif. Le chemin absolu vers le .so fichier Open SSL engine pour activer le support PKCS #11 sur OpenSSL.

Doit être un chemin d'accès à un fichier sur le système de fichiers.

Cette propriété est obligatoire si vous utilisez l'agent de OTA mise à jour Greengrass avec une sécurité matérielle. Pour de plus amples informations, veuillez consulter Configurer le support pour les over-the-air mises à jour.

P11Provider

Le chemin absolu vers la bibliothèque libdl-loadable de l'implémentation PKCS #11.

Doit être un chemin d'accès à un fichier sur le système de fichiers.

slotLabel

Étiquette d'emplacement qui est utilisée pour identifier le module matériel.

Doit être conforme aux spécifications de l'étiquette PKCS #11.

slotUserPin

L'utilisateur PIN utilisé pour authentifier le noyau de Greengrass auprès du module.

Vous devez disposer d'autorisations suffisantes pour exécuter C_Sign avec les clés privées configurées.

principals
IoTCertificate Certificat et clé privée que le noyau utilise pour effectuer des demandes à AWS IoT.
IoTCertificate  .privateKeyPath

Chemin d'accès à la clé privée principale.

Pour le stockage dans le système de fichiers, il doit s'agir URI d'un fichier au format :file:///absolute/path/to/file.

Pour le HSM stockage, il doit s'agir d'un chemin RFC7512 PKCS #11 qui spécifie l'étiquette de l'objet.

IoTCertificate  .certificatePath

Chemin d'accès absolu au certificat de votre noyau.

Il doit s'agir URI d'un fichier du formulaire :file:///absolute/path/to/file.

MQTTServerCertificate

Facultatif. La clé privée que le noyau utilise en combinaison avec le certificat pour agir en tant que MQTT serveur ou passerelle.

MQTTServerCertificate  .privateKeyPath

Le chemin d'accès à la clé privée MQTT du serveur local.

Utilisez cette valeur pour spécifier votre propre clé privée pour le MQTT serveur local.

Pour le stockage dans le système de fichiers, il doit s'agir URI d'un fichier au format :file:///absolute/path/to/file.

Pour le HSM stockage, il doit s'agir d'un chemin RFC7512 PKCS #11 qui spécifie l'étiquette de l'objet.

Si cette propriété est omise, fait AWS IoT Greengrass pivoter la clé en fonction de vos paramètres de rotation. Si cette propriété est spécifiée, le client est responsable de la rotation de la clé.

SecretsManager Clé privée qui sécurise la clé de données utilisée pour le chiffrement. Pour de plus amples informations, veuillez consulter Déployer des secrets sur AWS IoT Greengrass Core.
SecretsManager  .privateKeyPath

Chemin d'accès à la clé privée du Secrets Manager local.

Seule une RSA clé est prise en charge.

Pour le stockage dans le système de fichiers, il doit s'agir URI d'un fichier au format :file:///absolute/path/to/file.

Pour le HSM stockage, il doit s'agir d'un chemin RFC7512 PKCS #11 qui spécifie l'étiquette de l'objet. La clé privée doit être générée à l'aide du mécanisme de remplissage PKCS #1 v1.5.

Pratiques de provisionnement pour la sécurité AWS IoT Greengrass du matériel

Voici les pratiques de mise en service liées à la sécurité et aux performances.

Sécurité

Note

La pratique de rotation des clés ne s'applique pas lorsque des clés privées sont générées sur unHSM.

Performances

Le schéma suivant montre le composant client IoT et le MQTT serveur local sur le AWS IoT Greengrass cœur. Si vous souhaitez utiliser une HSM configuration pour les deux composants, vous pouvez utiliser la même clé privée ou des clés privées distinctes. Si vous utilisez des clés distinctes, elles doivent être stockées dans le même emplacement.

Note

AWS IoT Greengrass n'impose aucune limite au nombre de clés que vous stockez sur leHSM. Vous pouvez donc stocker des clés privées pour les composants du client, MQTT du serveur et du gestionnaire de secrets IoT. Cependant, certains HSM fournisseurs peuvent imposer des limites quant au nombre de clés que vous pouvez stocker dans un emplacement.

IoT client and MQTT server interacting with AWS IoT Greengrass Core and AWS IoT Core.

En général, la clé client IoT n'est pas utilisée très fréquemment car le logiciel AWS IoT Greengrass Core maintient des connexions de longue durée avec le cloud. Cependant, la clé MQTT du serveur est utilisée chaque fois qu'un appareil Greengrass se connecte au cœur. Ces interactions affectent directement les performances.

Lorsque la clé MQTT du serveur est stockée sur leHSM, la vitesse à laquelle les appareils peuvent se connecter dépend du nombre d'opérations de RSA signature par seconde qu'ils HSM peuvent effectuer. Par exemple, s'il HSM faut 300 millisecondes pour effectuer une signature RSASSA - PKCS1 -v1.5 sur une clé privée RSA -2048, alors seuls trois appareils peuvent se connecter au cœur de Greengrass par seconde. Une fois les connexions établies, le n'HSMest plus utilisé et les quotas standard AWS IoT Greengrass s'appliquent.

Pour atténuer les problèmes de performance, vous pouvez stocker la clé privée du MQTT serveur sur le système de fichiers plutôt que sur le. HSM Avec cette configuration, le MQTT serveur se comporte comme si la sécurité matérielle n'était pas activée.

AWS IoT Greengrass prend en charge plusieurs configurations de stockage de clés pour les composants MQTT du client et du serveur IoT, afin que vous puissiez les optimiser en fonction de vos exigences en matière de sécurité et de performances. Le tableau suivant présente des exemples de configurations.

Configuration Clé IoT MQTTclé Performance
HSMClé partagée HSM: Clé A HSM: Clé A Limité par le HSM ou CPU
HSMClés séparées HSM: Clé A HSM: Clé B Limité par le HSM ou CPU
HSMpour l'IoT uniquement HSM: Clé A Système de fichiers : clé B Limité par le CPU
Héritée Système de fichiers : clé A Système de fichiers : clé B Limité par le CPU

Pour configurer le noyau de Greengrass afin d'utiliser des clés basées sur le système de fichiers pour le MQTT serveur, omettez la principals.MQTTServerCertificate section config.json (ou spécifiez un chemin d'accès à la clé basé sur un fichier si vous n'utilisez pas la clé par défaut générée par). AWS IoT Greengrass L'objet crypto qui en résulte ressemble à ceci :

"crypto": { "PKCS11": { "OpenSSLEngine": "...", "P11Provider": "...", "slotLabel": "...", "slotUserPin": "..." }, "principals": { "IoTCertificate": { "privateKeyPath": "...", "certificatePath": "..." }, "SecretsManager": { "privateKeyPath": "..." } }, "caPath" : "..." }

Suites de chiffrement prises en charge pour l'intégration de sécurité matérielle

AWS IoT Greengrass prend en charge un ensemble de suites de chiffrement lorsque le cœur est configuré pour la sécurité matérielle. Il s'agit d'un sous-ensemble de suites de chiffrement qui sont prises en charge lorsque l’appareil principal (core) est configuré pour utiliser une sécurité basée sur les fichiers. Pour de plus amples informations, veuillez consulter Prise en charge des suites de chiffrement TLS.

Note

Lorsque vous vous connectez au cœur de Greengrass à partir d'appareils Greengrass via le réseau local, veillez à utiliser l'une des suites de chiffrement prises en charge pour établir la connexion. TLS

Configurer le support pour les over-the-air mises à jour

Pour activer over-the-air (OTA) les mises à jour du logiciel AWS IoT Greengrass Core lorsque vous utilisez la sécurité matérielle, vous devez installer la bibliothèque wrapper OpenSC PKCS libp11 #11 et modifier le fichier de configuration Greengrass. Pour plus d'informations sur les OTA mises à jour, consultezMises à jour OTA du logiciel AWS IoT Greengrass Core.

  1. Arrêtez le démon Greengrass.

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
    Note

    greengrass-root représente le chemin d'installation du logiciel AWS IoT Greengrass Core sur votre appareil. Généralement, il s'agit du répertoire /greengrass.

  2. Installez le SSL moteur Open. Open SSL 1.0 ou 1.1 sont pris en charge.

    sudo apt-get install libengine-pkcs11-openssl
  3. Trouvez le chemin d'accès au SSL moteur Open (libpkcs11.so) sur votre système :

    1. Obtenez la liste des packages installés de la bibliothèque.

      sudo dpkg -L libengine-pkcs11-openssl

      Le fichier libpkcs11.so est situé dans le répertoire engines.

    2. Copiez le chemin complet dans le fichier, par exemple, /usr/lib/ssl/engines/libpkcs11.so.

  4. Ouvrez le fichier de configuration Greengrass. Il s'agit du fichier config.json dans le répertoire /greengrass-root/config.

  5. Pour la propriété OpenSSLEngine, entrez le chemin d'accès au fichier libpkcs11.so.

    { "crypto": { "caPath" : "file:///path-to-root-ca", "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, ... } ... }
    Note

    Si la propriété OpenSSLEngine n'existe pas dans l'objet PKCS11, ajoutez-la.

  6. Démarrez le démon Greengrass.

    cd /greengrass-root/ggc/core/ sudo ./greengrassd start

Rétrocompatibilité avec les versions antérieures du logiciel AWS IoT Greengrass principal

Le logiciel AWS IoT Greengrass Core avec prise en charge de la sécurité matérielle est entièrement rétrocompatible avec config.json les fichiers générés pour les versions 1.6 et antérieures. Si l'cryptoobjet n'est pas présent dans le fichier config.json de configuration, il AWS IoT Greengrass utilise les coreThing.caPath propriétés coreThing.certPathcoreThing.keyPath, et basées sur des fichiers. Cette rétrocompatibilité s'applique aux OTA mises à jour de Greengrass, qui ne remplacent pas une configuration basée sur des fichiers spécifiée dans. config.json

Matériel sans support PKCS #11

La bibliothèque PKCS #11 est généralement fournie par le fournisseur du matériel ou est open source. Par exemple, avec du matériel conforme aux normes (tel que TPM1 .2), il peut être possible d'utiliser des logiciels open source existants. Toutefois, si votre matériel ne dispose pas d'une implémentation de bibliothèque PKCS #11 correspondante, ou si vous souhaitez créer un fournisseur PKCS #11 personnalisé, contactez votre représentant du Support aux AWS entreprises pour toute question relative à l'intégration.

Consultez aussi