Tutoriel : Sécuriser AWS IoT Greengrass avec le module TPM (Trusted Platform Module) - 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.

Tutoriel : Sécuriser AWS IoT Greengrass avec le module TPM (Trusted Platform Module)

Note

Le mécanisme décrit dans ce didacticiel n'est pris en charge qu'avecInstallation AWS IoT Greengrass du logiciel Core avec provisionnement manuel des ressources.

Ce didacticiel contient des instructions sur l'utilisation de la TPM2 puce en tant que module de sécurité matériel (HSM) pour créer une clé privée et un CSR. Ce à quoi on a l'habitudeCréez le certificat d'objet.

Ce didacticiel explique comment améliorer la sécurité des appareils en configurant le logiciel AWS IoT Greengrass principal avec un module TPM (Trusted Platform Module) à l'aide de l'interface PKCS #11. Cette intégration du TPM garantit que les clés privées et les certificats utilisés pour l'identité de l'appareil et la connexion à celui-ci AWS IoT Core sont stockés en toute sécurité dans un matériel inviolable, empêchant ainsi toute extraction à des fins d'usurpation d'identité ou d'autres activités malveillantes.

Lorsque vous aurez terminé cette intégration, votre appareil principal Greengrass utilisera des clés privées protégées par le TPM pour son identité et sa communication avec les services. AWS IoT

Pour plus d'informations sur la sécurité des appareils Greengrass, consultez. Sécurité dans AWS IoT Greengrass

Prérequis

Pour suivre ce didacticiel, vous aurez besoin des éléments suivants :

  • Un appareil compatible Linux doté du matériel TPM 2.0 ou du microprogramme TPM 2.0.

  • Les instructions de ce didacticiel sont définies pour Ubuntu 24.04 LTS.

  • Une machine de développement AWS CLI installée et configurée avec les autorisations nécessaires pour :

    • Création et gestion AWS IoT des ressources

    • Création et gestion des rôles et des politiques IAM

  • Java Runtime Environment (JRE) version 8 ou ultérieure installée sur votre appareil.

  • Les packages logiciels suivants sont installés sur votre appareil :

    • curl

    • jg

  • Privilèges root ou sudo sur l'appareil.

Étape 1 : Installation TPM2 des outils et des dépendances

Au cours de cette étape, vous devez installer les outils TPM2 logiciels et les bibliothèques nécessaires.

  1. Mettez à jour votre gestionnaire de packages et installez les TPM2 outils et les dépendances en exécutant la commande suivante.

    sudo apt-get update && sudo apt-get install tpm2-tools \ tpm2-abrmd \ tpm2-tss-engine-tools \ gnutls-bin \ libtpm2-pkcs11-1 \ libtpm2-pkcs11-tools \ libtpm2-pkcs11-1-dev \ python3-tpm2-pkcs11-tools \ libengine-pkcs11-openssl \ libtss2-tcti-tabrmd0
  2. Installez les packages du fournisseur TPM2 OpenSSL sur Ubuntu 24.04 qui utilisent le moteur OpenSSL 3.

    sudo apt-get install tpm2-openssl

Étape 2 : Initialisation du magasin PKCS #11 et création d'un emplacement

  1. Créez un répertoire pour stocker les données.

    sudo mkdir -p /etc/tpm2_pkcs11
  2. Définissez l'emplacement de stockage en tant que variable d'environnement. Pour plus d'informations sur la hiérarchie des magasins, consultez Initialisation.

    export TPM2_PKCS11_STORE=/etc/tpm2_store
  3. Initialisez le TPM2 jeton avec l'objet principal.

    sudo tpm2_ptool init

    Les options disponibles sont les suivantes :

    hierarchy-auth HIERARCHY_AUTH

    Le mot de passe d'autorisation pour ajouter un objet principal à la hiérarchie.

    primary-auth PRIMARY_AUTH

    Valeur d'autorisation pour l'objet clé primaire existant.

    La valeur par défaut est une valeur d'authentification vide.

    primary-handle [PRIMARY_HANDLE]

    Utilisez un objet clé primaire existant.

    Par défaut : 0x81000001

    transient-parents

    Utilisez un objet principal transitoire d'un modèle donné.

    Valeurs :tpm2-tools-default,tpm2-tools-ecc-default, tss2-engine-key

    path PATH

    Emplacement du répertoire de la boutique. S'il est spécifié, le répertoire doit exister. S'il n'est pas spécifié, il effectue une recherche en examinant la variable d'environnementTPM2_PKCS11_STORE. Si cette variable d'environnement n'est pas définie, elle sera examinée/etc/tpm2_pkcs11. Si ce répertoire n'est pas trouvé ou ne peut pas être créé, il s'agit par défaut du répertoire de travail actuel.

Étape 3 : Création d'un jeton et d'une clé

  1. Créez un jeton PKCS #11.

    sudo tpm2_ptool addtoken —pid=1 —userpin=USERPIN —sopin=SOPIN —label=greengrass

    Les options disponibles sont les suivantes :

    --pid PID

    L'identifiant d'objet principal à associer à ce jeton.

    --sopin SOPIN

    Le code PIN de l'administrateur. Cette épingle est utilisée pour la restauration d'objets.

    --userpin USERPIN

    Le code PIN de l'utilisateur. Ce code PIN est utilisé pour l'authentification lors de l'utilisation d'objets.

    --label LABEL

    Une étiquette unique permettant d'identifier le profil utilisé doit être unique.

    --hierarchy-auth HIERARCHY_AUTH

  2. Créez un objet clé ECC.

    sudo tpm2_ptool addkey —algorithm=ecc256 —label=greengrass —userpin=****** —key-label=greenkey
    --label LABEL

    L'étiquette des jetons permet également d'importer la clé.

    --key-label KEY_LABEL

    L'étiquette de la clé importée. La valeur par défaut est un entier.

    --id ID

    L'identifiant de la clé. La valeur par défaut est un hexadécimal aléatoire de 8 octets.

    --attr-always-authenticate

    Définit l'attribut CKA_ALWAYS_AUTHENTICATE sur CK_TRUE.

    --hierarchy-auth HIERARCHY_AUTH

    Le hierarchyauth, obligatoire pour les objets transitoires.

    --sopin SOPIN

    Le code PIN de l'administrateur.

    --userpin USERPIN

    Le code PIN de l'utilisateur.

    --algorithm

    {rsa1024, rsa2048, rsa3072, rsa4096, aes128, aes256, ecc224, ecc256, ecc384, ecc521, hmac : sha1, hmac : sha256, hmac : sha384, hmac : sha512}

    Type de clé.

  3. Exportez l'objet TPM2 -TSS depuis le jeton pour capturer les données d'authentification.

    yaml_ecc0=$(sudo tpm2_ptool export —label="greengrass" —key-label="greenkey" —userpin="******")

    Exemple de sortie :

    > echo $yaml_ecc0 object-auth: 706c1cad8a5238871b30149705255926 primary-object: auth: '' hierarchy: owner is_transient: false
    Note

    Vous trouverez également un fichier nommé « greenkey.pem` qui est la clé TSS2 privée dans le répertoire où vous avez exécuté cette commande. Utilisez-le pour générer le CSR avec le fournisseur openssl tpm2. Le fichier TSS2 PRIVATE KEY est protégé par le TPM et ne peut pas être utilisé sur un autre ordinateur. Pour plus d'informations sur TSS2 les clés avec OpenSSL, consultez Stockage de la clé privée ou publique.

  4. Capturez les données d'authentification pour la clé privée TSS.

    auth_ecc0=$(echo "$yaml_ecc0" | grep "object-auth" | cut -d' ' -f2-)

Étape 4 : générer une demande de signature de certificat (CSR)

Au cours de cette étape, vous allez utiliser la clé privée TPM2 protégée pour générer un CSR.

  1. Générez un CSR à l'aide du TPM2 fournisseur.

    sudo openssl req -new -provider tpm2 -provider base -key greenkey.pem -passin "pass:$auth_ecc0" -out "$H"$HOSTNAME".csr

    Lorsque vous y êtes invité, fournissez les informations requises pour votre CSR, notamment :

    • Nom du pays (code à 2 lettres)

    • Nom de l’état ou de la province

    • Nom de la localité

    • Nom de l’organisation

    • Nom de l’unité d’organisation

    • Nom commun

    • Adresse e-mail

    Vous pouvez également fournir un fichier de configuration OpenSSL pour une génération sans assistance. Pour plus d'informations, consultez la documentation OpenSSL.

  2. Si vous ne générez pas le CSR sur la même machine, copiez le CSR généré sur un ordinateur sur lequel les AWS informations d'identification sont configurées.

Étape 5 : Création du certificat d'objet

Créez un certificat d' AWS IoT objet. Pour plus d'informations sur la création d'un certificat d'objet, consultezCréez le certificat d'objet.

Étape 6 : Importer un certificat d'objet dans le TPM

  1. Copiez le certificat d'objet sur l'appareil.

  2. Ajoutez le certificat d'objet au jeton Greengrass.

    sudo tpm2_ptool addcert --label=greengrass --key-label=greenkey device.pem.crt

    Les options disponibles sont les suivantes :

    --help

    Afficher ce message d'aide et quitter.

    --label LABEL

    L'étiquette de profil à supprimer.

    --key-label KEY_LABEL

    L'étiquette de clé privée associée.

    --key-id KEY_ID

    L'identifiant de clé privée associé est en hexadécimal.

    cert

    Le certificat PEM x509 à ajouter.

Étape 7 : Capture de l'URL de l'objet PKCS #11

Nous utiliserons les informations p11tool fournies par le gnutls-bin package pour obtenir l'URL et l'objet URLs du jeton PKCS #11.

  1. Capturez l'URL du jeton Greengrass.

    TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
  2. Obtenez l'objet URLs pour le jeton Greengrass. Utilisez le même code PIN que celui utilisé à l'étape 3.

    sudo p11tool --login --list-all "${TOKEN}"

    Exemple de sortie :

    Token 'greengrass' with URL 'pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass' requires user PIN Enter PIN: WARNING: Needed CKA_VALUE but didn't find encrypted blob Object 0: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=private Type: Private key (EC/ECDSA-SECP256R1) Label: greenkey Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 Object 1: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=public Type: Public key (EC/ECDSA-SECP256R1) Label: greenkey ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 Object 2: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=cert Type: X.509 Certificate (EC/ECDSA-SECP256R1) Expires: Fri Dec 31 18:59:59 2049 Label: greenkey ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31
  3. Capturez l'URL de l'objet pour la clé privée et le certificat.

Étape 8 : Configuration et installation de Greengrass avec assistance TPM2

  1. Configurez le certificat d'objet. Pour plus d'informations, voir Configurer le certificat d'objet.

  2. Suivez les instructions pour installer le logiciel AWS IoT Greengrass principal avec la clé privée et le certificat dans un port HSM. Installation du logiciel AWS IoT Greengrass Core Suivez ensuite les étapes suivantes pour configurer votre installation afin de tirer parti TPM2 de l'interface PKCS #11.

  3. Vérifiez que le composant du fournisseur PKCS #11 a été téléchargé et enregistré dans l'emplacement de votre programme d'installation de Greengrass.

  4. Utilisez un éditeur de texte pour créer un fichier de configuration nommé config.yaml à fournir au programme d'installation. Par exemple, sur un système basé sur Linux, vous pouvez exécuter la commande suivante pour utiliser GNU nano pour créer le fichier.

    nano GreengrassInstaller/config.yaml
  5. Copiez le contenu YAML suivant dans le fichier. Ce fichier de configuration partiel spécifie les paramètres système, les paramètres du noyau Greengrass et les paramètres du fournisseur PKCS #11.

    --- system: certificateFilePath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=cert" privateKeyPath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=private" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" rootpath: "/greengrass/v2" thingName: "myThing" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "2.14.0" configuration: awsRegion: "us-east-1" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com" iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com" aws.greengrass.crypto.Pkcs11Provider: configuration: name: "tpm2_pkcs11" library: "/usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so" slot: 1 userPin: "123456"
  6. Modifiez le fichier avec les paramètres spécifiques à votre installation.

    1. Mettez à jour certificateFilePath et privateKeyPath avec la mise à jour certificateFilePath et privateKeyPath avec l'URL PKCS #11 capturée à l'étape 7.

    2. Mettez à jour votre iotDataEndpoint annonce en iotCredEndpoint fonction de votre AWS IoT point de terminaison.

    3. Dans la aws.greengrass.crypto.Pkcs11Provider configuration, mettez à jour la bibliothèque en fonction de votre plateforme.

      Note

      L'exemple présenté concerne X86_64. Le chemin du fichier sera similaire pour l' ARM64appareil.

  7. Effectuez les étapes d'installation de Greengrass dans. Installation du logiciel AWS IoT Greengrass Core

Étape 9 : vérifier l'installation

Au cours de cette étape, vous allez vérifier que Greengrass fonctionne correctement grâce TPM2 à l'intégration.

  1. Vérifiez l'état du service Greengrass.

    sudo systemctl status greengrass.service
  2. Consultez les journaux de Greengrass pour vous assurer qu'il n'y a aucune erreur.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  3. Vérifiez que votre appareil apparaît comme étant connecté dans la AWS IoT console.

    1. Connectez-vous à la console AWS IoT Greengrass.

    2. Sous Gérer, développez les appareils Greengrass et choisissez les appareils Core.

    3. Vérifiez que votre appareil est connecté. L'état de l'appareil indiquera HEALTHY s'il est connecté. Pour de plus amples informations, veuillez consulter Vérifiez l'état de l'appareil Greengrass Core.

Résolution des problèmes

Si vous rencontrez des problèmes lors de la configuration ou du fonctionnement de votre appareil Greengrass TPM2 compatible, essayez les étapes de dépannage suivantes.

  • Consultez le fichier journal principal de Greengrass.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  • Vérifiez la configuration du fournisseur PKCS #11.

    sudo cat /greengrass/v2/config/effectiveConfig.yaml
  • Assurez-vous que le TPM2 service fonctionne.

    sudo systemctl status tpm2-abrmd.service
  • Vérifiez que la TPM2 clé est accessible.

    sudo pkcs11-tool —module /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so -l -p 123456 —list-objects
  • Si votre système d'exploitation est configuré avec un chiffrement complet du disque avec des clés racine de TPM2 stockage telles que Clevis ou systemd-cryptenroll, vérifiez que vous n'utilisez pas le même identifiant persistant que celui utilisé par ces outils. L'utilisation du même identifiant persistant peut affecter le mécanisme de chiffrement de votre disque. Pour vérifier tous les descripteurs persistants créés et utilisés, exécutez la commande suivante

    sudo tpm2_getcap handles-persistent

Étapes suivantes

Maintenant que vous avez intégré avec succès votre appareil principal Greengrass à TPM2, vous pouvez :

Pour plus d'informations sur la sécurité des appareils Greengrass, consultez. Sécurité dans AWS IoT Greengrass