Modulo 7: Simulazione dell'integrazione di sicurezza hardware - AWS IoT Greengrass

AWS IoT Greengrass Version 1 è entrato nella fase di estensione della vita utile il 30 giugno 2023. Per ulteriori informazioni, consulta la politica AWS IoT Greengrass V1 di manutenzione. Dopo questa data, AWS IoT Greengrass V1 non rilascerà aggiornamenti che forniscano funzionalità, miglioramenti, correzioni di bug o patch di sicurezza. I dispositivi che funzionano AWS IoT Greengrass V1 non subiranno interruzioni e continueranno a funzionare e a connettersi al cloud. Ti consigliamo vivamente di eseguire la migrazione a AWS IoT Greengrass Version 2, che aggiunge nuove importanti funzionalità e supporto per piattaforme aggiuntive.

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à.

Modulo 7: Simulazione dell'integrazione di sicurezza hardware

Questa caratteristica è disponibile perAWS IoT GreengrassCore v1.7 e versioni successive.

In questo modulo avanzato viene illustrato come configurare un modulo di sicurezza hardware (HSM) simulato per l'uso con un core Greengrass. La configurazione utilizza SoftHSM, che è un'implementazione software che utilizza l'API PKCS#11. Lo scopo di questo modulo è quello di consentirti di configurare un ambiente in cui potrai apprendere ed effettuare i test iniziali grazie a un'implementazione software dell'API PKCS#11. Il modulo viene fornito solo a scopo informativo e per il test iniziale e non per scopi produttivi di alcun tipo.

Puoi utilizzare questa configurazione per effettuare esperimenti con l'utilizzo di un servizio compatibile con PKCS#11 per l'archiviazione delle chiavi private. Per ulteriori informazioni sulle implementazioni software, consulta SoftHSM. Per ulteriori informazioni sull'integrazione della sicurezza hardware inAWS IoT Greengrasscore, inclusi i requisiti generali, vediIntegrazione della sicurezza hardware.

Importante

Questo modulo viene fornito unicamente a scopo di sperimentazione. Sconsigliamo l'utilizzo di SoftHSM in un ambiente di produzione, in quanto potrebbe fornire un falso senso di maggiore sicurezza. La configurazione risultante non fornisce prestazioni di sicurezza effettive. Le chiavi archiviate in SoftHSM non sono archiviate in modo più sicuro rispetto ad altri mezzi di storage dei segreti dell'ambiente Greengrass.

Lo scopo di questo modulo è quello di fornire nozioni di base sulla specifica PKCS#11 e di eseguire il test iniziale del software, se prevedi di utilizzare in futuro un vero HSM basato sull'hardware.

Dovrai effettuare il test della futura implementazione hardware separatamente e in modo completo prima di qualsiasi utilizzo in produzione, poiché potrebbero esservi differenze tra l'implementazione PKCS#11 fornita in SoftHSM e un'implementazione basata sull'hardware.

Se hai bisogno di assistenza con l'onboarding di ahardware security module supportato, contatta ilAWSRappresentante del Support Enterprise.

Prima di iniziare, eseguire lo script di installazione dispositivo Greengrass o assicurarsi di aver completato il modulo 1 e il modulo 2 dell'esercitazione introduttiva. In questo modulo, si presuppone che tu abbia già effettuato il provisioning del core e che questo sia in grado di comunicare conAWS. Il completamento di questo modulo richiede circa 30 minuti.

Installazione del software SoftHSM

In questa fase, installerai SoftHSM e gli strumenti pkcs11, utilizzati per gestire l'istanza SoftHSM.

  • In un terminale sulAWS IoT Greengrasscore device, eseguire il comando seguente:

    sudo apt-get install softhsm2 libsofthsm2-dev pkcs11-dump

    Per ulteriori informazioni su questi pacchetti, consulta Installazione di softhsm2, Installazione di libsofthsm2-dev e Installazione di pkcs11-dump.

    Nota

    In caso di problemi di utilizzo di questo comando nel sistema, consulta SoftHSM versione 2 su GitHub. Questo sito fornisce ulteriori informazioni di installazione, incluse quelle relative alla compilazione a partire dal codice sorgente.

Configurazione di SoftHSM

In questa fase, configurerai SoftHSM.

  1. Accedi come utente root.

    sudo su
  2. Utilizza la pagina del manuale per trovare la posizione softhsm2.conf a livello di sistema. Una posizione comune è /etc/softhsm/softhsm2.conf, ma la posizione potrebbe essere diversa su alcuni sistemi.

    man softhsm2.conf
  3. Crea la directory per il file di configurazione softhsm2 nella posizione a livello di sistema. In questo esempio si presuppone che la posizione sia /etc/softhsm/softhsm2.conf.

    mkdir -p /etc/softhsm
  4. Crea la directory del token nella directory /greengrass.

    Nota

    Se questa fase viene ignorata, softhsm2-util riporta ERROR: Could not initialize the library.

    mkdir -p /greengrass/softhsm2/tokens
  5. Configurare la directory del token.

    echo "directories.tokendir = /greengrass/softhsm2/tokens" > /etc/softhsm/softhsm2.conf
  6. Configurare un back-end basato su file.

    echo "objectstore.backend = file" >> /etc/softhsm/softhsm2.conf
Nota

Queste impostazioni di configurazione vengono fornite unicamente a scopo di sperimentazione. Per visualizzare tutte le opzioni di configurazione, leggi la pagina del manuale del file di configurazione.

man softhsm2.conf

Importazione della chiave privata in SoftHSM.

In questa fase, inizializzerai il token SoftHSM, convertirai il formato della chiave privata, quindi importerai la chiave privata.

  1. Inizializzare il token SoftHSM.

    softhsm2-util --init-token --slot 0 --label greengrass --so-pin 12345 --pin 1234
    Nota

    Se richiesto, immettere il PIN SO 12345 e il PIN utente 1234. AWS IoT Greengrass non utilizza il PIN SO (supervisore), pertanto è possibile usare qualsiasi valore.

    Se si riceve l'errore CKR_SLOT_ID_INVALID: Slot 0 does not exist, provare il seguente comando:

    softhsm2-util --init-token --free --label greengrass --so-pin 12345 --pin 1234
  2. Convertire la chiave privata in un formato che possa essere utilizzato dallo strumento di importazione di SoftHSM. In questo tutorial, convertirai la chiave privata ottenuta con l'opzione Creazione gruppo predefinito del Modulo 2 del tutorial Nozioni di base.

    openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in hash.private.key -out hash.private.pem
  3. Importare la chiave privata in SoftHSM. Eseguire solo uno dei seguenti comandi, a seconda della versione di softhsm2-util.

    Sintassi Raspbian softhsm2-util v2.2.0
    softhsm2-util --import hash.private.pem --token greengrass --label iotkey --id 0000 --pin 12340
    Sintassi Ubuntu softhsm2-util v2.0.0
    softhsm2-util --import hash.private.pem --slot 0 --label iotkey --id 0000 --pin 1234

    Questo comando identifica lo slot come 0 e definisce l'etichetta della chiave come iotkey. Utilizzerai questi valori nella sezione successiva.

Dopo avere importato la chiave privata, potrai rimuoverla facoltativamente dalla directory /greengrass/certs. Assicurati di conservare il certificati CA root e quello del dispositivo nella directory.

Configurazione del core Greengrass per l'utilizzo di SoftHSM

In questa fase, modificherai la configurazione core di Greengrass per utilizzare SoftHSM.

  1. Individuare il percorso della libreria del provider SoftHSM (libsofthsm2.so) nel sistema:

    1. Ottenere l'elenco dei pacchetti installati per la libreria.

      sudo dpkg -L libsofthsm2

      Il file libsofthsm2.so è disponibile nella directory softhsm.

    2. Copiare il percorso completo del file (ad esempio, /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so). Utilizzerai questo valore in un secondo momento.

  2. Arrestare il daemon Greengrass.

    cd /greengrass/ggc/core/ sudo ./greengrassd stop
  3. Aprire il file di configurazione Greengrass. Si tratta del file config.json nella directory /greengrass/config.

    Nota

    Gli esempi in questa procedura sono scritti presupponendo che il file config.json utilizzi il formato generato dall'opzione Creazione gruppo definito del Modulo 2 del tutorial Nozioni di base.

  4. Nell'oggetto crypto.principals, inserire il seguente oggetto del certificato del server MQTT. Aggiungere una virgola dove necessario per creare un file JSON valido.

    "MQTTServerCertificate": { "privateKeyPath": "path-to-private-key" }
  5. Nell'oggetto crypto, inserisci il seguente oggetto PKCS11. Aggiungere una virgola dove necessario per creare un file JSON valido.

    "PKCS11": { "P11Provider": "/path-to-pkcs11-provider-so", "slotLabel": "crypto-token-name", "slotUserPin": "crypto-token-user-pin" }

    Il file si presenta in maniera simile a quanto riportato di seguito:

    { "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "hash.cert.pem", "keyPath" : "hash.private.key", "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name", "iotHost" : "host-prefix.iot.region.amazonaws.com", "ggHost" : "greengrass.iot.region.amazonaws.com", "keepAlive" : 600 }, "runtime" : { "cgroup" : { "useSystemd" : "yes" } }, "managedRespawn" : false, "crypto": { "PKCS11": { "P11Provider": "/path-to-pkcs11-provider-so", "slotLabel": "crypto-token-name", "slotUserPin": "crypto-token-user-pin" }, "principals" : { "MQTTServerCertificate": { "privateKeyPath": "path-to-private-key" }, "IoTCertificate" : { "privateKeyPath" : "file:///greengrass/certs/hash.private.key", "certificatePath" : "file:///greengrass/certs/hash.cert.pem" }, "SecretsManager" : { "privateKeyPath" : "file:///greengrass/certs/hash.private.key" } }, "caPath" : "file:///greengrass/certs/root.ca.pem" } }
    Nota

    Per utilizzare over-the-air (OTA) gli aggiornamenti con la sicurezza hardware,PKCS11l'oggetto deve contenere anche ilOpenSSLEngineproprietà. Per ulteriori informazioni, consulta la pagina Configura il supporto per gli aggiornamenti over-the-air .

  6. Modificare l'oggetto crypto:

    1. Configurare l'oggetto PKCS11.

      • In P11Provider, immettere il percorso completo di libsofthsm2.so.

      • In slotLabel, immettere greengrass.

      • In slotUserPin, immettere 1234.

    2. Configurare i percorsi delle chiavi private dell'oggetto principals. Non modificare la proprietà certificatePath.

      • Nelle proprietà privateKeyPath, immettere il seguente percorso PKCS#11 RFC 7512 (che specifica l'etichetta della chiave). Effettuare questa operazione per i principali IoTCertificate, SecretsManager e MQTTServerCertificate.

        pkcs11:object=iotkey;type=private
    3. Controllare l'oggetto crypto. La schermata visualizzata dovrebbe risultare simile a quella nell'immagine seguente:

      "crypto": { "PKCS11": { "P11Provider": "/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so", "slotLabel": "greengrass", "slotUserPin": "1234" }, "principals": { "MQTTServerCertificate": { "privateKeyPath": "pkcs11:object=iotkey;type=private" }, "SecretsManager": { "privateKeyPath": "pkcs11:object=iotkey;type=private" }, "IoTCertificate": { "certificatePath": "file://certs/core.crt", "privateKeyPath": "pkcs11:object=iotkey;type=private" } }, "caPath": "file://certs/root.ca.pem" }
  7. Rimuovere i valori caPath, certPath e keyPath dall'oggetto coreThing. La schermata visualizzata dovrebbe risultare simile a quella nell'immagine seguente:

    "coreThing" : { "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name", "iotHost" : "host-prefix-ats.iot.region.amazonaws.com", "ggHost" : "greengrass-ats.iot.region.amazonaws.com", "keepAlive" : 600 }
Nota

In questo tutorial, specificherai la stessa chiave privata per tutti i principali. Per ulteriori informazioni sulla scelta della chiave privata per il server MQTT locale, consulta Prestazioni. Per ulteriori informazioni sul Secrets Manager locale, consulta Distribuzione dei segreti nel core AWS IoT Greengrass.

Test della configurazione

  • Avviare il daemon Greengrass.

    cd /greengrass/ggc/core/ sudo ./greengrassd start

    Se il daemon viene avviato, il core è stato configurato con successo.

    A questo punto puoi acquisire familiarità con la specifica PKCS#11 ed effettuare il test iniziale con l'API PKCS#11 fornita dall'implementazione SoftHSM.

    Importante

    Ribadiamo che è estremamente importante sapere che questo modulo è destinato solamente all'apprendimento e al test. Non aumenta la sicurezza dell'ambiente Greengrass.

    Lo scopo del modulo è quello di consentirti di acquisire familiarità e di effettuare test in vista dell'utilizzo futuro di un vero HSM basato sull'hardware. In quel momento, dovrai effettuare il test del software rispetto all'HSM basato sull'hardware separatamente e in modo completo prima di qualsiasi utilizzo produttivo, poiché potrebbero esservi differenze tra l'implementazione PKCS#11 fornita in SoftHSM e una basata sull'hardware.

Consultare anche