

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Migrar AWS IoT Greengrass V2 dispositivos principais para dispositivos não root
<a name="migrate-to-nonroot"></a>

**Importante**  
Este tópico descreve uma abordagem de migração recomendada. Talvez seja necessário adaptar essas etapas para a configuração do dispositivo, sistema operacional e software instalado.

Por padrão, AWS IoT Greengrass é executado como usuário root em dispositivos Linux. Você pode melhorar a postura de segurança de seus dispositivos migrando dispositivos AWS IoT Greengrass principais para serem executados como um usuário não root com apenas os recursos Linux necessários. AWS IoT Greengrass Você pode migrar um único dispositivo ou escalar a migração em uma frota.

## Considerações
<a name="migrate-nonroot-considerations"></a>

Considere o seguinte antes de migrar para o não-root:
+ Esse procedimento de migração se aplica aos dispositivos AWS IoT Greengrass principais que executam o AWS IoT Greengrass nucleus (Java-based) no Linux com systemd. Não se aplica a dispositivos que executam o AWS IoT Greengrass nucleus lite.
+ Teste a migração em um único dispositivo em um ambiente de desenvolvimento antes de migrar sua frota de produção.

## Migre um único dispositivo
<a name="migrate-nonroot-single-device"></a>

Esse procedimento de migração segue a abordagem descrita em[Solução 3: configurar AWS IoT Greengrass V2 como não raiz com separação de usuários de componentes](setup-greengrass-non-root.md#non-root-solution-3). Antes de começar, preencha os pré-requisitos desse tópico, incluindo a configuração sudoers que permite que o usuário não root execute componentes como usuários separados.

Use esse procedimento para migrar um único dispositivo antes de migrar sua frota.

### Etapa 1: criar o usuário e o grupo não root
<a name="migrate-nonroot-step1"></a>

Conecte-se ao seu dispositivo e crie o usuário e o grupo do sistema que são AWS IoT Greengrass executados como. {{group-name}}Substitua {{user-name}} e pelos nomes que você deseja usar.

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

### Etapa 2: fazer backup da propriedade do arquivo
<a name="migrate-nonroot-step2"></a>

Pare AWS IoT Greengrass e salve a estrutura atual de propriedade do arquivo para que você possa restaurá-la se precisar revertê-la.

```
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**  
Os comandos neste tópico são usados `/greengrass/v2` como caminho AWS IoT Greengrass raiz. Se você instalou AWS IoT Greengrass em um local diferente, `/greengrass/v2` substitua pelo seu caminho AWS IoT Greengrass raiz real.

### Etapa 3: alterar a propriedade do arquivo
<a name="migrate-nonroot-step3"></a>

Transfira a propriedade do AWS IoT Greengrass diretório para o usuário não root.

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

### Etapa 4: criar a substituição suspensa do systemd
<a name="migrate-nonroot-step4"></a>

Crie um diretório suspenso e um arquivo de configuração que instrua o systemd a ser executado AWS IoT Greengrass como usuário não root com os recursos necessários do Linux.

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

A migração usa um arquivo de substituição suspenso do systemd em. `/etc/systemd/system/greengrass.service.d/10-nonroot.conf` Uma substituição direta substitui as configurações no arquivo de serviço básico sem modificá-lo diretamente. Essa substituição configura o systemd para executar o AWS IoT Greengrass serviço como usuário não root com um conjunto limitado de recursos do Linux. A remoção do diretório drop-in faz com que o systemd reverta para o `greengrass.service` arquivo base, que é executado como root com a configuração original.

Crie o arquivo `/etc/systemd/system/greengrass.service.d/10-nonroot.conf` com o seguinte conteúdo:

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

Para obter informações sobre essas diretivas systemd e os recursos necessários, consulte. [Solução 3: configurar AWS IoT Greengrass V2 como não raiz com separação de usuários de componentes](setup-greengrass-non-root.md#non-root-solution-3)

### Etapa 5: Recarregue o systemd e inicie AWS IoT Greengrass
<a name="migrate-nonroot-step5"></a>

Execute os comandos a seguir para recarregar o daemon systemd e iniciá-lo. AWS IoT Greengrass

```
sudo systemctl daemon-reload
sudo systemctl start greengrass.service
```

### Etapa 6: Verificar a migração
<a name="migrate-nonroot-step6"></a>

Confirme se AWS IoT Greengrass está sendo executado como usuário não root.

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

A saída mostra o usuário não root como proprietário do processo em vez de`root`.

Em seguida, confirme se todos os componentes implantados estão em execução. Você deve implantar o `aws.greengrass.Cli` componente no dispositivo para executar esse comando.

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

Cada componente deve relatar um `State` de `RUNNING` ou`FINISHED`. `FINISHED`é o estado terminal esperado para`aws.greengrass.Nucleus`. Investigue qualquer componente no `ERRORED` estado `BROKEN` ou antes de considerar a migração concluída.

### Reverter um único dispositivo
<a name="migrate-nonroot-single-rollback"></a>

Se você precisar restaurar AWS IoT Greengrass para executar como root, remova a substituição suspensa, restaure a propriedade do arquivo e reinicie. 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
```

Execute os comandos de verificação [Etapa 6: Verificar a migração](#migrate-nonroot-step6) novamente para confirmar se AWS IoT Greengrass está sendo executado como root. O processo deve aparecer `root` como proprietário.

Depois de confirmar que a reversão foi bem-sucedida, você pode, opcionalmente, limpar os artefatos de migração:
+ **Diretório de backup ** — você pode manter `/opt/greengrass-backup` se planeja tentar novamente a migração mais tarde ou removê-lo:

  ```
  sudo rm -r /opt/greengrass-backup
  ```
+ **Non-root usuário e grupo ** — Se você não planeja mais executar AWS IoT Greengrass como usuário não root, você pode remover o usuário e o grupo que você criou na Etapa 1:

  ```
  sudo userdel {{user-name}}
  sudo groupdel {{group-name}}
  ```

  Se outros serviços ou componentes usarem esse usuário, não o remova.

## Migre uma frota de dispositivos
<a name="migrate-nonroot-fleet"></a>

Depois de verificar a migração em um único dispositivo, você pode escalar a migração em toda a sua frota. Escolha um dos seguintes métodos:
+ [Use um personalizado AWS IoT Greengrass componente bootstrap](#migrate-nonroot-fleet-bootstrap)
+ [Use AWS Systems Manager](#migrate-nonroot-fleet-ssm)

### Use um personalizado AWS IoT Greengrass componente bootstrap
<a name="migrate-nonroot-fleet-bootstrap"></a>

Você pode criar um AWS IoT Greengrass componente personalizado que automatiza as etapas de migração de um único dispositivo em toda a sua frota. Essa abordagem é independente e usa somente AWS IoT Greengrass implantações. Ele não requer ferramentas externas, como o Systems Manager.

O componente usa o ciclo de vida do Bootstrap com `RequiresPrivilege` set to`true`, que executa o componente como raiz durante a implantação. O script de bootstrap executa as mesmas operações privilegiadas que o procedimento de dispositivo único:
+ Crie o usuário e o grupo não root se eles ainda não existirem.
+ Faça backup da estrutura de propriedade do arquivo para reversão.
+ Altere a propriedade do diretório AWS IoT Greengrass raiz para o usuário não raiz.
+ Crie o arquivo de substituição suspenso systemd.
+ Recarregue o daemon systemd.
+ Saia com o código 101 para reinicializar o dispositivo.

**Importante**  
O componente deve sair com o código 101, não 100. O código de saída 100 reinicia somente o processo AWS IoT Greengrass JVM, que usa a configuração do serviço systemd já armazenada em cache na memória. Uma reinicialização completa força o systemd a ler a nova substituição drop-in do disco e iniciar AWS IoT Greengrass como usuário não root. A reinicialização interrompe temporariamente todos os serviços no dispositivo.

Torne o componente idempotente para que as reimplantações não falhem se você já tiver migrado o dispositivo.

Depois que a implantação da migração for concluída, verifique se seus dispositivos estão sendo executados como usuário não root. Para obter mais informações, consulte [Etapa 6: Verificar a migração](#migrate-nonroot-step6). Você pode implantar um componente de verificação que verifica o usuário em execução e relata o resultado, ou monitorar o status da implantação no AWS IoT Greengrass console.

#### Configurar um mecanismo de reversão
<a name="migrate-nonroot-fleet-bootstrap-rollback"></a>

Para restaurar a configuração raiz remotamente em toda a sua frota, seu componente de migração deve configurar um mecanismo de reversão. Uma abordagem é usar o systemd para monitorar um arquivo acionador. Essa abordagem requer os seguintes recursos do systemd:
+ Um script * de reversão * que remove a substituição imediata, restaura a propriedade original do arquivo do backup, recarrega o daemon systemd e reinicia como root. AWS IoT Greengrass 
+ Um serviço systemd * oneshot * que executa o script de reversão como root. Um serviço único executa uma única tarefa e depois sai, em vez de ser executado como um daemon de longa duração.
+ Uma unidade de * caminho systemd * que monitora um caminho de arquivo específico, como`/greengrass/v2/rollback/.rollback-trigger`. Quando o arquivo aparece, a unidade de caminho inicia automaticamente o serviço de reversão oneshot.

Com esse mecanismo instalado, você pode reverter um dispositivo implantando um AWS IoT Greengrass componente simples que cria o arquivo acionador. A unidade de caminho systemd detecta o arquivo, executa o serviço de reversão como raiz e restaura AWS IoT Greengrass sua configuração raiz original.

### Use AWS Systems Manager
<a name="migrate-nonroot-fleet-ssm"></a>

Se você usar o Systems Manager para gerenciar seus dispositivos, poderá criar um documento SSM que automatize as etapas de migração de um único dispositivo. Como o SSM é executado de forma independente AWS IoT Greengrass, ele pode parar e reiniciar o AWS IoT Greengrass serviço diretamente sem reinicializar o dispositivo.

Seu documento SSM deve atender aos seguintes requisitos:
+ Pare AWS IoT Greengrass e faça backup da configuração atual do serviço e da estrutura de propriedade do arquivo.
+ Crie o usuário e o grupo não root.
+ Altere a propriedade do AWS IoT Greengrass diretório para o usuário não root.
+ Crie o arquivo de substituição suspenso systemd.
+ Recarregue o daemon systemd e inicie. AWS IoT Greengrass
+ Verifique se AWS IoT Greengrass foi iniciado com êxito como usuário não root.

Para executar a migração em toda a sua frota, use o Systems Manager Run Command para executar o documento SSM em seus dispositivos usando tags ou grupos de recursos. Você pode monitorar o status de execução do comando no console do Systems Manager, que mostra o resultado de cada dispositivo de destino, incluindo quaisquer erros.

Para reverter, crie um documento SSM separado que interrompa AWS IoT Greengrass, remova a substituição imediata, restaure a propriedade original do arquivo, recarregue o daemon systemd e reinicie como root. AWS IoT Greengrass Execute este documento nos dispositivos que você precisa reverter.

Para obter mais informações sobre a execução de comandos em nós gerenciados, consulte [ Executando comandos usando o Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html).