Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Migrer AWS IoT Greengrass V2 périphériques principaux vers des périphériques non root
Important
Cette rubrique décrit une approche de migration recommandée. Vous devrez peut-être adapter ces étapes à la configuration de votre appareil, à votre système d'exploitation et aux logiciels installés.
Par défaut, AWS IoT Greengrass s'exécute en tant qu'utilisateur root sur les appareils Linux. Vous pouvez améliorer la sécurité de vos appareils en migrant les appareils AWS IoT Greengrass principaux pour qu'ils s'exécutent en tant qu'utilisateur non root avec uniquement les fonctionnalités Linux requises. AWS IoT Greengrass Vous pouvez migrer un seul appareil ou étendre la migration à l'ensemble d'une flotte.
Considérations
Tenez compte des points suivants avant de migrer vers une solution non root :
-
Cette procédure de migration s'applique aux périphériques AWS IoT Greengrass principaux exécutant le AWS IoT Greengrass nucleus (Java-based) sous Linux avec systemd. Elle ne s'applique pas aux appareils exécutant AWS IoT Greengrass Nucleus Lite.
-
Testez la migration sur un seul appareil dans un environnement de développement avant de migrer votre parc de production.
Migrer un seul appareil
Cette procédure de migration suit l'approche décrite dansSolution 3 : configurer AWS IoT Greengrass V2 en tant que non-root avec séparation des utilisateurs des composants. Avant de commencer, remplissez les conditions requises décrites dans cette rubrique, notamment la configuration de sudoers qui permet à l'utilisateur non root d'exécuter des composants en tant qu'utilisateurs distincts.
Utilisez cette procédure pour migrer un seul appareil avant de migrer votre parc.
Étape 1 : Création de l'utilisateur et du groupe non root
Connectez-vous à votre appareil et créez l'utilisateur du système et le groupe qui AWS IoT Greengrass s'exécuteront en tant que. Remplacez user-name et group-name par les noms que vous souhaitez utiliser.
sudo groupadd --systemgroup-namesudo useradd --system --create-home --shell /sbin/nologin -ggroup-nameuser-name
Étape 2 : Sauvegarder la propriété du fichier
Arrêtez AWS IoT Greengrass et enregistrez la structure de propriété des fichiers actuelle afin de pouvoir la restaurer si vous devez revenir en arrière.
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
Note
Les commandes de cette rubrique sont utilisées /greengrass/v2 comme chemin AWS IoT Greengrass racine. Si vous l'avez installé AWS IoT Greengrass à un autre emplacement, remplacez-le /greengrass/v2 par votre chemin AWS IoT Greengrass racine actuel.
Étape 3 : modifier la propriété du fichier
Transférez la propriété du AWS IoT Greengrass répertoire à l'utilisateur non root.
sudo chown -Ruser-name:group-name/greengrass/v2
Étape 4 : créer le remplacement du drop-in systemd
Créez un répertoire et un fichier de configuration qui indiquent à systemd de s'exécuter en AWS IoT Greengrass tant qu'utilisateur non root avec les fonctionnalités Linux requises.
sudo mkdir -p /etc/systemd/system/greengrass.service.d
La migration utilise un fichier de remplacement intégré systemd à l'adresse. /etc/systemd/system/greengrass.service.d/10-nonroot.conf Un remplacement instantané remplace les paramètres du fichier de service de base sans le modifier directement. Cette modification configure systemd pour exécuter le AWS IoT Greengrass service en tant qu'utilisateur non root avec un ensemble limité de fonctionnalités Linux. La suppression du répertoire déroulant entraîne le retour de systemd au greengrass.service fichier de base, qui s'exécute en tant que root avec la configuration d'origine.
Créez le fichier /etc/systemd/system/greengrass.service.d/10-nonroot.conf avec le contenu suivant :
[Service] User=user-nameAmbientCapabilities=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
Pour plus d'informations sur ces directives systemd et les fonctionnalités requises, consultezSolution 3 : configurer AWS IoT Greengrass V2 en tant que non-root avec séparation des utilisateurs des composants.
Étape 5 : Rechargez systemd et démarrez AWS IoT Greengrass
Exécutez les commandes suivantes pour recharger le démon systemd et démarrer. AWS IoT Greengrass
sudo systemctl daemon-reload sudo systemctl start greengrass.service
Étape 6 : Vérifier la migration
Vérifiez qu'il AWS IoT Greengrass s'exécute en tant qu'utilisateur non root.
sudo systemctl status greengrass.service ps -ef | grep greengrass
La sortie montre l'utilisateur non root en tant que propriétaire du processus au lieu deroot.
Vérifiez ensuite que tous les composants déployés sont en cours d'exécution. Vous devez déployer le aws.greengrass.Cli composant sur l'appareil pour exécuter cette commande.
sudo /greengrass/v2/bin/greengrass-cli component list
Chaque composant doit indiquer une valeur State de RUNNING ouFINISHED. FINISHEDest l'état du terminal attendu pouraws.greengrass.Nucleus. Examinez tout composant dans l'ERROREDétat BROKEN ou avant de considérer que la migration est terminée.
Restaurer un seul appareil
Si vous devez effectuer une restauration AWS IoT Greengrass pour l'exécuter en tant qu'utilisateur root, supprimez le remplacement instantané, restaurez la propriété du fichier, puis redémarrez. 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
Exécutez à Étape 6 : Vérifier la migration nouveau les commandes de vérification depuis pour confirmer qu'il AWS IoT Greengrass s'exécute en tant qu'utilisateur root. Le processus doit apparaître root en tant que propriétaire.
Une fois que vous avez confirmé la réussite de la restauration, vous pouvez éventuellement nettoyer les artefacts de migration :
-
Répertoire de sauvegarde : vous pouvez le conserver
/opt/greengrass-backupsi vous prévoyez de réessayer la migration ultérieurement, ou de le supprimer :sudo rm -r /opt/greengrass-backup -
Non-root utilisateur et groupe : si vous ne prévoyez plus de vous exécuter AWS IoT Greengrass en tant qu'utilisateur non root, vous pouvez supprimer l'utilisateur et le groupe que vous avez créés à l'étape 1 :
sudo userdeluser-namesudo groupdelgroup-nameSi d'autres services ou composants utilisent cet utilisateur, ne le supprimez pas.
Migrer une flotte d'appareils
Après avoir vérifié la migration sur un seul appareil, vous pouvez l'étendre à l'ensemble de votre flotte. Choisissez l’une des méthodes suivantes :
Utiliser une option personnalisée AWS IoT Greengrass composant bootstrap
Vous pouvez créer un AWS IoT Greengrass composant personnalisé qui automatise les étapes de migration d'un seul appareil au sein de votre parc. Cette approche est autonome et utilise uniquement des AWS IoT Greengrass déploiements. Il ne nécessite pas d'outils externes tels que Systems Manager.
Le composant utilise le cycle de vie Bootstrap RequiresPrivilege défini surtrue, qui exécute le composant en tant que root lors du déploiement. Le script bootstrap effectue les mêmes opérations privilégiées que la procédure à périphérique unique :
-
Créez l'utilisateur et le groupe non root s'ils n'existent pas déjà.
-
Sauvegardez la structure de propriété des fichiers à des fins de restauration.
-
Remplacez la propriété du répertoire AWS IoT Greengrass racine par l'utilisateur non root.
-
Créez le fichier de remplacement drop-in systemd.
-
Rechargez le démon systemd.
-
Quittez avec le code 101 pour redémarrer l'appareil.
Important
Le composant doit se terminer avec le code 101, et non avec le code 100. Le code de sortie 100 redémarre uniquement le processus AWS IoT Greengrass JVM, qui utilise la configuration du service systemd déjà mise en cache en mémoire. Un redémarrage complet oblige systemd à lire le nouveau remplacement instantané sur le disque et à démarrer en AWS IoT Greengrass tant qu'utilisateur non root. Le redémarrage interrompt temporairement tous les services de l'appareil.
Rendez le composant idempotent afin que les redéploiements n'échouent pas si vous avez déjà migré l'appareil.
Une fois le déploiement de la migration terminé, vérifiez que vos appareils fonctionnent en tant qu'utilisateur non root. Pour de plus amples informations, veuillez consulter Étape 6 : Vérifier la migration. Vous pouvez déployer un composant de vérification qui vérifie l'utilisateur en cours d'exécution et rapporte le résultat, ou surveiller l'état du déploiement dans la AWS IoT Greengrass console.
Mettre en place un mécanisme de retour en arrière
Pour restaurer la configuration racine à distance sur l'ensemble de votre flotte, votre composant de migration doit configurer un mécanisme de restauration. Une approche consiste à utiliser systemd pour surveiller un fichier de déclenchement. Cette approche nécessite les ressources système suivantes :
-
Un script de restauration qui supprime le remplacement automatique, restaure la propriété d'origine du fichier à partir de la sauvegarde, recharge le démon systemd et redémarre en tant que superutilisateur. AWS IoT Greengrass
-
Un service systemd oneshot qui exécute le script de restauration en tant que superutilisateur. Un service One-Shot exécute une seule tâche, puis se ferme, au lieu de fonctionner comme un démon de longue durée.
-
Une unité de chemin systemd qui surveille un chemin de fichier spécifique, tel que
/greengrass/v2/rollback/.rollback-trigger. Lorsque le fichier apparaît, l'unité de chemin démarre automatiquement le service de restauration en un coup.
Une fois ce mécanisme en place, vous pouvez restaurer un périphérique en déployant un AWS IoT Greengrass composant simple qui crée le fichier de déclenchement. L'unité de chemin systemd détecte le fichier, exécute le service de restauration en tant qu'utilisateur root et rétablit sa AWS IoT Greengrass configuration racine d'origine.
Utilisation AWS Systems Manager
Si vous utilisez Systems Manager pour gérer vos appareils, vous pouvez créer un document SSM qui automatise les étapes de migration d'un seul appareil. Comme SSM fonctionne indépendamment de AWS IoT Greengrass, il peut arrêter et redémarrer le AWS IoT Greengrass service directement sans redémarrer l'appareil.
Votre document SSM doit répondre aux exigences suivantes :
-
Arrêtez AWS IoT Greengrass et sauvegardez la configuration de service actuelle et la structure de propriété des fichiers.
-
Créez l'utilisateur et le groupe non root.
-
Remplacez le propriétaire du AWS IoT Greengrass répertoire par un utilisateur non root.
-
Créez le fichier de remplacement drop-in systemd.
-
Rechargez le démon systemd et démarrez. AWS IoT Greengrass
-
Vérifiez qu'il AWS IoT Greengrass a bien démarré en tant qu'utilisateur non root.
Pour exécuter la migration sur l'ensemble de votre parc, utilisez la commande d'exécution de Systems Manager pour exécuter le document SSM sur vos appareils à l'aide de balises ou de groupes de ressources. Vous pouvez surveiller l'état d'exécution des commandes dans la console Systems Manager, qui affiche le résultat pour chaque machine cible, y compris les éventuelles erreurs.
Pour revenir en arrière, créez un document SSM distinct qui s'arrête AWS IoT Greengrass, supprime le remplacement de la liste déroulante, restaure la propriété du fichier d'origine, recharge le démon systemd et redémarre en tant que superutilisateur. AWS IoT Greengrass Exécutez ce document sur les appareils dont vous avez besoin pour revenir en arrière.
Pour plus d'informations sur l'exécution de commandes sur des nœuds gérés, consultez Exécution de commandes à l'aide de Systems Manager Run Command.