View a markdown version of this page

Migración AWS IoT Greengrass V2 dispositivos principales a dispositivos no rooteados - AWS IoT Greengrass

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Migración AWS IoT Greengrass V2 dispositivos principales a dispositivos no rooteados

importante

En este tema se describe un enfoque de migración recomendado. Es posible que tengas que adaptar estos pasos a la configuración del dispositivo, el sistema operativo y el software instalado.

De forma predeterminada, AWS IoT Greengrass se ejecuta como usuario raíz en dispositivos Linux. Puede mejorar la postura de seguridad de sus dispositivos migrando los dispositivos AWS IoT Greengrass principales para que se ejecuten como usuarios no root con solo las capacidades de Linux necesarias. AWS IoT Greengrass Puede migrar un solo dispositivo o escalar la migración a toda una flota.

Consideraciones

Tenga en cuenta lo siguiente antes de migrar a un dispositivo que no sea root:

  • Este procedimiento de migración se aplica a los dispositivos AWS IoT Greengrass principales que ejecutan AWS IoT Greengrass nucleus (Java-based) en Linux con systemd. No se aplica a los dispositivos que ejecutan AWS IoT Greengrass nucleus lite.

  • Pruebe la migración en un solo dispositivo en un entorno de desarrollo antes de migrar su flota de producción.

Migre un solo dispositivo

Este procedimiento de migración sigue el enfoque descrito enSolución 3: configurar AWS IoT Greengrass V2 como no root con separación de los usuarios de los componentes. Antes de empezar, complete los requisitos previos de ese tema, incluida la configuración de sudoers, que permite al usuario no root ejecutar los componentes como usuarios independientes.

Utilice este procedimiento para migrar un único dispositivo antes de migrar la flota.

Paso 1: Cree el usuario y el grupo no root

Conéctese a su dispositivo y cree el usuario y el grupo del sistema que AWS IoT Greengrass se ejecuta como. Sustituya user-name y group-name por los nombres que desee utilizar.

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

Paso 2: Haga una copia de seguridad de la propiedad del archivo

Detenga AWS IoT Greengrass y guarde la estructura actual de propiedad de los archivos para poder restaurarla si necesita revertirla.

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

Los comandos de este tema /greengrass/v2 se utilizan como ruta AWS IoT Greengrass raíz. Si lo instaló en AWS IoT Greengrass una ubicación diferente, /greengrass/v2 sustitúyala por la ruta AWS IoT Greengrass raíz actual.

Paso 3: Cambia la propiedad del archivo

Transfiera la propiedad del AWS IoT Greengrass directorio al usuario no root.

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

Paso 4: Cree la anulación automática de systemd

Cree un directorio desplegable y un archivo de configuración que indiquen a systemd que se ejecute AWS IoT Greengrass como usuario no root con las capacidades de Linux requeridas.

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

La migración utiliza un archivo de anulación desplegable de Systemd en. /etc/systemd/system/greengrass.service.d/10-nonroot.conf Una anulación automática reemplaza la configuración del archivo de servicio base sin modificarlo directamente. Esta anulación configura systemd para ejecutar el AWS IoT Greengrass servicio como usuario no root con un conjunto limitado de capacidades de Linux. Al eliminar el directorio desplegable, systemd vuelve al greengrass.service archivo base, que se ejecuta como root con la configuración original.

Cree el archivo /etc/systemd/system/greengrass.service.d/10-nonroot.conf con el siguiente contenido:

[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 obtener información sobre estas directivas de systemd y las capacidades necesarias, consulteSolución 3: configurar AWS IoT Greengrass V2 como no root con separación de los usuarios de los componentes.

Paso 5: Recargue systemd e inicie AWS IoT Greengrass

Ejecute los siguientes comandos para volver a cargar el daemon systemd e iniciar. AWS IoT Greengrass

sudo systemctl daemon-reload sudo systemctl start greengrass.service

Paso 6: Verificar la migración

Confirme que AWS IoT Greengrass se está ejecutando como usuario no root.

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

El resultado muestra al usuario no root como propietario del proceso en lugar de. root

A continuación, confirme que todos los componentes desplegados se estén ejecutando. Debe implementar el aws.greengrass.Cli componente en el dispositivo para ejecutar este comando.

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

Cada componente debe indicar un valor State de RUNNING oFINISHED. FINISHEDes el estado terminal esperado paraaws.greengrass.Nucleus. Investigue cualquier componente del ERRORED estado BROKEN o antes de considerar que la migración se ha completado.

Revierta un solo dispositivo

Si necesitas restaurar para AWS IoT Greengrass ejecutarlo como usuario root, elimina la anulación automática, restablece la propiedad del archivo y reinicia. 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

Paso 6: Verificar la migraciónVuelva a ejecutar los comandos de verificación desde para confirmar que AWS IoT Greengrass se está ejecutando como usuario root. El proceso debe mostrarse root como propietario.

Tras confirmar que la reversión se ha realizado correctamente, si lo desea, puede eliminar los artefactos de migración:

  • Directorio de respaldo: puedes conservarlo /opt/greengrass-backup si piensas volver a intentar la migración más adelante o eliminarlo:

    sudo rm -r /opt/greengrass-backup
  • Non-root usuario y grupo: si ya no tienes pensado seguir ejecutándote AWS IoT Greengrass como usuario que no sea root, puedes eliminar el usuario y el grupo que creaste en el paso 1:

    sudo userdel user-name sudo groupdel group-name

    Si otros servicios o componentes utilizan este usuario, no lo elimines.

Migre una flota de dispositivos

Después de verificar la migración en un solo dispositivo, puede escalar la migración en toda su flota. Elija uno de los siguientes métodos:

Usa un personalizado AWS IoT Greengrass componente bootstrap

Puede crear un AWS IoT Greengrass componente personalizado que automatice los pasos de migración de un solo dispositivo en toda su flota. Este enfoque es autónomo y solo utiliza implementaciones. AWS IoT Greengrass No requiere herramientas externas como Systems Manager.

El componente utiliza el ciclo de vida de Bootstrap con el valor RequiresPrivilege establecido entrue, que ejecuta el componente como usuario root durante la implementación. El script de arranque realiza las mismas operaciones privilegiadas que el procedimiento para un solo dispositivo:

  • Cree el usuario y el grupo no root si aún no existen.

  • Haga una copia de seguridad de la estructura de propiedad de los archivos para revertirlos.

  • Cambie la propiedad del directorio AWS IoT Greengrass raíz al usuario no root.

  • Cree el archivo de anulación desplegable de systemd.

  • Vuelva a cargar el daemon systemd.

  • Salga con el código 101 para reiniciar el dispositivo.

importante

El componente debe salir con el código 101, no con el 100. El código de salida 100 reinicia solo el proceso de AWS IoT Greengrass JVM, que utiliza la configuración del servicio systemd ya almacenada en caché en la memoria. Un reinicio completo obliga a systemd a leer la nueva anulación automática desde el disco y a empezar como usuario no root. AWS IoT Greengrass El reinicio interrumpe temporalmente todos los servicios del dispositivo.

Haga que el componente sea idempotente para que las reimplementaciones no fallen si ya ha migrado el dispositivo.

Una vez finalizada la implementación de la migración, compruebe que sus dispositivos se estén ejecutando como usuarios no root. Para obtener más información, consulte Paso 6: Verificar la migración. Puedes implementar un componente de verificación que compruebe al usuario en ejecución e informe del resultado, o monitorizar el estado de la implementación en la AWS IoT Greengrass consola.

Configure un mecanismo de reversión

Para restaurar la configuración raíz de forma remota en toda su flota, su componente de migración debe configurar un mecanismo de reversión. Un enfoque consiste en utilizar systemd para supervisar la existencia de un archivo de activación. Este enfoque requiere los siguientes recursos de systemd:

  • Un script de reversión que elimina la anulación automática, restaura la propiedad original del archivo desde la copia de seguridad, vuelve a cargar el daemon de systemd y lo reinicia como usuario root. AWS IoT Greengrass

  • Un servicio systemd oneshot que ejecuta el script de reversión como usuario root. Un servicio oneshot ejecuta una sola tarea y, a continuación, se cierra, en lugar de ejecutarse como un daemon de larga duración.

  • Una unidad de rutas de systemd que monitorea una ruta de archivo específica, como. /greengrass/v2/rollback/.rollback-trigger Cuando aparece el archivo, la unidad de ruta inicia automáticamente el servicio de reversión de OneShot.

Con este mecanismo, puede deshacer un dispositivo mediante la implementación de un AWS IoT Greengrass componente simple que cree el archivo de activación. La unidad de ruta systemd detecta el archivo, ejecuta el servicio de reversión como usuario root y AWS IoT Greengrass restaura su configuración raíz original.

Uso AWS Systems Manager

Si usa Systems Manager para administrar sus dispositivos, puede crear un documento SSM que automatice los pasos de migración de un solo dispositivo. Como SSM se ejecuta de forma independiente AWS IoT Greengrass, puede detener y reiniciar el AWS IoT Greengrass servicio directamente sin necesidad de reiniciar el dispositivo.

Su documento SSM debe cumplir los siguientes requisitos:

  • Detenga AWS IoT Greengrass y haga una copia de seguridad de la configuración actual del servicio y de la estructura de propiedad de los archivos.

  • Cree el usuario y el grupo no root.

  • Cambie la propiedad del AWS IoT Greengrass directorio al usuario no root.

  • Cree el archivo de anulación desplegable de systemd.

  • Vuelva a cargar el daemon de systemd y comience. AWS IoT Greengrass

  • Compruebe que se AWS IoT Greengrass inició correctamente como usuario no root.

Para ejecutar la migración en toda su flota, utilice el comando Run Command de Systems Manager para ejecutar el documento SSM en sus dispositivos mediante etiquetas o grupos de recursos. Puede supervisar el estado de ejecución de los comandos en la consola de Systems Manager, que muestra el resultado de cada dispositivo de destino, incluidos los errores.

Para revertirlo, cree un documento SSM independiente que se detenga AWS IoT Greengrass, elimine la anulación automática, restaure la propiedad original del archivo, vuelva a cargar el daemon systemd y se reinicie como usuario root. AWS IoT Greengrass Ejecute este documento en los dispositivos que necesite deshacer.

Para obtener más información sobre la ejecución de comandos en los nodos gestionados, consulte Ejecución de comandos mediante el comando de ejecución de Systems Manager.