

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
<a name="migrate-to-nonroot"></a>

**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
<a name="migrate-nonroot-considerations"></a>

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
<a name="migrate-nonroot-single-device"></a>

Cette procédure de migration suit l'approche décrite dans[Solution 3 : configurer AWS IoT Greengrass V2 en tant que non-root avec séparation des utilisateurs des composants](setup-greengrass-non-root.md#non-root-solution-3). 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
<a name="migrate-nonroot-step1"></a>

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 --system {{group-name}}
sudo useradd --system --create-home --shell /sbin/nologin -g {{group-name}} {{user-name}}
```

### Étape 2 : Sauvegarder la propriété du fichier
<a name="migrate-nonroot-step2"></a>

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
<a name="migrate-nonroot-step3"></a>

Transférez la propriété du AWS IoT Greengrass répertoire à l'utilisateur non root.

```
sudo chown -R {{user-name}}:{{group-name}} /greengrass/v2
```

### Étape 4 : créer le remplacement du drop-in systemd
<a name="migrate-nonroot-step4"></a>

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-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
```

Pour plus d'informations sur ces directives systemd et les fonctionnalités requises, consultez[Solution 3 : configurer AWS IoT Greengrass V2 en tant que non-root avec séparation des utilisateurs des composants](setup-greengrass-non-root.md#non-root-solution-3).

### Étape 5 : Rechargez systemd et démarrez AWS IoT Greengrass
<a name="migrate-nonroot-step5"></a>

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
<a name="migrate-nonroot-step6"></a>

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 de`root`.

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` ou`FINISHED`. `FINISHED`est l'état du terminal attendu pour`aws.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
<a name="migrate-nonroot-single-rollback"></a>

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](#migrate-nonroot-step6) 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-backup` si 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 userdel {{user-name}}
  sudo groupdel {{group-name}}
  ```

  Si d'autres services ou composants utilisent cet utilisateur, ne le supprimez pas.

## Migrer une flotte d'appareils
<a name="migrate-nonroot-fleet"></a>

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](#migrate-nonroot-fleet-bootstrap)
+ [Utilisation AWS Systems Manager](#migrate-nonroot-fleet-ssm)

### Utiliser une option personnalisée AWS IoT Greengrass composant bootstrap
<a name="migrate-nonroot-fleet-bootstrap"></a>

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 sur`true`, 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](#migrate-nonroot-step6). 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
<a name="migrate-nonroot-fleet-bootstrap-rollback"></a>

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
<a name="migrate-nonroot-fleet-ssm"></a>

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](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html).