

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: Proteggi AWS IoT Greengrass Nucleus Lite con Trusted Platform Module (TPM)
<a name="gg-lite-with-tpm-tutorial"></a>

Questo tutorial spiega come abilitare e configurare il supporto Trusted Platform Module (TPM) per nucleus lite. AWS IoT Greengrass TPM fornisce un root of trust basato sull'hardware per l'archiviazione sicura delle chiavi. Questa funzionalità di sicurezza protegge le operazioni crittografiche e le credenziali sensibili, migliorando la sicurezza e l'integrità del dispositivo.

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

Per ulteriori informazioni sulla sicurezza dei AWS IoT Greengrass dispositivi, consulta. [Sicurezza in AWS IoT Greengrass](security.md)

## Prerequisiti
<a name="lite-tpm-prerequisites"></a>

Per completare questo tutorial, è necessario quanto segue:
+ [Un dispositivo compatibile con Linux con hardware TPM 2.0 o NitroTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html)
+ Una macchina per sviluppatori con Greengrass Nucleus Lite installato. Per ulteriori informazioni, vedere [Installazione del software AWS IoT Greengrass Core (console)](https://docs.aws.amazon.com//greengrass/v2/developerguide/install-greengrass-v2-console.html).
+ Le istruzioni in questo tutorial sono definite per Ubuntu 24.04 LTS.
+ Qualsiasi distribuzione Linux in grado di supportare [Linux TPM2 Software Stack](https://tpm2-software.github.io/) può supportare questo meccanismo.
+ Una macchina per sviluppatori [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)installata e configurata con le autorizzazioni per:
  + Creare e gestire risorse AWS IoT 
  + Crea e gestisci ruoli e policy IAM
+ Privilegi root o sudo sul dispositivo.

Questo tutorial contiene istruzioni su come utilizzare il TPM2 chip come Hardware Security Module (HSM) per creare una chiave privata e CSR, che viene utilizzato per creare il thing certificate. AWS IoT 

## Fase 1: Configurare un'istanza NitroTPM
<a name="lite-tpm-step1"></a>

1. Configura un'istanza NitroTPM. [Per ulteriori informazioni, consulta NitroTPM.](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/enable-nitrotpm-support-on-ami.html)

1. Avvia l'istanza finale utilizzando l'AMI personalizzata creata nel passaggio precedente.
**Importante**  
Quando ti connetti con SSH, usa l'`ubuntu`utente invece di`root`.

1. Verifica che il dispositivo TPM sia presente e funzionante eseguendo il comando seguente:

   ```
   ls -la /dev/tpm*
   ```

   Dovresti vedere `/dev/tpm0` e `/dev/tpmrm0` dispositivi.

## Fase 2: Installare e configurare gli strumenti TPM
<a name="lite-tpm-step2"></a>

1. Installa i pacchetti richiesti eseguendo il comando seguente:

   ```
   sudo apt update
   sudo apt install tpm2-openssl tpm2-tools tpm2-abrmd libtss2-tcti-tabrmd0
   ```

1. Verifica le autorizzazioni del dispositivo TPM eseguendo il comando seguente:

   ```
   ls -l /dev/tpm0    # Should be owned by tss:root with permissions 0660
   ls -l /dev/tpmrm0  # Should be owned by tss:tss with permissions 0660
   ```

## Fase 3: Configurare il provider OpenSSL TPM2
<a name="lite-tpm-step3"></a>

1. Modifica il file di configurazione OpenSSL:

   ```
   sudo vi /etc/ssl/openssl.cnf
   ```

1. Aggiungi la seguente configurazione:

   ```
   [openssl_init]
   providers = provider_sect
   
   [provider_sect]
   default = default_sect
   tpm2 = tpm2_sect
   
   [default_sect]
   activate = 1
   
   [tpm2_sect]
   identity = tpm2
   module = /usr/local/lib64/tpm2.so
   activate = 1
   ```

1. Regola il percorso del modulo secondo necessità. Puoi trovare il percorso corretto usando:

   ```
   find /usr -name "tpm2.so"
   ```

## Passaggio 4: Generazione di chiavi TPM persistenti
<a name="lite-tpm-step4"></a>

1. Crea una chiave primaria eseguendo il seguente comando:

   ```
   sudo tpm2_createprimary -C o -c primary.ctx
   ```

1. Crea un oggetto chiave ECC eseguendo il comando seguente:

   ```
   sudo tpm2_create -C primary.ctx -g sha256 -G ecc256 -r device.priv -u device.pub
   ```

1. Caricate la chiave eseguendo il comando seguente:

   ```
   sudo tpm2_load -C primary.ctx -r device.priv -u device.pub -c device.ctx
   ```

1. Rendi persistente la chiave eseguendo il seguente comando:

   ```
   sudo tpm2_evictcontrol -C o -c device.ctx 0x81000002
   ```

   Questo crea una chiave persistente con l'handle (like`0x81000002`).

## Fase 5: Generazione della richiesta di firma del certificato (CSR)
<a name="lite-tpm-step5"></a>

In questo passaggio, utilizzerai la chiave privata TPM2 -protected per generare una richiesta di firma del certificato (CSR).

1. Genera una CSR utilizzando la chiave TPM:

   ```
   openssl req -new -provider tpm2 -key "handle:0x81000002" \
       -out device.csr \
       -subj "/CN=TPMThing"
   ```

1. Sostituisci `0x81000002` con il valore dell'handle scelto e `TPMThing` con il nome dell'oggetto desiderato.

## Fase 6: Creare il certificato da CSR
<a name="lite-tpm-step6"></a>

1. Sul tuo computer di sviluppo, crea una cartella in cui hai scaricato il certificato relativo all' AWS IoT oggetto.

   ```
   mkdir greengrass-v2-certs
   ```

1. Usa il file CSR per creare e scaricare il certificato relativo all' AWS IoT oggetto sul tuo computer di sviluppo.

   ```
   aws iot create-certificate-from-csr \
     --set-as-active \
     --certificate-signing-request file://path_to_device.csr \
     --certificate-pem-outfile greengrass-v2-certs/device.pem.crt
   ```

   Se la richiesta ha esito positivo, la risposta è simile all'esempio seguente:

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----"
   }
   ```

## Passaggio 7: configurare Greengrass Nucleus Lite con supporto TPM
<a name="lite-tpm-step7"></a>

Per abilitare il supporto TPM in Greengrass Nucleus Lite, apporta le seguenti modifiche:

1. Configura le autorizzazioni utente aggiungendo l'`ggcore`utente al `tss` gruppo per l'accesso TPM:

   ```
   sudo usermod -a -G tss ggcore
   ```

1. Aggiorna la directory delle credenziali completando i seguenti passaggi:
   + Rimuove il file della chiave privata dalla directory delle credenziali.
     + Poiché utilizziamo chiavi TPM persistenti, non è necessario copiare alcun file di chiave privata.
   + Copia il nuovo `device.pem.crt` nella cartella delle credenziali.

1. Modifica `config.yaml` con la seguente configurazione specifica del TPM:

   ```
   system:
       privateKeyPath: "handle:0x81000002" # Use your chosen handle
       certificateFilePath: "" # Replace with the path of device.pem.crt
       ...
   ```

1. Riavvia Greengrass Nucleus Lite eseguendo il seguente comando:

   ```
   systemctl restart greengrass-lite.target
   ```

## Risoluzione dei problemi
<a name="lite-tpm-troubleshooting"></a>

Se riscontrate problemi durante la configurazione o il funzionamento del AWS IoT Greengrass dispositivo TPM2 abilitato, provate i seguenti passaggi per la risoluzione dei problemi:

**Il dispositivo TPM non è stato trovato (quando si utilizza NitroTPM)**

Se non `/dev/tpm0` è presente, procedi nel seguente modo:

1. Verifica di utilizzare un tipo di istanza supportato da NitroTPM.

1. Assicurati che l'AMI sia stato creato con`--tpm-support v2.0`.

1. Verifica che l'istanza sia stata avviata dall'AMI personalizzata.

**Errori di autorizzazione negata**

Se riscontri errori di accesso al TPM, procedi come segue:

1. Verifica che l'utente sia nel `tss` gruppo:`groups $USER`.

1. Controlla le autorizzazioni del dispositivo TPM utilizzando il seguente comando:

   ```
   ls -l /dev/tpm*
   ```

1. Verifica di esserti disconnesso e di aver effettuato nuovamente l'accesso dopo l'aggiunta al gruppo. `tss`

**Problemi con il provider OpenSSL**

Se il provider TPM non viene trovato, procedi come segue:

1. Verifica `tpm2.so` il percorso in. `/etc/ssl/openssl.cnf`

1. Controlla l'installazione del provider eseguendo il seguente comando:

   ```
   openssl list -providers
   ```

1. Verifica che il `tpm2-openssl` pacchetto sia installato correttamente.

## Fasi successive
<a name="lite-tpm-next-steps"></a>

Ora che hai integrato con successo il tuo dispositivo AWS IoT Greengrass principale con TPM2, puoi:
+ Implementa i componenti sul tuo dispositivo sicuro AWS IoT Greengrass 
+ Configura AWS IoT Greengrass dispositivi aggiuntivi con integrazione TPM2 

Per ulteriori informazioni sulla sicurezza AWS IoT Greengrass dei dispositivi, consulta[Sicurezza in AWS IoT Greengrass](security.md).