Tutorial: Protezione AWS IoT Greengrass con Trusted Platform Module (TPM) - AWS IoT Greengrass

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial: Protezione AWS IoT Greengrass con Trusted Platform Module (TPM)

Nota

Il meccanismo di questo tutorial è supportato solo con. Installa il software AWS IoT Greengrass Core con provisioning manuale delle risorse

Questo tutorial contiene istruzioni su come utilizzare il TPM2 chip come Hardware Security Module (HSM) per creare una chiave privata e una CSR. Che è usato per. Crea il certificato dell'oggetto

Questo tutorial mostra come migliorare la sicurezza dei dispositivi configurando il software AWS IoT Greengrass Core con un Trusted Platform Module (TPM) utilizzando l'interfaccia PKCS #11. Questa integrazione TPM garantisce che le chiavi private e i certificati utilizzati per l'identità del dispositivo e la connessione AWS IoT Core siano archiviati in modo sicuro in hardware a prova di manomissione, impedendo l'estrazione a fini di impersonificazione o altre attività dannose.

Una volta completata questa integrazione, il dispositivo principale Greengrass utilizzerà chiavi private protette da TPM per la sua identità e la comunicazione con i servizi. AWS IoT

Per ulteriori informazioni sulla sicurezza dei dispositivi Greengrass, vedere. Sicurezza in AWS IoT Greengrass

Prerequisiti

Per completare questo tutorial, è necessario quanto segue:

  • Un dispositivo compatibile con Linux con hardware TPM 2.0 o firmware TPM 2.0.

  • Le istruzioni in questo tutorial sono definite per Ubuntu 24.04 LTS.

  • Una macchina per sviluppatori con AWS CLI installazione e configurazione con le autorizzazioni per:

    • Creare e gestire risorse AWS IoT

    • Crea e gestisci ruoli e policy IAM

  • Java Runtime Environment (JRE) versione 8 o successiva installata sul dispositivo.

  • I seguenti pacchetti software sono installati sul dispositivo:

    • curl

    • jpg

  • Privilegi root o sudo sul dispositivo.

Fase 1: Installare TPM2 strumenti e dipendenze

In questo passaggio, si installano gli strumenti TPM2 software e le librerie necessari.

  1. Aggiorna il tuo gestore di pacchetti e installa TPM2 gli strumenti e le dipendenze eseguendo il comando seguente.

    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. Installa i pacchetti del provider TPM2 OpenSSL su Ubuntu 24.04 che utilizzano il motore OpenSSL 3.

    sudo apt-get install tpm2-openssl

Passaggio 2: inizializza l'archivio PKCS #11 e crea uno slot

  1. Crea una directory per archiviare i dati.

    sudo mkdir -p /etc/tpm2_pkcs11
  2. Imposta la posizione di archiviazione come variabile di ambiente. Per ulteriori informazioni sulla gerarchia dei negozi, vedere Inizializzazione.

    export TPM2_PKCS11_STORE=/etc/tpm2_store
  3. Inizializza il TPM2 token con l'oggetto principale.

    sudo tpm2_ptool init

    Le opzioni disponibili sono le seguenti:

    hierarchy-auth HIERARCHY_AUTH

    La password di autorizzazione per aggiungere un oggetto principale alla gerarchia.

    primary-auth PRIMARY_AUTH

    Valore di autorizzazione per l'oggetto chiave primaria esistente.

    L'impostazione predefinita è un valore di autenticazione vuoto.

    primary-handle [PRIMARY_HANDLE]

    Usa un oggetto chiave primaria esistente.

    Impostazione predefinita: 0x81000001

    transient-parents

    Usa un oggetto primario transitorio di un determinato modello.

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

    path PATH

    La posizione della directory del negozio. Se specificata, la directory deve esistere. Se non è specificato, esegue una ricerca esaminando la variabile di ambienteTPM2_PKCS11_STORE. Se quella variabile di ambiente non è impostata, verrà esaminata/etc/tpm2_pkcs11. Se quella directory non viene trovata o non può essere creata, per impostazione predefinita è la directory di lavoro corrente.

Fase 3: Creare un token e una chiave

  1. Crea un token PKCS #11.

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

    Le opzioni disponibili sono le seguenti:

    --pid PID

    L'id dell'oggetto principale da associare a questo token.

    --sopin SOPIN

    Il pin dell'amministratore. Questo pin viene utilizzato per il ripristino degli oggetti.

    --userpin USERPIN

    Il pin dell'utente. Questo pin viene utilizzato per l'autenticazione per l'uso degli oggetti.

    --label LABEL

    Un'etichetta univoca per identificare il profilo in uso deve essere unica.

    --hierarchy-auth HIERARCHY_AUTH

  2. Crea un oggetto chiave ECC.

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

    Anche l'etichetta dei token per importare la chiave.

    --key-label KEY_LABEL

    L'etichetta della chiave importata. Il valore predefinito è un valore intero.

    --id ID

    L'id della chiave. Il valore predefinito è composto da 8 byte casuali di file esadecimali.

    --attr-always-authenticate

    Imposta l'attributo CKA_ALWAYS_AUTHENTICATE su CK_TRUE.

    --hierarchy-auth HIERARCHY_AUTH

    L'hierarchyauth, richiesto per gli oggetti transitori.

    --sopin SOPIN

    Il pin dell'amministratore.

    --userpin USERPIN

    Il pin utente.

    --algorithm

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

    Il tipo di chiave.

  3. Esporta l'oggetto TPM2 -TSS dal token per acquisire i dati di autenticazione.

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

    Output di esempio:

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

    Troverai anche un file chiamato `greenkey.pem` che è la chiave TSS2 privata nella directory in cui hai eseguito questo comando. Usalo per generare la CSR con il provider tpm2 openssl. Il file TSS2 PRIVATE KEY è protetto dal TPM e non può essere utilizzato su un altro computer. Per ulteriori informazioni sulle TSS2 chiavi con OpenSSL, consulta Memorizzazione della chiave privata o pubblica.

  4. Acquisisci i dati di autenticazione per la chiave privata TSS.

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

Fase 4: Generazione della richiesta di firma del certificato (CSR)

In questo passaggio, utilizzerai la chiave privata TPM2 -protected per generare una CSR.

  1. Genera una CSR utilizzando il provider. TPM2

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

    Quando richiesto, fornisci le informazioni richieste per la tua CSR, tra cui:

    • Nome del Paese (codice a 2 lettere)

    • State or Province Name (Nome stato o provincia)

    • Nome località

    • Nome organizzazione

    • Organizational Unit Name (Nome unità organizzativa)

    • Common Name (Nome comune)

    • Indirizzo e-mail

    In alternativa, puoi fornire un file di configurazione OpenSSL per la generazione automatica. Per ulteriori informazioni, consulta la documentazione di OpenSSL.

  2. Se non stai generando la CSR sulla stessa macchina, copia la CSR generata su una macchina con le credenziali configurate. AWS

Fase 5: Creare il certificato dell'oggetto

Crea un certificato di AWS IoT oggetto. Per ulteriori informazioni su come creare un certificato di oggetto, vedereCrea il certificato dell'oggetto.

Fase 6: Importazione del certificato del oggetto in TPM

  1. Copia il certificato dell'oggetto sul dispositivo.

  2. Aggiungi il thing certificate al token Greengrass.

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

    Le opzioni disponibili sono le seguenti:

    --help

    Mostra questo messaggio di aiuto ed esci.

    --label LABEL

    L'etichetta del profilo da rimuovere.

    --key-label KEY_LABEL

    L'etichetta della chiave privata associata.

    --key-id KEY_ID

    L'id della chiave privata associata è esadecimale.

    cert

    Il certificato PEM x509 da aggiungere.

Passaggio 7: acquisizione dell'URL dell'oggetto PKCS #11

Useremo quanto p11tool fornito dal gnutls-bin pacchetto per ottenere l'URL e l'oggetto del token PKCS #11. URLs

  1. Acquisisci l'URL del token Greengrass.

    TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
  2. Ottieni l'oggetto URLs per il token Greengrass. Usa lo stesso pin che hai usato nel passaggio 3.

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

    Output di esempio:

    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. Acquisisci l'URL dell'oggetto per la chiave privata e il certificato.

Fase 8: Configurare e installare Greengrass con supporto TPM2

  1. Configura il certificato Thing. Per ulteriori informazioni, consulta Configurare il certificato del oggetto.

  2. Completa le istruzioni per installare il software AWS IoT Greengrass Core con la chiave privata e il certificato in un ingresso HSM. Installa il software Core AWS IoT Greengrass Quindi, utilizzate i seguenti passaggi per configurare l'installazione da utilizzare TPM2 tramite l'interfaccia PKCS #11.

  3. Verifica di aver scaricato e salvato il componente del provider PKCS #11 nella posizione del programma di installazione di Greengrass.

  4. Utilizzate un editor di testo per creare un file di configurazione denominato config.yaml da fornire all'installatore. Ad esempio, su un sistema basato su Linux, è possibile eseguire il comando seguente per utilizzare GNU nano per creare il file.

    nano GreengrassInstaller/config.yaml
  5. Copiate il seguente contenuto YAML nel file. Questo file di configurazione parziale specifica i parametri di sistema, i parametri Greengrass nucleus e i parametri del provider 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. Modifica il file con i parametri specifici per l'installazione.

    1. Aggiorna certificateFilePath e privateKeyPath con l'aggiornamento certificateFilePath e privateKeyPath con l'URL PKCS #11 acquisito nel passaggio 7.

    2. Aggiorna il tuo iotDataEndpoint e iotCredEndpoint in base al tuo AWS IoT endpoint.

    3. Nella aws.greengrass.crypto.Pkcs11Provider configurazione, aggiorna la libreria in base alla tua piattaforma.

      Nota

      L'esempio mostrato è per X86_64. Il percorso del file sarà simile per il dispositivo. ARM64

  7. Completa i passaggi di installazione di Greengrass in. Installa il software Core AWS IoT Greengrass

Fase 9: Verifica dell'installazione

In questo passaggio, verificherai che Greengrass funzioni correttamente con TPM2 l'integrazione.

  1. Controlla lo stato del servizio Greengrass.

    sudo systemctl status greengrass.service
  2. Visualizza i log di Greengrass per assicurarti che non vi siano errori.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  3. Verifica che il dispositivo appaia come connesso nella AWS IoT console.

    1. Accedi alla AWS IoT Greengrass console .

    2. In Gestione, espandi i dispositivi Greengrass e scegli Dispositivi Core.

    3. Conferma che il dispositivo è connesso. Lo stato del dispositivo verrà visualizzato HEALTHY se è connesso. Per ulteriori informazioni, consulta Controlla lo stato del dispositivo Greengrass core.

Risoluzione dei problemi

Se riscontri problemi durante la configurazione o il funzionamento del tuo dispositivo Greengrass TPM2 abilitato, prova i seguenti passaggi per la risoluzione dei problemi.

  • Controlla il file di registro principale di Greengrass.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  • Verifica la configurazione del provider PKCS #11.

    sudo cat /greengrass/v2/config/effectiveConfig.yaml
  • Assicurarsi che il TPM2 servizio sia in esecuzione.

    sudo systemctl status tpm2-abrmd.service
  • Verifica che la TPM2 chiave sia accessibile.

    sudo pkcs11-tool —module /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so -l -p 123456 —list-objects
  • Se il sistema operativo è configurato con la crittografia completa del disco con chiavi root di TPM2 archiviazione come Clevis o systemd-cryptenroll, verifica di non utilizzare lo stesso handle persistente utilizzato da questi strumenti. L'utilizzo dello stesso handle persistente potrebbe influire sul meccanismo di crittografia del disco. Per controllare tutti gli handle persistenti creati e utilizzati, esegui il comando seguente

    sudo tpm2_getcap handles-persistent

Passaggi successivi

Ora che hai integrato con successo il tuo dispositivo principale Greengrass con TPM2, puoi:

Per ulteriori informazioni sulla sicurezza dei dispositivi Greengrass, vedere. Sicurezza in AWS IoT Greengrass