

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.

# Tutorial: Proteja Nucleus Lite de AWS IoT Greengrass con Trusted Platform Module (TPM)
<a name="gg-lite-with-tpm-tutorial"></a>

En este tutorial se explica cómo habilitar y configurar la compatibilidad con el módulo de plataforma segura (TPM) para AWS IoT Greengrass nucleus lite. El TPM proporciona una raíz de confianza basada en hardware para el almacenamiento seguro de claves. Esta función de seguridad protege las operaciones criptográficas y las credenciales confidenciales, lo que mejora la seguridad e integridad de los dispositivos.

Cuando complete esta integración, su dispositivo AWS IoT Greengrass principal utilizará claves privadas protegidas por TPM para su identidad y comunicación con los servicios. AWS IoT 

Para obtener más información sobre la seguridad de AWS IoT Greengrass los dispositivos, consulte. [Seguridad en AWS IoT Greengrass](security.md)

## Requisitos previos
<a name="lite-tpm-prerequisites"></a>

Necesitará lo siguiente para completar este tutorial:
+ [Un dispositivo compatible con Linux con hardware TPM 2.0 o NitroTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html)
+ Una máquina para desarrolladores con Greengrass Nucleus Lite instalado. Para obtener más información, consulte [Instalación del software AWS IoT Greengrass principal (consola).](https://docs.aws.amazon.com//greengrass/v2/developerguide/install-greengrass-v2-console.html)
+ Las instrucciones de este tutorial están definidas para Ubuntu 24.04 LTS.
+ Cualquier distribución de Linux que sea compatible con la [pila de TPM2 software de Linux](https://tpm2-software.github.io/) puede admitir este mecanismo.
+ Una máquina de desarrollador con la [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) instalada y configurada con permisos para que:
  + Cree y administre AWS IoT recursos
  + Cree y actualice los roles y las políticas de IAM
+ Privilegios de raíz o sudo en el dispositivo.

Este tutorial contiene instrucciones sobre cómo utilizar el TPM2 chip como módulo de seguridad de hardware (HSM) para crear una clave privada y la CSR, que se utiliza para crear el certificado del objeto AWS IoT .

## Paso 1: Configurar una instancia de NitroTPM
<a name="lite-tpm-step1"></a>

1. Configura una instancia de NitroTPM. [Para obtener más información, consulte NitroTPM.](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/enable-nitrotpm-support-on-ami.html)

1. Lance la última instancia con la AMI personalizada creada en el paso anterior.
**importante**  
Cuando se conecte con SSH, utilice el `ubuntu` usuario en lugar de`root`.

1. Compruebe que el dispositivo TPM está presente y funciona ejecutando el siguiente comando:

   ```
   ls -la /dev/tpm*
   ```

   Deberías ver los `/dev/tpm0` `/dev/tpmrm0` dispositivos.

## Paso 2: Instalar y configurar las herramientas de TPM
<a name="lite-tpm-step2"></a>

1. Instale los paquetes necesarios ejecutando el siguiente comando:

   ```
   sudo apt update
   sudo apt install tpm2-openssl tpm2-tools tpm2-abrmd libtss2-tcti-tabrmd0
   ```

1. Verifique los permisos del dispositivo TPM ejecutando el siguiente comando:

   ```
   ls -l /dev/tpm0    # Should be owned by tss:root with permissions 0660
   ls -l /dev/tpmrm0  # Should be owned by tss:tss with permissions 0660
   ```

## Paso 3: Configurar el proveedor de OpenSSL TPM2
<a name="lite-tpm-step3"></a>

1. Edite el archivo de configuración de OpenSSL:

   ```
   sudo vi /etc/ssl/openssl.cnf
   ```

1. Agregue la siguiente configuración:

   ```
   [openssl_init]
   providers = provider_sect
   
   [provider_sect]
   default = default_sect
   tpm2 = tpm2_sect
   
   [default_sect]
   activate = 1
   
   [tpm2_sect]
   identity = tpm2
   module = /usr/local/lib64/tpm2.so
   activate = 1
   ```

1. Ajuste la ruta del módulo según sea necesario. Para encontrar la ruta correcta, utilice:

   ```
   find /usr -name "tpm2.so"
   ```

## Paso 4: generar claves TPM persistentes
<a name="lite-tpm-step4"></a>

1. Cree una clave principal ejecutando el siguiente comando:

   ```
   sudo tpm2_createprimary -C o -c primary.ctx
   ```

1. Cree un objeto de clave ECC ejecutando el siguiente comando:

   ```
   sudo tpm2_create -C primary.ctx -g sha256 -G ecc256 -r device.priv -u device.pub
   ```

1. Cargue la clave ejecutando el siguiente comando:

   ```
   sudo tpm2_load -C primary.ctx -r device.priv -u device.pub -c device.ctx
   ```

1. Haz que la clave sea persistente ejecutando el siguiente comando:

   ```
   sudo tpm2_evictcontrol -C o -c device.ctx 0x81000002
   ```

   Esto crea una clave persistente con el identificador (tipo`0x81000002`).

## Paso 5: generar una solicitud de firma de certificado (CSR)
<a name="lite-tpm-step5"></a>

En este paso, utilizará la clave privada TPM2 protegida para generar una solicitud de firma de certificado (CSR).

1. Genere una CSR con la clave TPM:

   ```
   openssl req -new -provider tpm2 -key "handle:0x81000002" \
       -out device.csr \
       -subj "/CN=TPMThing"
   ```

1. `0x81000002`Sustitúyala por el valor de identificador que hayas elegido y por el `TPMThing` nombre de la cosa que desees.

## Paso 6: Crea el certificado a partir de CSR
<a name="lite-tpm-step6"></a>

1. En tu ordenador de desarrollo, crea una carpeta donde descargaste el certificado de la AWS IoT cosa.

   ```
   mkdir greengrass-v2-certs
   ```

1. Utilice el archivo CSR para crear y descargar el certificado del dispositivo en AWS IoT su ordenador de desarrollo.

   ```
   aws iot create-certificate-from-csr \
     --set-as-active \
     --certificate-signing-request file://path_to_device.csr \
     --certificate-pem-outfile greengrass-v2-certs/device.pem.crt
   ```

   Si la solicitud se realiza correctamente, la respuesta tiene un aspecto similar al del siguiente ejemplo:

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----"
   }
   ```

## Paso 7: Configurar Greengrass Nucleus Lite con compatibilidad con TPM
<a name="lite-tpm-step7"></a>

Para habilitar la compatibilidad con TPM en Nucleus Lite de Greengrass, realice los siguientes cambios:

1. Configure los permisos de usuario añadiendo el `ggcore` usuario al `tss` grupo para el acceso al TPM:

   ```
   sudo usermod -a -G tss ggcore
   ```

1. Actualice el directorio de credenciales siguiendo estos pasos:
   + Elimine el archivo de clave privada del directorio de credenciales.
     + Como utilizamos claves TPM persistentes, no es necesario copiar ningún archivo de clave privada.
   + Copie la nueva `device.pem.crt` en ese directorio de credenciales.

1. `config.yaml`Edítelo con la siguiente configuración específica de TPM:

   ```
   system:
       privateKeyPath: "handle:0x81000002" # Use your chosen handle
       certificateFilePath: "" # Replace with the path of device.pem.crt
       ...
   ```

1. Reinicie su Greengrass Nucleus Lite ejecutando el siguiente comando:

   ```
   systemctl restart greengrass-lite.target
   ```

## Resolución de problemas
<a name="lite-tpm-troubleshooting"></a>

Si tiene problemas durante la configuración o el funcionamiento de su AWS IoT Greengrass dispositivo TPM2 compatible, pruebe los siguientes pasos de solución de problemas:

**No se encuentra el dispositivo TPM (cuando se utiliza NitroTPM)**

Si no `/dev/tpm0` está presente, lleve a cabo los siguientes pasos:

1. Comprueba que utilizas un tipo de instancia compatible con NitrotPM.

1. Asegúrese de que la AMI se haya creado con`--tpm-support v2.0`.

1. Compruebe que la instancia se lanzó desde la AMI personalizada.

**Errores de permiso denegado**

Si encuentra errores de acceso al TPM, haga lo siguiente:

1. Compruebe que el usuario está en el `tss` grupo:`groups $USER`.

1. Compruebe los permisos del dispositivo TPM mediante el siguiente comando:

   ```
   ls -l /dev/tpm*
   ```

1. Compruebe que ha cerrado sesión y ha vuelto a iniciarla después de añadirla al `tss` grupo.

**Problemas con el proveedor de OpenSSL**

Si no encuentra el proveedor de TPM, haga lo siguiente:

1. Compruebe `tpm2.so` la ruta en. `/etc/ssl/openssl.cnf`

1. Compruebe la instalación del proveedor ejecutando el siguiente comando:

   ```
   openssl list -providers
   ```

1. Compruebe que el `tpm2-openssl` paquete esté instalado correctamente.

## Siguientes pasos
<a name="lite-tpm-next-steps"></a>

Ahora que has integrado correctamente tu dispositivo AWS IoT Greengrass principal TPM2, puedes:
+ Implemente componentes en su AWS IoT Greengrass dispositivo seguro
+ Configure AWS IoT Greengrass dispositivos adicionales con TPM2 la integración

Para obtener más información sobre la seguridad de AWS IoT Greengrass los dispositivos, consulte[Seguridad en AWS IoT Greengrass](security.md).