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

Este tutorial contiene instrucciones sobre cómo usar el TPM2 chip como módulo de seguridad de hardware (HSM) para crear una clave privada y una CSR. Que se usa para. Creación del certificado del objeto

En este tutorial, se muestra cómo mejorar la seguridad de los dispositivos mediante la configuración del software AWS IoT Greengrass principal 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 para suplantarlos o realizar 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 sobre la seguridad de los dispositivos 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 gestione funciones y políticas de IAM

  • Java Runtime Environment (JRE) versión 8 o posterior instalada en su dispositivo.

  • Los siguientes paquetes de software están instalados en el dispositivo:

    • curl

    • jpg

  • Privilegios de root 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: Inicialice la tienda PKCS #11 y cree una ranura

  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 tiendas, consulte Inicialización.

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

    sudo tpm2_ptool init

    Las opciones disponibles son las siguientes:

    hierarchy-auth HIERARCHY_AUTH

    La contraseña de autorización para añadir 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

    Usa 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 de tiendas. Si se especifica, el directorio debe existir. Si no se especifica, realiza una búsqueda observando la variable de entornoTPM2_PKCS11_STORE. Si esa variable de entorno no está establecida, la analizará/etc/tpm2_pkcs11. Si ese directorio no se encuentra o no se puede crear, por defecto es el directorio de trabajo actual.

Paso 3: Crea un token y una clave

  1. Cree un token PKCS #11.

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

    Las opciones disponibles son las siguientes:

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

    El identificador 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 autenticación jerárquica, 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 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. Usa esto para generar la CSR con el proveedor openssl de tpm2. 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: generar una solicitud de firma de certificado (CSR)

En este paso, utilizará 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 le solicite, proporcione la información requerida para su RSE, que incluye:

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

    • State or Province Name

    • Locality Name

    • Organization Name

    • Organizational Unit Name

    • Common Name

    • Email Address

    Como alternativa, puede proporcionar un archivo de configuración de OpenSSL para la generación desatendida. Para obtener más información, consulte la documentación de OpenSSL.

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

Paso 5: Crea el certificado de la cosa

Crea un certificado de AWS IoT cosa. Para obtener más información sobre cómo crear un certificado de cosa, consulteCreación del certificado del objeto.

Paso 6: Importar el certificado de cosa a TPM

  1. Copie el certificado de la cosa en el dispositivo.

  2. Añade el certificado de la cosa al token de Greengrass.

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

    Las opciones disponibles son las siguientes:

    --help

    Muestre este mensaje de ayuda y salga.

    --label LABEL

    La etiqueta de perfil que se va a quitar.

    --key-label KEY_LABEL

    La etiqueta de clave privada asociada.

    --key-id KEY_ID

    El identificador de clave privada asociado en hexadecimal.

    cert

    El certificado PEM x509 que se va a añadir.

Paso 7: Capture la URL del objeto PKCS #11

Usaremos la p11tool información proporcionada en el gnutls-bin paquete para obtener la URL y el objeto del token PKCS #11. URLs

  1. Captura 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. Usa el mismo pin que usaste 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. Configura el certificado de la cosa. Para obtener más información, consulte Configurar el certificado de la cosa.

  2. Complete las instrucciones para instalar el software AWS IoT Greengrass principal con la clave privada y el certificado en un HSM inInstale 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 nano GNU para 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 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 aws.greengrass.crypto.Pkcs11Provider configuración, actualice la biblioteca en función de su plataforma.

      nota

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

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

Paso 9: Verifique la instalación

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

  1. Compruebe 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 AWS IoT consola.

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

    2. En Administrar, expanda los dispositivos Greengrass y elija Dispositivos principales.

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

Solució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.

  • Compruebe el archivo de registro principal de Greengrass.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  • Compruebe 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 utiliza el mismo identificador persistente que utilizan estas herramientas. El uso del mismo identificador persistente puede afectar al mecanismo de cifrado del disco. Para comprobar todos los identificadores persistentes creados y utilizados, ejecuta el siguiente comando

    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 sobre la seguridad de los dispositivos Greengrass, consulte. Seguridad en AWS IoT Greengrass