View a markdown version of this page

Migrazione AWS IoT Greengrass V2 da dispositivi core a dispositivi non root - 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à.

Migrazione AWS IoT Greengrass V2 da dispositivi core a dispositivi non root

Importante

Questo argomento descrive un approccio di migrazione consigliato. Potrebbe essere necessario adattare questi passaggi alla configurazione del dispositivo, al sistema operativo e al software installato.

Per impostazione predefinita, AWS IoT Greengrass viene eseguito come utente root sui dispositivi Linux. Puoi migliorare il livello di sicurezza dei tuoi dispositivi migrando i dispositivi AWS IoT Greengrass principali in modo che vengano eseguiti come utente non root con solo le funzionalità Linux richieste. AWS IoT Greengrass Puoi migrare un singolo dispositivo o scalare la migrazione su un parco veicoli.

Considerazioni

Prima di eseguire la migrazione a una versione non root, considera quanto segue:

  • Questa procedura di migrazione si applica ai dispositivi AWS IoT Greengrass principali che eseguono AWS IoT Greengrass nucleus (Java-based) su Linux con systemd. Non si applica ai dispositivi che eseguono AWS IoT Greengrass nucleus lite.

  • Testa la migrazione su un singolo dispositivo in un ambiente di sviluppo prima di migrare il tuo parco di produzione.

Esegui la migrazione di un singolo dispositivo

Questa procedura di migrazione segue l'approccio descritto inSoluzione 3: configurazione AWS IoT Greengrass V2 come dispositivo non root con separazione degli utenti tra i componenti. Prima di iniziare, completa i prerequisiti in quell'argomento, inclusa la configurazione sudoers che consente all'utente non root di eseguire i componenti come utenti separati.

Usa questa procedura per migrare un singolo dispositivo prima di migrare la tua flotta.

Fase 1: Creare l'utente e il gruppo non root

Connettiti al tuo dispositivo e crea l'utente e il gruppo di sistema che AWS IoT Greengrass funzionano come. Sostituisci user-name e group-name con i nomi che desideri utilizzare.

sudo groupadd --system group-name sudo useradd --system --create-home --shell /sbin/nologin -g group-name user-name

Passaggio 2: eseguire il backup della proprietà del file

Arresta AWS IoT Greengrass e salva l'attuale struttura di proprietà dei file in modo da poterla ripristinare se è necessario eseguire il rollback.

sudo systemctl stop greengrass.service sudo mkdir -p /opt/greengrass-backup sudo find /greengrass/v2 -exec stat -c 'chown %U:%G "%n"' {} \; | sudo tee /opt/greengrass-backup/restore_ownership.sh > /dev/null sudo chmod 700 /opt/greengrass-backup/restore_ownership.sh
Nota

I comandi in questo argomento vengono utilizzati /greengrass/v2 come percorso AWS IoT Greengrass principale. Se l'installazione è AWS IoT Greengrass stata effettuata in una posizione diversa, /greengrass/v2 sostituiscila con il percorso AWS IoT Greengrass root effettivo.

Passaggio 3: modifica della proprietà del file

Trasferisci la proprietà della AWS IoT Greengrass directory all'utente non root.

sudo chown -R user-name:group-name /greengrass/v2

Passaggio 4: creare l'override drop-in systemd

Crea una directory drop-in e un file di configurazione che indichi a systemd di funzionare AWS IoT Greengrass come utente non root con le funzionalità Linux richieste.

sudo mkdir -p /etc/systemd/system/greengrass.service.d

La migrazione utilizza un file di override drop-in di systemd all'indirizzo. /etc/systemd/system/greengrass.service.d/10-nonroot.conf Un override drop-in sostituisce le impostazioni nel file di servizio di base senza modificarlo direttamente. Questo override configura systemd per eseguire il AWS IoT Greengrass servizio come utente non root con un set limitato di funzionalità Linux. La rimozione della directory drop-in fa sì che systemd ritorni al greengrass.service file base, che viene eseguito come root con la configurazione originale.

Crea il file /etc/systemd/system/greengrass.service.d/10-nonroot.conf con il seguente contenuto:

[Service] User=user-name AmbientCapabilities=CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_SYS_RESOURCE CAP_AUDIT_WRITE CapabilityBoundingSet=CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_SYS_RESOURCE CAP_AUDIT_WRITE ProtectSystem=strict ReadWritePaths=/greengrass/v2 /tmp

Per informazioni su queste direttive systemd e sulle funzionalità richieste, vedere. Soluzione 3: configurazione AWS IoT Greengrass V2 come dispositivo non root con separazione degli utenti tra i componenti

Fase 5: Ricarica systemd e avvia AWS IoT Greengrass

Esegui i seguenti comandi per ricaricare il demone systemd e iniziare. AWS IoT Greengrass

sudo systemctl daemon-reload sudo systemctl start greengrass.service

Passaggio 6: verifica la migrazione

Conferma che AWS IoT Greengrass è in esecuzione come utente non root.

sudo systemctl status greengrass.service ps -ef | grep greengrass

L'output mostra l'utente non root come proprietario del processo anziché. root

Quindi, conferma che tutti i componenti distribuiti siano in esecuzione. È necessario distribuire il aws.greengrass.Cli componente sul dispositivo per eseguire questo comando.

sudo /greengrass/v2/bin/greengrass-cli component list

Ogni componente deve riportare un valore State di RUNNING oFINISHED. FINISHEDè lo stato terminale previsto peraws.greengrass.Nucleus. Esamina qualsiasi componente nello ERRORED stato BROKEN or prima di considerare la migrazione completa.

Ripristina un singolo dispositivo

Se devi eseguire il ripristino per AWS IoT Greengrass eseguirlo come root, rimuovi l'override drop-in, ripristina la proprietà del file e riavvia. AWS IoT Greengrass

sudo systemctl stop greengrass.service sudo rm -rf /etc/systemd/system/greengrass.service.d sudo bash /opt/greengrass-backup/restore_ownership.sh sudo systemctl daemon-reload sudo systemctl start greengrass.service

Esegui Passaggio 6: verifica la migrazione nuovamente i comandi di verifica da per confermare che AWS IoT Greengrass è in esecuzione come root. Il processo dovrebbe apparire root come proprietario.

Dopo aver confermato che il rollback è riuscito, puoi opzionalmente ripulire gli artefatti della migrazione:

  • Directory di backup: puoi conservarla /opt/greengrass-backup se intendi riprovare la migrazione in un secondo momento o rimuoverla:

    sudo rm -r /opt/greengrass-backup
  • Non-root utente e gruppo: se non intendi più eseguire l'operazione AWS IoT Greengrass come utente non root, puoi rimuovere l'utente e il gruppo che hai creato nel passaggio 1:

    sudo userdel user-name sudo groupdel group-name

    Se altri servizi o componenti utilizzano questo utente, non rimuoverlo.

Esegui la migrazione di una flotta di dispositivi

Dopo aver verificato la migrazione su un singolo dispositivo, puoi scalare la migrazione su tutta la tua flotta. Seleziona uno dei seguenti metodi:

Usa una soluzione personalizzata AWS IoT Greengrass componente bootstrap

Puoi creare un AWS IoT Greengrass componente personalizzato che automatizzi le fasi di migrazione di un singolo dispositivo in tutta la tua flotta. Questo approccio è autonomo e utilizza solo implementazioni. AWS IoT Greengrass Non richiede strumenti esterni come Systems Manager.

Il componente utilizza il ciclo di vita Bootstrap con RequiresPrivilege set totrue, che esegue il componente come root durante la distribuzione. Lo script bootstrap esegue le stesse operazioni privilegiate della procedura per dispositivo singolo:

  • Crea l'utente e il gruppo non root se non esistono già.

  • Esegui il backup della struttura di proprietà dei file per il rollback.

  • Cambia la proprietà della directory AWS IoT Greengrass principale con l'utente non root.

  • Crea il file di override drop-in systemd.

  • Ricarica il demone systemd.

  • Esci con il codice 101 per riavviare il dispositivo.

Importante

Il componente deve uscire con il codice 101, non 100. Il codice di uscita 100 riavvia solo il processo AWS IoT Greengrass JVM, che utilizza la configurazione del servizio systemd già memorizzata nella cache. Un riavvio completo obbliga systemd a leggere il nuovo override drop-in dal disco e ad avviarsi come utente non root. AWS IoT Greengrass Il riavvio interrompe temporaneamente tutti i servizi sul dispositivo.

Rendi il componente idempotente in modo che le ridistribuzioni non falliscano se hai già eseguito la migrazione del dispositivo.

Una volta completata la distribuzione della migrazione, verifica che i tuoi dispositivi funzionino come utente non root. Per ulteriori informazioni, consulta Passaggio 6: verifica la migrazione. Puoi distribuire un componente di verifica che controlli l'utente in esecuzione e ne riporti il risultato oppure monitora lo stato della distribuzione nella console. AWS IoT Greengrass

Imposta un meccanismo di rollback

Per ripristinare la configurazione root in remoto in tutta la flotta, il componente di migrazione deve impostare un meccanismo di rollback. Un approccio consiste nell'utilizzare systemd per monitorare un file di attivazione. Questo approccio richiede le seguenti risorse systemd:

  • Uno script di rollback che rimuove l'override drop-in, ripristina la proprietà originale del file dal backup, ricarica il demone systemd e si riavvia come root. AWS IoT Greengrass

  • Un servizio systemd oneshot che esegue lo script di rollback come root. Un servizio oneshot esegue una singola attività e quindi esce, anziché essere eseguito come un demone di lunga durata.

  • Un'unità di percorso systemd che monitora un percorso di file specifico, ad esempio. /greengrass/v2/rollback/.rollback-trigger Quando viene visualizzato il file, l'unità di percorso avvia automaticamente il servizio di rollback oneshot.

Con questo meccanismo in atto, è possibile ripristinare un dispositivo implementando un semplice AWS IoT Greengrass componente che crea il file di attivazione. L'unità di percorso systemd rileva il file, esegue il servizio di rollback come root e ripristina AWS IoT Greengrass la configurazione root originale.

Utilizzo AWS Systems Manager

Se utilizzi Systems Manager per gestire i tuoi dispositivi, puoi creare un documento SSM che automatizzi le fasi di migrazione di un singolo dispositivo. Poiché SSM viene eseguito indipendentemente AWS IoT Greengrass, può arrestare e riavviare il AWS IoT Greengrass servizio direttamente senza riavviare il dispositivo.

Il tuo documento SSM deve soddisfare i seguenti requisiti:

  • Arresta AWS IoT Greengrass ed esegui il backup della configurazione corrente del servizio e della struttura di proprietà dei file.

  • Crea l'utente e il gruppo non root.

  • Cambia la proprietà della AWS IoT Greengrass directory con l'utente non root.

  • Crea il file di override drop-in systemd.

  • Ricarica il demone systemd e avvia. AWS IoT Greengrass

  • Verifica che sia stato AWS IoT Greengrass avviato correttamente come utente non root.

Per eseguire la migrazione su tutta la tua flotta, utilizza Systems Manager Run Command per eseguire il documento SSM sui tuoi dispositivi utilizzando tag o gruppi di risorse. È possibile monitorare lo stato di esecuzione dei comandi nella console di Systems Manager, che mostra il risultato per ogni dispositivo di destinazione, inclusi eventuali errori.

Per eseguire il rollback, create un documento SSM separato che si interrompa AWS IoT Greengrass, rimuove l'override drop-in, ripristina la proprietà originale del file, ricarica il demone systemd e si riavvia come root. AWS IoT Greengrass Esegui questo documento sui dispositivi di cui hai bisogno per eseguire il rollback.

Per ulteriori informazioni sull'esecuzione dei comandi sui nodi gestiti, vedere Esecuzione di comandi tramite Systems Manager Run Command.