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)
nota
El mecanismo de este tutorial solo es compatible con. Instale el software AWS IoT Greengrass principal con aprovisionamiento manual de recursos
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.
-
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 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.
-
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: Inicialice la tienda PKCS #11 y cree una ranura
-
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 tiendas, consulte Inicialización
. export TPM2_PKCS11_STORE=/etc/tpm2_store
-
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 entorno
TPM2_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
-
Cree un token PKCS #11.
sudo tpm2_ptool addtoken —pid=1 —userpin=
USERPIN
—sopin=SOPIN
—label=greengrassLas 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
-
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.
-
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
. -
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.
-
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
. -
-
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
-
Copie el certificado de la cosa en el dispositivo.
-
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
-
Captura la URL del token de Greengrass.
TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
-
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
-
Capture la URL del objeto para la clave privada y el certificado.
Paso 8: Configurar e instalar Greengrass con soporte TPM2
-
Configura el certificado de la cosa. Para obtener más información, consulte Configurar el certificado de la cosa.
-
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.
-
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.yaml
para proporcionárselo al instalador. Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usarnano
GNU para 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 PKCS #11 capturada en el paso 7.
-
Actualice su iotDataEndpoint anuncio iotCredEndpoint en función de su AWS IoT punto final.
-
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
-
-
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.
-
Compruebe 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 AWS IoT consola
. -
Inicie sesión en la consola de AWS IoT Greengrass
. -
En Administrar, expanda los dispositivos Greengrass y elija Dispositivos principales.
-
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:
-
Implemente componentes en su dispositivo 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 sobre la seguridad de los dispositivos Greengrass, consulte. Seguridad en AWS IoT Greengrass