Tutorial: Sicher AWS IoT Greengrass mit Trusted Platform Module (TPM) - AWS IoT Greengrass

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Sicher AWS IoT Greengrass mit Trusted Platform Module (TPM)

Anmerkung

Der Mechanismus in diesem Tutorial wird nur mit unterstützt. Installieren Sie die AWS IoT Greengrass Core-Software mit manueller Ressourcenbereitstellung

Dieses Tutorial enthält Anweisungen zur Verwendung des TPM2 Chips als Hardware-Sicherheitsmodul (HSM) zur Erstellung eines privaten Schlüssels und einer CSR. Welches ist es gewohnt. Erstellen Sie das Ding-Zertifikat

In diesem Tutorial erfahren Sie, wie Sie die Gerätesicherheit verbessern können, indem Sie die AWS IoT Greengrass Core-Software mit einem Trusted Platform Module (TPM) über die PKCS #11 -Schnittstelle konfigurieren. Diese TPM-Integration stellt sicher, dass private Schlüssel und Zertifikate, die für die Geräteidentität und die Verbindung verwendet werden, sicher auf AWS IoT Core manipulationssicherer Hardware gespeichert werden, sodass eine Entnahme aufgrund von Identitätsmissbrauch oder anderen böswilligen Aktivitäten verhindert wird.

Wenn Sie diese Integration abgeschlossen haben, verwendet Ihr Greengrass-Core-Gerät TPM-geschützte private Schlüssel für seine Identität und Kommunikation mit Diensten. AWS IoT

Weitere Informationen zur Sicherheit auf Greengrass-Geräten finden Sie unterSicherheit in AWS IoT Greengrass.

Voraussetzungen

Zum Durcharbeiten dieses Tutorials ist Folgendes erforderlich:

  • Ein Linux-kompatibles Gerät mit TPM 2.0-Hardware oder Firmware TPM 2.0.

  • Die Anweisungen in diesem Tutorial sind für Ubuntu 24.04 LTS definiert.

  • Ein Entwicklercomputer, der AWS CLI installiert und konfiguriert ist und über folgende Berechtigungen verfügt:

    • AWS IoT Ressourcen erstellen und verwalten

    • Erstellen und verwalten Sie IAM-Rollen und -Richtlinien

  • Java Runtime Environment (JRE) Version 8 oder höher ist auf Ihrem Gerät installiert.

  • Die folgenden Softwarepakete sind auf Ihrem Gerät installiert:

    • curl

    • jg

  • Root- oder Sudo-Rechte auf dem Gerät.

Schritt 1: Installieren Sie TPM2 Tools und Abhängigkeiten

In diesem Schritt installieren Sie die erforderlichen TPM2 Softwaretools und Bibliotheken.

  1. Aktualisieren Sie Ihren Paketmanager und installieren Sie die TPM2 Tools und Abhängigkeiten, indem Sie den folgenden Befehl ausführen.

    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. Installieren Sie die TPM2 OpenSSL-Provider-Pakete auf Ubuntu 24.04, die OpenSSL Engine 3 verwenden.

    sudo apt-get install tpm2-openssl

Schritt 2: Initialisieren Sie den PKCS #11 -Speicher und erstellen Sie einen Slot

  1. Erstellen Sie ein Verzeichnis zum Speichern von Daten.

    sudo mkdir -p /etc/tpm2_pkcs11
  2. Legen Sie den Speicherort als Umgebungsvariable fest. Weitere Informationen zur Speicherhierarchie finden Sie unter Initialisierung.

    export TPM2_PKCS11_STORE=/etc/tpm2_store
  3. Initialisieren Sie das TPM2 Token mit dem primären Objekt.

    sudo tpm2_ptool init

    Die verfügbaren Optionen sind die folgenden:

    hierarchy-auth HIERARCHY_AUTH

    Das Autorisierungskennwort für das Hinzufügen eines primären Objekts zur Hierarchie.

    primary-auth PRIMARY_AUTH

    Autorisierungswert für ein vorhandenes Primärschlüsselobjekt.

    Der Standardwert ist ein leerer Authentifizierungswert.

    primary-handle [PRIMARY_HANDLE]

    Verwenden Sie ein vorhandenes Primärschlüsselobjekt.

    Standard: 0x81000001

    transient-parents

    Verwenden Sie ein transientes Primärobjekt einer bestimmten Vorlage.

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

    path PATH

    Der Speicherort des Speicherverzeichnisses. Falls angegeben, muss das Verzeichnis existieren. Wenn nicht angegeben, führt es eine Suche durch, indem es die Umgebungsvariable betrachtetTPM2_PKCS11_STORE. Wenn diese Umgebungsvariable nicht gesetzt ist, sucht sie nach/etc/tpm2_pkcs11. Wenn dieses Verzeichnis nicht gefunden wird oder nicht erstellt werden kann, wird standardmäßig das aktuelle Arbeitsverzeichnis verwendet.

Schritt 3: Erstellen Sie ein Token und einen Schlüssel

  1. Erstellen Sie ein PKCS #11 -Token.

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

    Die verfügbaren Optionen sind die folgenden:

    --pid PID

    Die primäre Objekt-ID, die mit diesem Token verknüpft werden soll.

    --sopin SOPIN

    Die Administrator-PIN. Diese PIN wird für die Objektwiederherstellung verwendet.

    --userpin USERPIN

    Die Benutzer-PIN. Diese PIN wird zur Authentifizierung für die Verwendung von Objekten verwendet.

    --label LABEL

    Ein eindeutiges Etikett zur Identifizierung des verwendeten Profils muss eindeutig sein.

    --hierarchy-auth HIERARCHY_AUTH

  2. Erstellen Sie ein ECC-Schlüsselobjekt.

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

    Das Token-Label, um auch den Schlüssel zu importieren.

    --key-label KEY_LABEL

    Die Bezeichnung des importierten Schlüssels. Der Standardwert ist ein ganzzahliger Wert.

    --id ID

    Die Schlüssel-ID. Der Standardwert ist eine zufällige Hexadezimalzahl von 8 Byte.

    --attr-always-authenticate

    Setzt das CKA_ALWAYS_AUTHENTICATE-Attribut auf CK_TRUE.

    --hierarchy-auth HIERARCHY_AUTH

    Die Hierarchyauth, die für transiente Objekte erforderlich ist.

    --sopin SOPIN

    Die Administrator-PIN.

    --userpin USERPIN

    Die Benutzer-PIN.

    --algorithm

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

    Der Typ des Schlüssels.

  3. Exportieren Sie das TPM2 -TSS-Objekt aus dem Token, um die Authentifizierungsdaten zu erfassen.

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

    Beispielausgabe:

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

    Sie finden auch eine Datei mit dem Namen `greenkey.pem`, bei der es sich um den TSS2 privaten Schlüssel handelt, in dem Verzeichnis, in dem Sie diesen Befehl ausgeführt haben. Verwenden Sie dies, um die CSR mit dem tpm2 openssl Provider zu generieren. Die TSS2 PRIVATE KEY-Datei ist durch das TPM geschützt und kann nicht auf einem anderen Computer verwendet werden. Weitere Informationen zu TSS2 Schlüsseln mit OpenSSL finden Sie unter Speichern des privaten oder öffentlichen Schlüssels.

  4. Erfassen Sie die Authentifizierungsdaten für den privaten TSS-Schlüssel.

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

Schritt 4: Generieren Sie eine Zertifikatsignieranforderung (CSR)

In diesem Schritt verwenden Sie den TPM2 -geschützten privaten Schlüssel, um eine CSR zu generieren.

  1. Generieren Sie mithilfe des Anbieters eine CSR. TPM2

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

    Wenn Sie dazu aufgefordert werden, geben Sie die erforderlichen Informationen für Ihre CSR ein, einschließlich:

    • Name des Landes (2-Buchstaben-Code)

    • State or Province Name

    • Ortsname

    • Name der Organisation

    • Organizational Unit Name

    • Common Name

    • Email Address

    Alternativ können Sie eine OpenSSL-Konfigurationsdatei für die unbeaufsichtigte Generierung bereitstellen. Weitere Informationen finden Sie in der OpenSSL-Dokumentation.

  2. Wenn Sie die CSR nicht auf demselben Computer generieren, kopieren Sie die generierte CSR auf einen Computer, für den Anmeldeinformationen konfiguriert sind. AWS

Schritt 5: Erstellen Sie das Ding-Zertifikat

Erstellen Sie ein AWS IoT Ding-Zertifikat. Weitere Informationen zum Erstellen eines Ding-Zertifikats finden Sie unterErstellen Sie das Ding-Zertifikat.

Schritt 6: Importieren Sie das Ding-Zertifikat in TPM

  1. Kopieren Sie das Ding-Zertifikat auf das Gerät.

  2. Fügen Sie das Ding-Zertifikat dem Greengrass-Token hinzu.

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

    Die verfügbaren Optionen sind die folgenden:

    --help

    Diese Hilfemeldung anzeigen und beenden.

    --label LABEL

    Das zu entfernende Profillabel.

    --key-label KEY_LABEL

    Die zugehörige Bezeichnung für den privaten Schlüssel.

    --key-id KEY_ID

    Die zugehörige private Schlüssel-ID im Hexadezimalformat.

    cert

    Das x509-PEM-Zertifikat, das hinzugefügt werden soll.

Schritt 7: Erfassen Sie die PKCS #11 -Objekt-URL

Wir werden die aus dem gnutls-bin Paket p11tool bereitgestellten Daten verwenden, um die PKCS #11 -Token-URL und das Objekt abzurufen. URLs

  1. Erfassen Sie die Token-URL für das Greengrass-Token.

    TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
  2. Ruft das Objekt URLs für das Greengrass-Token ab. Verwenden Sie dieselbe PIN, die Sie in Schritt 3 verwendet haben.

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

    Beispielausgabe:

    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. Erfassen Sie die Objekt-URL für den privaten Schlüssel und das Zertifikat.

Schritt 8: Greengrass mit TPM2 Support konfigurieren und installieren

  1. Konfigurieren Sie das Ding-Zertifikat. Weitere Informationen finden Sie unter Das Ding-Zertifikat konfigurieren.

  2. Folgen Sie den Anweisungen zur Installation der AWS IoT Greengrass Core-Software mit dem privaten Schlüssel und dem Zertifikat in einem HSM inInstallieren Sie die Core-Software AWS IoT Greengrass. Gehen Sie dann wie folgt vor, um Ihre Installation so zu konfigurieren, dass sie TPM2 über die PKCS #11 -Schnittstelle genutzt werden kann.

  3. Stellen Sie sicher, dass Sie die PKCS #11 -Provider-Komponente heruntergeladen und in Ihrem Greengrass-Installationsverzeichnis gespeichert haben.

  4. Verwenden Sie einen Texteditor, um eine Konfigurationsdatei mit dem Namen zu erstellen, die dem Installationsprogramm config.yaml zur Verfügung gestellt werden soll. Auf einem Linux-basierten System können Sie beispielsweise den folgenden Befehl ausführen, um die Datei mit GNU nano zu erstellen.

    nano GreengrassInstaller/config.yaml
  5. Kopieren Sie den folgenden YAML-Inhalt in die Datei. Diese Teilkonfigurationsdatei spezifiziert Systemparameter, Greengrass-Nukleus-Parameter und PKCS #11 -Anbieterparameter.

    --- 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. Bearbeiten Sie die Datei mit den für Ihre Installation spezifischen Parametern.

    1. Aktualisieren Sie certificateFilePath und privateKeyPath mit dem Update certificateFilePath und privateKeyPath mit der in Schritt 7 erfassten PKCS #11 -URL.

    2. Aktualisieren Sie Ihr iotDataEndpoint und iotCredEndpoint basierend auf Ihrem AWS IoT Endpunkt.

    3. Aktualisieren Sie in der aws.greengrass.crypto.Pkcs11Provider Konfiguration die Bibliothek basierend auf Ihrer Plattform.

      Anmerkung

      Das gezeigte Beispiel bezieht sich auf X86_64. Der Dateipfad wird für das Gerät ähnlich sein. ARM64

  7. Schließen Sie die Greengrass-Installationsschritte unter ab. Installieren Sie die Core-Software AWS IoT Greengrass

Schritt 9: Überprüfen Sie die Installation

In diesem Schritt überprüfen Sie, ob Greengrass mit der TPM2 Integration ordnungsgemäß ausgeführt wird.

  1. Überprüfen Sie den Greengrass-Servicestatus.

    sudo systemctl status greengrass.service
  2. Sehen Sie sich die Greengrass-Protokolle an, um sicherzustellen, dass keine Fehler vorliegen.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  3. Vergewissern Sie sich, dass Ihr Gerät in der AWS IoT Konsole als verbunden angezeigt wird.

    1. Melden Sie sich an der AWS IoT Greengrass -Konsole an.

    2. Erweitern Sie unter Verwalten die Option Greengrass-Geräte und wählen Sie Core-Geräte aus.

    3. Vergewissern Sie sich, dass Ihr Gerät angeschlossen ist. Der Gerätestatus zeigt anHEALTHY, ob es verbunden ist. Weitere Informationen finden Sie unter Überprüfen Sie den Status des Greengrass Core-Geräts.

Fehlerbehebung

Wenn Sie bei der Einrichtung oder dem Betrieb Ihres TPM2 -fähigen Greengrass-Geräts auf Probleme stoßen, versuchen Sie es mit den folgenden Schritten zur Fehlerbehebung.

  • Überprüfen Sie die Haupt-Protokolldatei von Greengrass.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  • Überprüfen Sie die PKCS #11 -Anbieterkonfiguration.

    sudo cat /greengrass/v2/config/effectiveConfig.yaml
  • Stellen Sie sicher, dass der TPM2 Dienst läuft.

    sudo systemctl status tpm2-abrmd.service
  • Stellen Sie sicher, dass auf den TPM2 Schlüssel zugegriffen werden kann.

    sudo pkcs11-tool —module /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so -l -p 123456 —list-objects
  • Wenn Ihr Betriebssystem mit vollständiger Festplattenverschlüsselung mit TPM2 Speicher-Root-Schlüsseln wie Clevis oder systemd-cryptenroll eingerichtet ist, stellen Sie sicher, dass Sie nicht dasselbe persistente Handle verwenden, das von diesen Tools verwendet wird. Die Verwendung desselben persistenten Benutzernamens kann sich auf Ihren Festplattenverschlüsselungsmechanismus auswirken. Führen Sie den folgenden Befehl aus, um alle erstellten und verwendeten persistenten Handles zu überprüfen

    sudo tpm2_getcap handles-persistent

Nächste Schritte

Nachdem Sie Ihr Greengrass-Core-Gerät erfolgreich integriert haben TPM2, können Sie:

Weitere Informationen zur Sicherheit auf Greengrass-Geräten finden Sie unterSicherheit in AWS IoT Greengrass.