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

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

Note

Cette fonctionnalité est disponible pour les versions 2.5.3 et ultérieures du composant Greengrass nucleus. AWS IoT Greengrassne prend actuellement pas en charge cette fonctionnalité sur les appareils Windows principaux.

Vous pouvez configurer le logiciel AWS IoT Greengrass Core pour utiliser un module de sécurité matériel (HSM) via l'interface PKCS #11. Cette fonctionnalité vous permet de stocker en toute sécurité la clé privée et le certificat de l'appareil afin qu'ils ne soient pas exposés ou dupliqués dans le logiciel. Vous pouvez stocker la clé privée et le certificat sur un module matériel tel qu'un HSM ou un module de plateforme sécurisée (TPM).

Le logiciel AWS IoT Greengrass Core utilise une clé privée et un certificat X.509 pour authentifier les connexions aux services AWS IoT etAWS IoT Greengrass. Le composant du gestionnaire de secrets utilise cette clé privée pour chiffrer et déchiffrer en toute sécurité les secrets que vous déployez sur un appareil principal de Greengrass. Lorsque vous configurez un périphérique principal pour utiliser un HSM, ces composants utilisent la clé privée et le certificat que vous stockez dans le HSM.

Le composant broker Moquette MQTT stocke également une clé privée pour son certificat de serveur MQTT local. Ce composant stocke la clé privée sur le système de fichiers de l'appareil dans le dossier de travail du composant. Actuellement, AWS IoT Greengrass ne prend pas en charge le stockage de cette clé privée ou de ce certificat dans un HSM.

Astuce

Recherchez les appareils compatibles avec cette fonctionnalité dans le catalogue d'appareils AWS partenaires.

Prérequis

Vous devez satisfaire aux exigences suivantes pour utiliser un HSM sur un appareil principal Greengrass :

  • Greengrass nucleus v2.5.3 ou version ultérieure installé sur le périphérique principal. Vous pouvez choisir une version compatible lorsque vous installez le logiciel AWS IoT Greengrass Core sur un appareil principal.

  • Le composant fournisseur PKCS #11 installé sur le périphérique principal. Vous pouvez télécharger et installer ce composant lorsque vous installez le logiciel AWS IoT Greengrass Core sur un appareil principal.

  • Module de sécurité matérielle qui prend en charge le schéma de signature PKCS #1 v1.5 et les clés RSA d'une taille de clé RSA-2048 (ou supérieure) ou les clés ECC.

    Note

    Pour utiliser un module de sécurité matériel avec des clés ECC, vous devez utiliser Greengrass nucleus v2.5.6 ou version ultérieure.

    Pour utiliser un module de sécurité matériel et un gestionnaire de secrets, vous devez utiliser un module de sécurité matériel avec des clés RSA.

  • Une bibliothèque de fournisseur PKCS #11 que le logiciel AWS IoT Greengrass Core peut charger au moment de l'exécution (à l'aide de libdl) pour appeler les fonctions PKCS #11. La bibliothèque du fournisseur PKCS #11 doit implémenter les opérations d'API PKCS #11 suivantes :

    • C_Initialize

    • C_Finalize

    • C_GetSlotList

    • C_GetSlotInfo

    • C_GetTokenInfo

    • C_OpenSession

    • C_GetSessionInfo

    • C_CloseSession

    • C_Login

    • C_Logout

    • C_GetAttributeValue

    • C_FindObjectsInit

    • C_FindObjects

    • C_FindObjectsFinal

    • C_DecryptInit

    • C_Decrypt

    • C_DecryptUpdate

    • C_DecryptFinal

    • C_SignInit

    • C_Sign

    • C_SignUpdate

    • C_SignFinal

    • C_GetMechanismList

    • C_GetMechanismInfo

    • C_GetInfo

    • C_GetFunctionList

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

  • Vous devez stocker la clé privée et le certificat dans le HSM dans le même emplacement, et ils doivent utiliser la même étiquette d'objet et le même ID d'objet, si le HSM prend en charge les ID d'objet.

  • Le certificat et la clé privée doivent pouvoir être résolus par des libellés d'objets.

  • La clé privée doit disposer des autorisations suivantes :

    • sign

    • decrypt

  • (Facultatif) Pour utiliser le composant secret manager, vous devez utiliser la version 2.1.0 ou ultérieure, et la clé privée doit disposer des autorisations suivantes :

    • unwrap

    • wrap

Bonnes pratiques en matière de sécurité matérielle

Tenez compte des meilleures pratiques suivantes lorsque vous configurez la sécurité matérielle sur les appareils principaux de Greengrass.

  • Générer des clés privées directement sur le HSM en utilisant le générateur de nombres aléatoires du matériel interne. Cette approche est plus sûre que l'importation d'une clé privée que vous générez ailleurs, car la clé privée reste dans le HSM.

  • Configurez les clés privées pour qu'elles soient immuables et interdisez l'exportation.

  • Utilisez l'outil de provisionnement recommandé par le fournisseur du matériel HSM pour générer une demande de signature de certificat (CSR) à l'aide de la clé privée protégée par le matériel, puis utilisez la AWS IoT console ou l'API pour générer un certificat client.

Note

Les bonnes pratiques de sécurité relatives à la rotation des clés ne s'appliquent pas lorsque vous générez des clés privées sur un HSM.

Installation du logiciel AWS IoT Greengrass Core avec sécurité matérielle

Lorsque vous installez le logiciel AWS IoT Greengrass Core, vous pouvez le configurer pour utiliser une clé privée que vous générez dans un HSM. Cette approche suit les meilleures pratiques de sécurité pour générer la clé privée dans le HSM, afin que la clé privée reste dans le HSM.

Pour installer le logiciel AWS IoT Greengrass Core avec sécurité matérielle, procédez comme suit :

  1. Générez une clé privée dans le HSM.

  2. Créez une demande de signature de certificat (CSR) à partir de la clé privée.

  3. Créez un certificat à partir du CSR. Vous pouvez créer un certificat signé par AWS IoT ou par une autre autorité de certification racine (CA). Pour plus d'informations sur l'utilisation d'une autre autorité de certification racine, voir Création de vos propres certificats clients dans le Guide du AWS IoT Core développeur.

  4. Téléchargez le AWS IoT certificat et importez-le dans le HSM.

  5. Installez le logiciel AWS IoT Greengrass Core à partir d'un fichier de configuration qui indique d'utiliser le composant fournisseur PKCS #11 ainsi que la clé privée et le certificat du HSM.

Vous pouvez choisir l'une des options d'installation suivantes pour installer le logiciel AWS IoT Greengrass Core en toute sécurité matérielle :

Actuellement, AWS IoT Greengrass ne prend pas en charge l'installation du logiciel AWS IoT Greengrass Core avec sécurité matérielle lorsque vous effectuez une installation avec le provisionnement automatique des ressources ou le provisionnement du AWS IoTparc.

Configuration de la sécurité matérielle sur un périphérique principal existant

Vous pouvez importer la clé privée et le certificat d'un périphérique principal dans un HSM pour configurer la sécurité matérielle.

Considérations
  • Vous devez disposer d'un accès root au système de fichiers de l'appareil principal.

  • Dans cette procédure, vous arrêtez le logiciel AWS IoT Greengrass principal, de sorte que le périphérique principal est hors ligne et indisponible pendant que vous configurez la sécurité matérielle.

Pour configurer la sécurité matérielle sur un périphérique principal existant, procédez comme suit :

  1. Initialisez le HSM.

  2. Déployez le composant fournisseur PKCS #11 sur le périphérique principal.

  3. Arrêtez le logiciel AWS IoT Greengrass Core.

  4. Importez la clé privée et le certificat de l'appareil principal dans le HSM.

  5. Mettez à jour le fichier de configuration du logiciel AWS IoT Greengrass Core pour utiliser la clé privée et le certificat du HSM.

  6. Démarrez le logiciel AWS IoT Greengrass Core.

Étape 1 : Initialisation du module de sécurité matérielle

Procédez comme suit pour initialiser le HSM sur votre appareil principal.

Pour initialiser le module de sécurité matérielle
  • Initialisez un jeton PKCS #11 dans le HSM et enregistrez l'ID de slot et le code PIN utilisateur associés au jeton. Consultez la documentation de votre HSM pour savoir comment initialiser un jeton. Vous utiliserez l'ID de slot et le code PIN de l'utilisateur ultérieurement lorsque vous déployez et configurez le composant fournisseur PKCS #11.

Étape 2 : Déployer le composant fournisseur PKCS #11

Procédez comme suit pour déployer et configurer le composant fournisseur PKCS #11. Vous pouvez déployer le composant sur un ou plusieurs appareils principaux.

  1. Dans le menu de navigation de la AWS IoT Greengrassconsole, sélectionnez Composants.

  2. Sur la page Composants, choisissez l'onglet Composants publics, puis sélectionnez aws.greengrass.crypto.Pkcs11Provider.

  3. Sur la page aws.greengrass.crypto.Pkcs11Provider, choisissez Deploy (Déployer).

  4. Dans Ajouter au déploiement, choisissez un déploiement existant à réviser ou choisissez de créer un nouveau déploiement, puis choisissez Suivant.

  5. Si vous avez choisi de créer un nouveau déploiement, choisissez le périphérique principal ou le groupe d'objets cible pour le déploiement. Sur la page Spécifier la cible, sous Cible de déploiement, choisissez un périphérique principal ou un groupe d'objets, puis cliquez sur Suivant.

  6. Sur la page Sélectionner les composants, sous Composants publics, sélectionnez aws.greengrass.crypto.Pkcs11Provider, puis cliquez sur Suivant.

  7. Sur la page Configurer les composants, sélectionnez aws.greengrass.crypto.Pkcs11Provider, puis effectuez les opérations suivantes :

    1. Choisissez Configure component (Configurer un composant).

    2. Dans le aws.greengrass.crypto.Pkcs11Provider mode Configurer, sous Mise à jour de la configuration, dans Configuration à fusionner, entrez la mise à jour de configuration suivante. Mettez à jour les paramètres de configuration suivants avec les valeurs des équipements principaux cibles. Spécifiez l'ID du slot et le code PIN de l'utilisateur dans lesquels vous avez initialisé le jeton PKCS #11 plus tôt. Vous importez la clé privée et le certificat dans cet emplacement du HSM ultérieurement.

      name

      Nom de la configuration PKCS #11.

      library

      Le chemin de fichier absolu vers la bibliothèque de l'implémentation PKCS #11 que le logiciel AWS IoT Greengrass Core peut charger avec libdl.

      slot

      L'ID du slot qui contient la clé privée et le certificat de l'appareil. Cette valeur est différente de l'index ou de l'étiquette de l'emplacement.

      userPin

      Le code PIN de l'utilisateur à utiliser pour accéder au slot.

      { "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
    3. Choisissez Confirmer pour fermer le modal, puis cliquez sur Suivant.

  8. Sur la page Configure advanced settings (Configurer les paramètres avancés), conservez les paramètres de configuration par défaut et choisissez Next (Suivant).

  9. Sur la page Review (Révision), choisissez Deploy (Déployer).

    Le déploiement peut prendre jusqu'à une minute.

Pour déployer le composant fournisseur PKCS #11, créez un document de déploiement incluant aws.greengrass.crypto.Pkcs11Provider l'componentsobjet et spécifiez la mise à jour de configuration pour le composant. Suivez les instructions Créer des déploiements pour créer un nouveau déploiement ou modifier un déploiement existant.

L'exemple de document de déploiement partiel suivant indique de déployer et de configurer le composant fournisseur PKCS #11. Mettez à jour les paramètres de configuration suivants avec les valeurs des équipements principaux cibles. Enregistrez l'ID du slot et le code PIN de l'utilisateur pour les utiliser ultérieurement lors de l'importation de la clé privée et du certificat dans le HSM.

name

Nom de la configuration PKCS #11.

library

Le chemin de fichier absolu vers la bibliothèque de l'implémentation PKCS #11 que le logiciel AWS IoT Greengrass Core peut charger avec libdl.

slot

L'ID du slot qui contient la clé privée et le certificat de l'appareil. Cette valeur est différente de l'index ou de l'étiquette de l'emplacement.

userPin

Le code PIN de l'utilisateur à utiliser pour accéder au slot.

{ "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
{ ..., "components": { ..., "aws.greengrass.crypto.Pkcs11Provider": { "componentVersion": "2.0.0", "configurationUpdate": { "merge": "{\"name\":\"softhsm_pkcs11\",\"library\":\"/usr/lib/softhsm/libsofthsm2.so\",\"slot\":1,\"userPin\":\"1234\"}" } } } }

L'exécution du déploiement peut prendre plusieurs minutes. Vous pouvez utiliser le AWS IoT Greengrass service pour vérifier l'état du déploiement. Vous pouvez consulter les journaux du logiciel AWS IoT Greengrass Core pour vérifier que le composant fournisseur PKCS #11 se déploie correctement. Pour plus d’informations, consultez les ressources suivantes :

Si le déploiement échoue, vous pouvez résoudre les problèmes de déploiement sur chaque appareil principal. Pour plus d’informations, consultez Résolution des problèmes AWS IoT Greengrass V2.

Étape 3 : mise à jour de la configuration sur le périphérique principal

Le logiciel AWS IoT Greengrass Core utilise un fichier de configuration qui indique le mode de fonctionnement de l'appareil. Ce fichier de configuration indique où trouver la clé privée et le certificat que l'appareil utilise pour se connecter auAWS Cloud. Procédez comme suit pour importer la clé privée et le certificat du périphérique principal dans le HSM et mettre à jour le fichier de configuration pour utiliser le HSM.

Pour mettre à jour la configuration sur le périphérique principal afin d'utiliser la sécurité matérielle
  1. Arrêtez le logiciel AWS IoT Greengrass Core. Si vous avez configuré le logiciel AWS IoT Greengrass Core en tant que service système avec systemd, vous pouvez exécuter la commande suivante pour arrêter le logiciel.

    sudo systemctl stop greengrass.service
  2. Trouvez la clé privée et les fichiers de certificat de l'appareil principal.

    • Si vous avez installé le logiciel AWS IoT Greengrass Core avec provisionnement automatique ou provisionnement de flotte, la clé privée existe à /greengrass/v2/privKey.key l'adresse et le certificat à l'adresse. /greengrass/v2/thingCert.crt

    • Si vous avez installé le logiciel AWS IoT Greengrass Core avec un provisionnement manuel, la clé privée existe /greengrass/v2/private.pem.key par défaut et le certificat existe /greengrass/v2/device.pem.crt par défaut.

    Vous pouvez également vérifier les system.certificateFilePath propriétés system.privateKeyPath et /greengrass/v2/config/effectiveConfig.yaml pour trouver l'emplacement de ces fichiers.

  3. Importez la clé privée et le certificat dans le HSM. Consultez la documentation de votre HSM pour savoir comment y importer des clés privées et des certificats. Importez la clé privée et le certificat à l'aide de l'ID du slot et du code PIN utilisateur sur lesquels vous avez initialisé le jeton PKCS #11 plus tôt. Vous devez utiliser le même libellé et le même identifiant d'objet pour la clé privée et le même certificat. Enregistrez l'étiquette d'objet que vous spécifiez lors de l'importation de chaque fichier. Vous utiliserez cette étiquette ultérieurement lorsque vous mettrez à jour la configuration logicielle AWS IoT Greengrass principale pour utiliser la clé privée et le certificat du HSM.

  4. Mettez à jour la configuration AWS IoT Greengrass principale pour utiliser la clé privée et le certificat dans le HSM. Pour mettre à jour la configuration, vous devez modifier le fichier de configuration AWS IoT Greengrass Core et exécuter le logiciel AWS IoT Greengrass Core avec le fichier de configuration mis à jour pour appliquer la nouvelle configuration.

    Procédez comme suit :

    1. Créez une sauvegarde du fichier de configuration AWS IoT Greengrass Core. Vous pouvez utiliser cette sauvegarde pour restaurer le périphérique principal si vous rencontrez des problèmes lors de la configuration de la sécurité matérielle.

      sudo cp /greengrass/v2/config/effectiveConfig.yaml ~/ggc-config-backup.yaml
    2. Ouvrez le fichier de configuration AWS IoT Greengrass Core dans un éditeur de texte. Par exemple, vous pouvez exécuter la commande suivante pour utiliser GNU nano pour modifier le fichier. Remplacez /greengrass/v2 par le chemin d'accès au dossier racine de Greengrass.

      sudo nano /greengrass/v2/config/effectiveConfig.yaml
    3. Remplacez la valeur de system.privateKeyPath par l'URI PKCS #11 pour la clé privée dans le HSM. Remplacez iotdevicekey par le libellé de l'objet dans lequel vous avez importé la clé privée et le certificat précédemment.

      pkcs11:object=iotdevicekey;type=private
    4. Remplacez la valeur de system.certificateFilePath par l'URI PKCS #11 pour le certificat dans le HSM. Remplacez iotdevicekey par le libellé de l'objet dans lequel vous avez importé la clé privée et le certificat précédemment.

      pkcs11:object=iotdevicekey;type=cert

    Une fois ces étapes terminées, la system propriété du fichier de configuration AWS IoT Greengrass Core devrait ressembler à celle de l'exemple suivant.

    system: certificateFilePath: "pkcs11:object=iotdevicekey;type=cert" privateKeyPath: "pkcs11:object=iotdevicekey;type=private" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "MyGreengrassCore"
  5. Appliquez la configuration dans le effectiveConfig.yaml fichier mis à jour. Exécutez Greengrass.jar avec le --init-config paramètre pour appliquer la configuration danseffectiveConfig.yaml. Remplacez /greengrass/v2 par le chemin d'accès au dossier racine de Greengrass.

    sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config /greengrass/v2/config/effectiveConfig.yaml
  6. Démarrez le logiciel AWS IoT Greengrass Core. Si vous avez configuré le logiciel AWS IoT Greengrass Core en tant que service système avec systemd, vous pouvez exécuter la commande suivante pour démarrer le logiciel.

    sudo systemctl start greengrass.service

    Pour plus d’informations, consultez Exécutez le logiciel AWS IoT Greengrass Core.

  7. Consultez les journaux du logiciel AWS IoT Greengrass Core pour vérifier que le logiciel démarre et se connecte auAWS Cloud. Le logiciel AWS IoT Greengrass Core utilise la clé privée et le certificat pour se connecter aux AWS IoT Greengrass services AWS IoT et.

    sudo tail -f /greengrass/v2/logs/greengrass.log

    Les messages du journal au niveau des informations suivants indiquent que le logiciel AWS IoT Greengrass Core se connecte correctement aux services AWS IoT etAWS IoT Greengrass.

    2021-12-06T22:47:53.702Z [INFO] (Thread-3) com.aws.greengrass.mqttclient.AwsIotMqttClient: Successfully connected to AWS IoT Core. {clientId=MyGreengrassCore5, sessionPresent=false}
  8. (Facultatif) Après avoir vérifié que le logiciel AWS IoT Greengrass Core fonctionne avec la clé privée et le certificat du HSM, supprimez les fichiers de clé privée et de certificat du système de fichiers de l'appareil. Exécutez la commande suivante et remplacez les chemins de fichiers par les chemins d'accès aux fichiers de clé privée et de certificat.

    sudo rm /greengrass/v2/privKey.key sudo rm /greengrass/v2/thingCert.crt

Utiliser du matériel sans support PKCS #11

La bibliothèque PKCS # 11 est généralement fournie par le fournisseur de matériel ou est en open source. Par exemple, avec du matériel compatible avec les normes (comme TPM1.2), il pourrait être possible d'utiliser un logiciel open source existant. 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 Amazon Web Services Enterprise pour toute question relative à l'intégration.

Consultez aussi