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)
nota
El mecanismo de este tutorial solo es compatible con Instale el software AWS IoT Greengrass principal con aprovisionamiento manual de recursos.
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.
-
Cualquier distribución de Linux que sea compatible con la pila de TPM2 software de Linux
puede admitir este mecanismo.
-
-
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.
-
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 -
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
-
Cree un directorio para almacenar datos.
sudo mkdir -p /etc/tpm2_pkcs11 -
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 -
Inicialice el token con el objeto principal TPM2 .
sudo tpm2_ptool initLas 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-defaulttss2-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
-
Cree un token PKCS#11.
sudo tpm2_ptool addtoken —pid=1 —userpin=USERPIN—sopin=SOPIN—label=greengrassLas 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
-
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.
-
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: falsenota
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
. -
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.
-
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".csrCuando 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
. -
-
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
-
Copie el certificado de objetos en el dispositivo.
-
Agregue el certificado de objetos al token de Greengrass.
sudo tpm2_ptool addcert --label=greengrass --key-label=greenkey device.pem.crtLas 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.
-
Capture la URL del token de Greengrass.
TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass" -
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 -
Capture la URL del objeto para la clave privada y el certificado.
Paso 8: Configurar e instalar Greengrass con soporte TPM2
-
Configure el certificado de objetos. Para obtener más información, consulte Configurar el certificado de objetos.
-
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.
-
Compruebe que ha descargado y guardado el componente del proveedor PKCS#11 en la ubicación del instalador de Greengrass.
-
Use un editor de texto para crear un archivo de configuración llamado
config.yamlpara proporcionárselo al instalador. Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNUnanoa fin de crear el archivo.nano GreengrassInstaller/config.yaml -
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" -
Edite el archivo con los parámetros específicos de su instalación.
-
Actualice certificateFilePath y privateKeyPath con la actualización certificateFilePath y privateKeyPath con la URL de PKCS #11 capturada en el paso 7.
-
Actualice su iotDataEndpoint anuncio iotCredEndpoint en función de su AWS IoT punto final.
-
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.
-
-
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.
-
Revise el estado del servicio de Greengrass.
sudo systemctl status greengrass.service -
Consulte los registros de Greengrass para asegurarse de que no haya errores.
sudo tail -f /greengrass/v2/logs/greengrass.log -
Compruebe que el dispositivo aparece como conectado en la consola de AWS IoT
. -
Inicie sesión en la consola de AWS IoT Greengrass
. -
En Manage (Administrar), expanda Greengrass devices (Dispositivos de Greengrass) y seleccione Core devices (Dispositivos principales).
-
Confirme que el dispositivo esté conectado. El estado del dispositivo se mostrará como
HEALTHYsi 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:
-
Implementar componentes en su dispositivo de Greengrass seguro. Para obtener más información, consulte Implemente AWS IoT Greengrass componentes en los dispositivos
-
Configure dispositivos Greengrass adicionales con TPM2 integración.
Para obtener más información acerca de la seguridad de los dispositivos de Greengrass, consulte Seguridad en AWS IoT Greengrass.