Tutorial: Proteja Greengrass Nucleus con Trusted Platform Module (TPM) - 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.

Tutorial: Proteja Greengrass Nucleus con Trusted Platform Module (TPM)

Estos tutoriales contienen instrucciones sobre cómo usar el TPM2 chip como módulo de seguridad de hardware (HSM) para crear una clave privada y una CSR. El cual se utiliza para Creación del certificado del objeto.

Estos tutoriales le muestran cómo mejorar la seguridad de los dispositivos mediante la configuración del software AWS IoT Greengrass principal (Greengrass Nucleus) con un módulo de plataforma segura (TPM) mediante la interfaz PKCS #11. Esta integración del TPM garantiza que las claves privadas y los certificados utilizados para identificar los dispositivos y conectarse a ellos AWS IoT Core se almacenen de forma segura en un hardware a prueba de manipulaciones, lo que evita su extracción con fines de suplantación de identidad u otras actividades maliciosas.

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

Para obtener más información acerca de la seguridad de los dispositivos de Greengrass, consulte Seguridad en  AWS IoT Greengrass.

Requisitos previos

Necesitará lo siguiente para completar este tutorial:

  • Un dispositivo compatible con Linux con hardware TPM 2.0 o firmware TPM 2.0.

  • Las instrucciones de este tutorial están definidas para Ubuntu 24.04 LTS.

  • Una máquina de desarrollador con permisos AWS CLI instalados y configurados para:

    • Crear y administrar AWS IoT recursos

    • Cree y actualice los roles y las políticas de IAM

  • La versión 8 o posterior del Entorno de ejecución de Java (JRE) instalado en su dispositivo.

  • Los siguientes paquetes de software instalados en su dispositivo:

    • curl

    • jq

  • Privilegios de raíz o sudo en el dispositivo.

Paso 1: Instalar TPM2 herramientas y dependencias

En este paso, instalará las herramientas y bibliotecas de TPM2 software necesarias.

  1. Actualice su administrador de paquetes e instale las TPM2 herramientas y las dependencias ejecutando el siguiente comando.

    sudo apt-get update && sudo apt-get install tpm2-tools \ tpm2-abrmd \ tpm2-tss-engine-tools \ gnutls-bin \ libtpm2-pkcs11-1 \ libtpm2-pkcs11-tools \ libtpm2-pkcs11-1-dev \ python3-tpm2-pkcs11-tools \ libengine-pkcs11-openssl \ libtss2-tcti-tabrmd0
  2. Instale los paquetes del proveedor de TPM2 OpenSSL en Ubuntu 24.04 que utilizan el motor OpenSSL 3.

    sudo apt-get install tpm2-openssl

Paso 2: inicializar el almacén PKCS#11 y crear un slot

  1. Cree un directorio para almacenar datos.

    sudo mkdir -p /etc/tpm2_pkcs11
  2. Establezca la ubicación de almacenamiento como una variable de entorno. Para obtener más información sobre la jerarquía de almacenes, consulte Inicialización.

    export TPM2_PKCS11_STORE=/etc/tpm2_store
  3. Inicialice el token con el objeto principal TPM2 .

    sudo tpm2_ptool init

    Las siguientes opciones están disponibles:

    hierarchy-auth HIERARCHY_AUTH

    La contraseña de autorización para agregar un objeto principal a la jerarquía.

    primary-auth PRIMARY_AUTH

    Valor de autorización para el objeto de clave principal existente.

    El valor predeterminado es un valor de autenticación vacío.

    primary-handle [PRIMARY_HANDLE]

    Utilice un objeto de clave principal existente.

    Valor predeterminado: 0x81000001

    transient-parents

    Utilice un objeto principal transitorio de una plantilla determinada.

    Valores:tpm2-tools-default,, tpm2-tools-ecc-default tss2-engine-key

    path PATH

    La ubicación del directorio del almacén. Si se especifica, el directorio debe existir. Pero si no, realiza una búsqueda al observar la variable de entorno TPM2_PKCS11_STORE. Si esa variable de entorno no está establecida, analizará /etc/tpm2_pkcs11. Si ese directorio no se encuentra o no se puede crear, por defecto será el directorio de trabajo actual.

Paso 3: crear un token y una clave

  1. Cree un token PKCS#11.

    sudo tpm2_ptool addtoken —pid=1 —userpin=USERPIN —sopin=SOPIN —label=greengrass

    Las siguientes opciones están disponibles:

    --pid PID

    El identificador del objeto principal que se va a asociar a este token.

    --sopin SOPIN

    El pin del administrador. Este pin se utiliza para recuperar objetos.

    --userpin USERPIN

    El pin de usuario. Este PIN se utiliza para autenticar el uso de objetos.

    --label LABEL

    Una etiqueta única para identificar el perfil en uso. Debe ser única.

    --hierarchy-auth HIERARCHY_AUTH

  2. Cree un objeto clave ECC.

    sudo tpm2_ptool addkey —algorithm=ecc256 —label=greengrass —userpin=****** —key-label=greenkey
    --label LABEL

    La etiqueta del token también sirve para importar la clave.

    --key-label KEY_LABEL

    La etiqueta de la clave importada. El valor predeterminado es un número entero.

    --id ID

    ID de la clave. El valor predeterminado es un hexadecimal aleatorio de 8 bytes.

    --attr-always-authenticate

    Establece el atributo CKA_ALWAYS_AUTHENTICATE en CK_TRUE.

    --hierarchy-auth HIERARCHY_AUTH

    La hierarchyauth, necesaria para los objetos transitorios.

    --sopin SOPIN

    El pin de administrador.

    --userpin USERPIN

    El pin de usuario.

    --algorithm

    {rsa1024,rsa2048,rsa3072,rsa4096,aes128,aes256,ecc224,ecc256,ecc384,ecc521,hmac:sha1,hmac:sha256,hmac:sha384,hmac:sha512}

    El tipo de la clave.

  3. Exporte el objeto TPM2 -TSS del token para capturar los datos de autenticación.

    yaml_ecc0=$(sudo tpm2_ptool export —label="greengrass" —key-label="greenkey" —userpin="******")

    Ejemplo de salida:

    > echo $yaml_ecc0 object-auth: 706c1cad8a5238871b30149705255926 primary-object: auth: '' hierarchy: owner is_transient: false
    nota

    También encontrarás un archivo llamado `greenkey.pem`, que es la clave TSS2 privada, en el directorio donde ejecutaste este comando. Utilícelo para generar la CSR con el proveedor tpm2 openssl. El archivo de clave TSS2 PRIVADA está protegido por el TPM y no se puede utilizar en otro equipo. Para obtener más información sobre TSS2 las claves con OpenSSL, consulte Almacenamiento de la clave pública o privada.

  4. Capture los datos de autenticación de la clave privada del TSS.

    auth_ecc0=$(echo "$yaml_ecc0" | grep "object-auth" | cut -d' ' -f2-)

Paso 4: genere una solicitud de firma de certificado (CSR)

En este paso, utilizarás la clave privada TPM2 protegida para generar una CSR.

  1. Genera una CSR con el proveedor. TPM2

    sudo openssl req -new -provider tpm2 -provider base -key greenkey.pem -passin "pass:$auth_ecc0" -out "$H"$HOSTNAME".csr

    Cuando se solicite, entregue la información necesaria para su CSR, como lo siguiente:

    • Nombre del país (código de 2 letras)

    • State or Province Name

    • Locality Name

    • Organization Name

    • Organizational Unit Name

    • Common Name

    • Email Address

    Puede otorgar, como alternativa, un archivo de configuración de OpenSSL para la generación desatendida. Para obtener más información, consulte la Documentación OpenSSL.

  2. Si no va a generar la CSR en la misma máquina, copie la CSR generada en una máquina que tenga AWS las credenciales configuradas.

Paso 5: crear el certificado de objetos

Crea un certificado de AWS IoT cosas. Para obtener más información acerca de cómo crear un certificado de objetos, consulte Creación del certificado del objeto.

Paso 6: importar el certificado de objetos al TPM

  1. Copie el certificado de objetos en el dispositivo.

  2. Agregue el certificado de objetos al token de Greengrass.

    sudo tpm2_ptool addcert --label=greengrass --key-label=greenkey device.pem.crt

    Las siguientes opciones están disponibles:

    --help

    Muestre este mensaje de ayuda y salga de él.

    --label LABEL

    La etiqueta de perfil que se va a eliminar.

    --key-label KEY_LABEL

    La etiqueta de clave privada asociada.

    --key-id KEY_ID

    El ID de clave privada asociado en hexadecimal.

    cert

    El certificado x509 PEM que se va a agregar.

Paso 7: capturar la URL del objeto PKCS#11

Usaremos lo p11tool proporcionado en el gnutls-bin paquete para obtener la URL y el objeto URLs del token PKCS #11.

  1. Capture la URL del token de Greengrass.

    TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
  2. Consigue el objeto URLs para la ficha de Greengrass. Utilice el mismo pin que utilizó en el paso 3.

    sudo p11tool --login --list-all "${TOKEN}"

    Ejemplo de salida:

    Token 'greengrass' with URL 'pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass' requires user PIN Enter PIN: WARNING: Needed CKA_VALUE but didn't find encrypted blob Object 0: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=private Type: Private key (EC/ECDSA-SECP256R1) Label: greenkey Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 Object 1: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=public Type: Public key (EC/ECDSA-SECP256R1) Label: greenkey ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 Object 2: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=cert Type: X.509 Certificate (EC/ECDSA-SECP256R1) Expires: Fri Dec 31 18:59:59 2049 Label: greenkey ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31
  3. Capture la URL del objeto para la clave privada y el certificado.

Paso 8: Configurar e instalar Greengrass con soporte TPM2

  1. Configure el certificado de objetos. Para obtener más información, consulte Configurar el certificado de objetos.

  2. Complete las instrucciones para instalar el software AWS IoT Greengrass principal con la clave privada y el certificado en un HSM in. Instale el software principal AWS IoT Greengrass A continuación, siga los siguientes pasos para configurar la instalación para que se aproveche a TPM2 través de la interfaz PKCS #11.

  3. Compruebe que ha descargado y guardado el componente del proveedor PKCS#11 en la ubicación del instalador de Greengrass.

  4. Use un editor de texto para crear un archivo de configuración llamado config.yaml para proporcionárselo al instalador. Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano a fin de crear el archivo.

    nano GreengrassInstaller/config.yaml
  5. Copie el siguiente contenido YAML en el archivo. Este archivo de configuración parcial especifica los parámetros del sistema, los parámetros del núcleo de Greengrass y los parámetros del proveedor PKCS#11.

    --- system: certificateFilePath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=cert" privateKeyPath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=private" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" rootpath: "/greengrass/v2" thingName: "myThing" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "2.14.0" configuration: awsRegion: "us-east-1" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com" iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com" aws.greengrass.crypto.Pkcs11Provider: configuration: name: "tpm2_pkcs11" library: "/usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so" slot: 1 userPin: "123456"
  6. Edite el archivo con los parámetros específicos de su instalación.

    1. Actualice certificateFilePath y privateKeyPath con la actualización certificateFilePath y privateKeyPath con la URL de PKCS #11 capturada en el paso 7.

    2. Actualice su iotDataEndpoint anuncio iotCredEndpoint en función de su AWS IoT punto final.

    3. En la configuración aws.greengrass.crypto.Pkcs11Provider, actualice la biblioteca según su plataforma.

      nota

      El ejemplo que se muestra es para X86_64. La ruta del archivo será similar para el ARM64 dispositivo.

  7. Complete los pasos de instalación de Greengrass en Instale el software principal AWS IoT Greengrass.

Paso 9: verificar las instalaciones

En este paso, verificará que Greengrass funciona correctamente con TPM2 la integración.

  1. Revise el estado del servicio de Greengrass.

    sudo systemctl status greengrass.service
  2. Consulte los registros de Greengrass para asegurarse de que no haya errores.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  3. Compruebe que el dispositivo aparece como conectado en la consola de AWS IoT.

    1. Inicie sesión en la consola de AWS IoT Greengrass.

    2. En Manage (Administrar), expanda Greengrass devices (Dispositivos de Greengrass) y seleccione Core devices (Dispositivos principales).

    3. Confirme que el dispositivo esté conectado. El estado del dispositivo se mostrará como HEALTHY si está conectado. Para obtener más información, consulte Comprobación del estado del dispositivo principal de Greengrass.

Resolución de problemas

Si encuentra problemas durante la configuración o el funcionamiento de su dispositivo Greengrass TPM2 habilitado, pruebe los siguientes pasos de solución de problemas.

  • Revise el archivo de registro principal de Greengrass.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  • Revise la configuración del proveedor PKCS#11.

    sudo cat /greengrass/v2/config/effectiveConfig.yaml
  • Asegúrese de que el TPM2 servicio esté funcionando.

    sudo systemctl status tpm2-abrmd.service
  • Compruebe que se pueda acceder a la TPM2 clave.

    sudo pkcs11-tool —module /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so -l -p 123456 —list-objects
  • Si su sistema operativo está configurado con un cifrado de disco completo con claves de raíz de TPM2 almacenamiento, como Clevis o systemd-cryptenroll, compruebe que no está utilizando el mismo identificador persistente que utilizan estas herramientas. El uso del mismo identificador persistente puede afectar al mecanismo de cifrado del disco. Ejecute el siguiente comando para comprobar todos los identificadores persistentes creados y utilizados

    sudo tpm2_getcap handles-persistent

Pasos a seguir a continuación

Ahora que ha integrado correctamente su dispositivo principal de Greengrass TPM2, puede:

Para obtener más información acerca de la seguridad de los dispositivos de Greengrass, consulte Seguridad en  AWS IoT Greengrass.