Integración de la seguridad de hardware - AWS IoT Greengrass

AWS IoT Greengrass Version 1 entró en la fase de vida útil prolongada el 30 de junio de 2023. Para obtener más información, consulte la política de mantenimiento de AWS IoT Greengrass V1 Después de esta fecha, AWS IoT Greengrass V1 no se publicarán actualizaciones que proporcionen funciones, mejoras, correcciones de errores o parches de seguridad. Los dispositivos que se ejecuten AWS IoT Greengrass V1 no se verán afectados y seguirán funcionando y conectándose a la nube. Le recomendamos encarecidamente que migre a AWS IoT Greengrass Version 2, ya que añade importantes funciones nuevas y es compatible con plataformas adicionales.

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.

Integración de la seguridad de hardware

Esta característica está disponible para AWS IoT Greengrass Core versión 1.7 y posteriores.

AWS IoT Greengrass admite el uso de módulos de seguridad de hardware (HSM) a través de la interfaz de PKCS#11 para obtener almacenamiento seguro y descargar claves privadas. Esto impide que las claves queden expuestas o se dupliquen en el software. Las claves privadas se pueden almacenar de forma segura en los módulos de hardware, por ejemplo, los HSM, los módulos de plataforma segura (TPM) u otros elementos criptográficos.

Busque los dispositivos cualificados para esta característica en el AWS Partner Device Catalog.

En el siguiente diagrama muestra la arquitectura de seguridad de hardware de un núcleo AWS IoT Greengrass.

En una instalación estándar, AWS IoT Greengrass utiliza dos claves privadas. Una clave la usa el componente de cliente de AWS IoT (cliente de IoT) durante el protocolo de enlace Transport Layer Security (TLS) cuando un núcleo de Greengrass se conecta a AWS IoT Core. A esta clave también se la conoce como "clave privada del núcleo". La otra clave la usa el servidor MQTT local, lo que permite que los dispositivos de Greengrass se comuniquen con el núcleo de Greengrass. Si desea utilizar la seguridad de hardware para ambos componentes, puede utilizar una clave privada compartida o claves privadas independientes. Para obtener más información, consulte Prácticas de aprovisionamiento de seguridad del hardware de AWS IoT Greengrass.

nota

En una instalación estándar, el administrador de secretos local también utiliza la clave de cliente de IoT en su proceso de cifrado, aunque usted puede utilizar su propia clave privada. Debe ser una clave RSA con una longitud mínima de 2048 bits. Para obtener más información, consulte Especificación de la clave privada para el cifrado de secretos.

Requisitos

Antes de poder configurar la seguridad de hardware para un núcleo de Greengrass, debe disponer de lo siguiente:

  • Un módulo de seguridad de hardware (HSM) que sea compatible con su configuración de clave privada de destino para los componentes del administrador de secretos, del cliente de IoT y del servidor MQTT local. La configuración puede incluir una, dos o tres claves privadas basadas en hardware, en función de si configura los componentes para que compartan claves. Para obtener más información acerca de la compatibilidad con claves privadas, consulte AWS IoT Greengrass principios básicos de seguridad.

    • Para las claves RSA: un tamaño de clave de RSA-2048 (o mayor) y el esquema de firma PKCS#1 v1.5.

    • Para las claves EC: una curva NIST P-256 o NIST P-384.

    nota

    Busque los dispositivos cualificados para esta característica en el AWS Partner Device Catalog.

  • Una biblioteca del proveedor PKCS#11 que se puede cargar durante el tiempo de ejecución (usando libdl) y proporciona funciones PKCS#11.

  • El módulo de hardware debe resolverlo la etiqueta de ranura, tal y como se define en la especificación de PKCS#11.

  • La clave privada debe generarse y cargarse en el HSM mediante las herramientas de aprovisionamiento del proveedor.

  • La clave privada debe poder resolverla la etiqueta de objeto.

  • El certificado de dispositivo del núcleo. Se trata de un certificado de cliente de IoT que se corresponde con la clave privada.

  • Si utiliza el agente de actualización OTA de Greengrass, deberá instalar la biblioteca envolvente OpenSSL libp11 PKCS#11. Para obtener más información, consulte Configuración de la compatibilidad con actualizaciones transparentes.

Además, asegúrese de que se cumplen las siguientes condiciones:

  • Los certificados de cliente de IoT que están asociados con la clave privada se registran en AWS IoT y se activan. Puede verificarlo en la consola AWS IoT en Gestionar, expanda Todos los dispositivos, elija Objetos y elija la pestaña Certificados para el objeto principal.

  • El software AWS IoT Greengrass Core versión 1.7 o superior se instala en el dispositivo principal, tal y como se describe en el Módulo 2 del tutorial de introducción. La versión 1.9 o superior es necesaria para utilizar una clave EC para el servidor MQTT.

  • Los certificados se asocian al núcleo de Greengrass. Puede verificar esto en la página Administrar para el objeto principal en la consola AWS IoT.

nota

Actualmente, AWS IoT Greengrass no admite la carga del certificado de entidad de certificación o del certificado de cliente de IoT directamente desde el HSM. Los certificados se deben cargar como archivos de texto sin formato en el sistema de archivos en una ubicación que pueda leer Greengrass.

Configuración de la seguridad del hardware de un núcleo de AWS IoT Greengrass

La seguridad de hardware está configurada en el archivo de configuración de Greengrass. Este es el archivo config.json ubicado en el directorio /greengrass-root/config.

nota

Si desea conocer el proceso de configuración de un HSM mediante una implementación de software pura, consulte Módulo 7: Simulación de la integración de seguridad del hardware.

importante

La configuración simulada del ejemplo no proporciona ningún beneficio de seguridad. El objetivo es permitir que aprenda acerca de la especificación de PKCS#11 y realice las pruebas iniciales de su software si pretende utilizar un HSM basado en hardware en el futuro.

Para configurar la seguridad en hardware en AWS IoT Greengrass, debe editar el crypto objeto en config.json.

Cuando se utiliza la seguridad de hardware, el objeto crypto se utiliza para especificar rutas a certificados, claves privadas y recursos para la biblioteca del proveedor PKCS#11 en el núcleo, tal y como se muestra en el siguiente ejemplo.

"crypto": { "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, "principals" : { "IoTCertificate" : { "privateKeyPath" : "pkcs11:object=core-private-key-label;type=private", "certificatePath" : "file:///path-to-core-device-certificate" }, "MQTTServerCertificate" : { "privateKeyPath" : "pkcs11:object=server-private-key-label;type=private" }, "SecretsManager" : { "privateKeyPath": "pkcs11:object=core-private-key-label;type=private" } }, "caPath" : "file:///path-to-root-ca"

El objeto crypto contiene las siguientes propiedades:

Campo Descripción Notas
caPath

La ruta absoluta al CA raíz de AWS IoT.

Debe ser el URI de un archivo de la forma: file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Opcional. La ruta absoluta al archivo .so del motor de OpenSSL para habilitar la compatibilidad con PKCS#11 en OpenSSL.

Debe ser una ruta a un archivo del sistema de archivos.

Esta propiedad es necesaria si está utilizando el agente de actualización OTA de Greengrass con seguridad de hardware. Para obtener más información, consulte Configuración de la compatibilidad con actualizaciones transparentes.

Proveedor de P11

La ruta absoluta a la biblioteca que puede cargar libdl de la implementación de PKCS#11.

Debe ser una ruta a un archivo del sistema de archivos.

slotLabel

La etiqueta de ranura que se utiliza para identificar el módulo de hardware.

Debe ajustarse a las especificaciones de etiqueta de PKCS#11.

slotUserPin

El PIN de usuario que se utiliza para autenticar el núcleo de Greengrass en el módulo.

Debe tener permisos suficientes para realizar la firma C_Sign con las claves privadas configuradas.

principals
IoTCertificate The certificate and private key that the core uses to make requests to AWS IoT.
IoTCertificate  .privateKeyPath

La ruta a la clave privada del núcleo.

Para el almacenamiento del sistema de archivos, debe ser un URI de archivo de la forma: file:///absolute/path/to/file.

Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 que especifica la etiqueta del objeto.

IoTCertificate  .certificatePath

La ruta absoluta al certificado de dispositivo del núcleo.

Debe ser el URI de un archivo de la forma: file:///absolute/path/to/file.

MQTTServerCertificate

Opcional. La clave privada que el núcleo utiliza en combinación con el certificado para que actúe como un servidor MQTT o la puerta de enlace.

MQTTServerCertificate  .privateKeyPath

La ruta a la clave privada del servidor MQTT local.

Utilice este valor para especificar su propia clave privada para el servidor MQTT local.

Para el almacenamiento del sistema de archivos, debe ser un URI de archivo de la forma: file:///absolute/path/to/file.

Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 que especifica la etiqueta del objeto.

Si esta propiedad se omite, AWS IoT Greengrass rota la clave en función de la configuración de rotación. Si se especifica, el cliente es responsable de la rotación de la clave.

SecretsManager The private key that secures the data key used for encryption. For more information, see Implementación de secretos en el núcleo de AWS IoT Greengrass.
SecretsManager  .privateKeyPath

La ruta a la clave privada del administrador de secretos locales.

Solo se admite una clave RSA.

Para el almacenamiento del sistema de archivos, debe ser un URI de archivo de la forma: file:///absolute/path/to/file.

Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 que especifica la etiqueta del objeto. La clave privada se debe generar utilizando el mecanismo de rellenado PKCS#1 v1.5.

Campo Descripción Notas
caPath

La ruta absoluta al CA raíz de AWS IoT.

Debe ser el URI de un archivo de la forma: file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Opcional. La ruta absoluta al archivo .so del motor de OpenSSL para habilitar la compatibilidad con PKCS#11 en OpenSSL.

Debe ser una ruta a un archivo del sistema de archivos.

Esta propiedad es necesaria si está utilizando el agente de actualización OTA de Greengrass con seguridad de hardware. Para obtener más información, consulte Configuración de la compatibilidad con actualizaciones transparentes.

Proveedor de P11

La ruta absoluta a la biblioteca que puede cargar libdl de la implementación de PKCS#11.

Debe ser una ruta a un archivo del sistema de archivos.

slotLabel

La etiqueta de ranura que se utiliza para identificar el módulo de hardware.

Debe ajustarse a las especificaciones de etiqueta de PKCS#11.

slotUserPin

El PIN de usuario que se utiliza para autenticar el núcleo de Greengrass en el módulo.

Debe tener permisos suficientes para realizar la firma C_Sign con las claves privadas configuradas.

principals
IoTCertificate The certificate and private key that the core uses to make requests to AWS IoT.
IoTCertificate  .privateKeyPath

La ruta a la clave privada del núcleo.

Para el almacenamiento del sistema de archivos, debe ser un URI de archivo de la forma: file:///absolute/path/to/file.

Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 que especifica la etiqueta del objeto.

IoTCertificate  .certificatePath

La ruta absoluta al certificado de dispositivo del núcleo.

Debe ser el URI de un archivo de la forma: file:///absolute/path/to/file.

MQTTServerCertificate

Opcional. La clave privada que el núcleo utiliza en combinación con el certificado para que actúe como un servidor MQTT o la puerta de enlace.

MQTTServerCertificate  .privateKeyPath

La ruta a la clave privada del servidor MQTT local.

Utilice este valor para especificar su propia clave privada para el servidor MQTT local.

Para el almacenamiento del sistema de archivos, debe ser un URI de archivo de la forma: file:///absolute/path/to/file.

Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 que especifica la etiqueta del objeto.

Si esta propiedad se omite, AWS IoT Greengrass rota la clave en función de la configuración de rotación. Si se especifica, el cliente es responsable de la rotación de la clave.

SecretsManager The private key that secures the data key used for encryption. For more information, see Implementación de secretos en el núcleo de AWS IoT Greengrass.
SecretsManager  .privateKeyPath

La ruta a la clave privada del administrador de secretos locales.

Solo se admite una clave RSA.

Para el almacenamiento del sistema de archivos, debe ser un URI de archivo de la forma: file:///absolute/path/to/file.

Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 que especifica la etiqueta del objeto. La clave privada se debe generar utilizando el mecanismo de rellenado PKCS#1 v1.5.

Campo Descripción Notas
caPath

La ruta absoluta al CA raíz de AWS IoT.

Debe ser el URI de un archivo de la forma: file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Opcional. La ruta absoluta al archivo .so del motor de OpenSSL para habilitar la compatibilidad con PKCS#11 en OpenSSL.

Debe ser una ruta a un archivo del sistema de archivos.

Esta propiedad es necesaria si está utilizando el agente de actualización OTA de Greengrass con seguridad de hardware. Para obtener más información, consulte Configuración de la compatibilidad con actualizaciones transparentes.

Proveedor de P11

La ruta absoluta a la biblioteca que puede cargar libdl de la implementación de PKCS#11.

Debe ser una ruta a un archivo del sistema de archivos.

slotLabel

La etiqueta de ranura que se utiliza para identificar el módulo de hardware.

Debe ajustarse a las especificaciones de etiqueta de PKCS#11.

slotUserPin

El PIN de usuario que se utiliza para autenticar el núcleo de Greengrass en el módulo.

Debe tener permisos suficientes para realizar la firma C_Sign con las claves privadas configuradas.

principals
IoTCertificate The certificate and private key that the core uses to make requests to AWS IoT.
IoTCertificate  .privateKeyPath

La ruta a la clave privada del núcleo.

Para el almacenamiento del sistema de archivos, debe ser un URI de archivo de la forma: file:///absolute/path/to/file.

Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 que especifica la etiqueta del objeto.

IoTCertificate  .certificatePath

La ruta absoluta al certificado de dispositivo del núcleo.

Debe ser el URI de un archivo de la forma: file:///absolute/path/to/file.

MQTTServerCertificate

Opcional. La clave privada que el núcleo utiliza en combinación con el certificado para que actúe como un servidor MQTT o la puerta de enlace.

MQTTServerCertificate  .privateKeyPath

La ruta a la clave privada del servidor MQTT local.

Utilice este valor para especificar su propia clave privada para el servidor MQTT local.

Para el almacenamiento del sistema de archivos, debe ser un URI de archivo de la forma: file:///absolute/path/to/file.

Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 que especifica la etiqueta del objeto.

Si esta propiedad se omite, AWS IoT Greengrass rota la clave en función de la configuración de rotación. Si se especifica, el cliente es responsable de la rotación de la clave.

SecretsManager The private key that secures the data key used for encryption. For more information, see Implementación de secretos en el núcleo de AWS IoT Greengrass.
SecretsManager  .privateKeyPath

La ruta a la clave privada del administrador de secretos locales.

Solo se admite una clave RSA.

Para el almacenamiento del sistema de archivos, debe ser un URI de archivo de la forma: file:///absolute/path/to/file.

Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 que especifica la etiqueta del objeto. La clave privada se debe generar utilizando el mecanismo de rellenado PKCS#1 v1.5.

Prácticas de aprovisionamiento de seguridad del hardware de AWS IoT Greengrass

A continuación, se muestran las prácticas de aprovisionamiento relacionadas con el rendimiento y la seguridad.

Seguridad

  • Genere claves privadas directamente en el HSM utilizando el generador de números aleatorios de hardware interno.

    nota

    Si configura claves privadas para utilizar con esta característica (siguiendo las instrucciones que proporciona el proveedor de hardware), tenga en cuenta que AWS IoT Greengrass actualmente solo admite el mecanismo de relleno PKCS1 v1.5 para el cifrado y descifrado de secretos locales. AWS IoT Greengrass no admite el relleno óptimo de cifrado asimétrico (OAEP).

  • Configure las claves privadas para prohibir la exportación.

  • Utilice la herramienta de aprovisionamiento que proporciona el proveedor de hardware para generar una solicitud de firma de certificado (CSR) utilizando la clave privada protegida por hardware y, a continuación, utilice la conola AWS IoT para generar un certificado de cliente.

nota

La práctica de rotación de claves no se aplica cuando las claves privadas se generan en un HSM.

Rendimiento

En el siguiente diagrama se muestra el componente de cliente de IoT y el servidor MQTT local en el núcleo AWS IoT Greengrass. Si desea utilizar una configuración de HSM para ambos componentes, puede utilizar la misma clave privada compartida o claves privadas independientes. Si utiliza claves independientes, deben almacenarse en la misma ranura.

nota

AWS IoT Greengrass no impone límites en relación con el número de claves que se pueden almacenar en el HSM, por lo que puede almacenar las claves privadas de los componentes del administrador de secretos, del cliente de IoT y del servidor MQTT. Sin embargo, algunos proveedores de HSM podrían imponer límites en relación con el número de claves que se pueden almacenar en una ranura.

En general, la clave de cliente de IoT no se utiliza con mucha frecuencia porque el software de AWS IoT Greengrass Core mantiene conexiones de larga duración en la nube. Sin embargo, la clave del servidor MQTT se utiliza cada vez que un dispositivo de Greengrass se conecta al núcleo. Estas interacciones directamente afectan al rendimiento.

Cuando la clave del servidor MQTT se almacena en el HSM, la velocidad a la que se pueden conectar los dispositivos depende del número de operaciones de firma RSA por segundo que el HSM puede realizar. Por ejemplo, si el HSM tarda 300 milisegundos para realizar una firma RSASSA-PKCS1 en una clave privada RSA-2048-v1.5, solo tres dispositivos pueden conectarse al núcleo de Greengrass por segundo. Después de establecer las conexiones, el HSM deja de utilizarse y se aplican las cuotas de AWS IoT Greengrass estándar.

Para mitigar los cuellos de botella de rendimiento, puede almacenar la clave privada del servidor MQTT en el sistema de archivos en lugar de en el HSM. Con esta configuración, el servidor MQTT se comporta como si no estuviera habilitada la seguridad de hardware.

AWS IoT Greengrass admite varias configuraciones de almacenamiento de claves para los componentes del cliente de IoT y del servidor MQTT, para que pueda optimizarlas de acuerdo con sus requisitos de seguridad y rendimiento. En la siguiente tabla se incluyen ejemplos de configuraciones.

Configuración Clave de IoT Clave de MQTT Desempeño
Clave compartida de HSM HSM: Clave A HSM: Clave A Limitada por el HSM o CPU
Claves de HSM independientes HSM: Clave A HSM: Clave B Limitada por el HSM o CPU
HSM solo para IoT HSM: Clave A Sistema de archivos: Clave B Limitada por la CPU
Heredado Sistema de archivos: Clave A Sistema de archivos: Clave B Limitada por la CPU

Con el fin de configurar el núcleo de Greengrass para utilizar las claves basadas en el sistema de archivos para el servidor MQTT, omita la principals.MQTTServerCertificate sección de config.json (o especifique una ruta basada en archivos a la clave si no utiliza la clave predeterminada generada por AWS IoT Greengrass). El objeto crypto resultante tiene este aspecto:

"crypto": { "PKCS11": { "OpenSSLEngine": "...", "P11Provider": "...", "slotLabel": "...", "slotUserPin": "..." }, "principals": { "IoTCertificate": { "privateKeyPath": "...", "certificatePath": "..." }, "SecretsManager": { "privateKeyPath": "..." } }, "caPath" : "..." }

Compatibilidad de los conjuntos de cifrado con la integración de seguridad del hardware

AWS IoT Greengrass admite un conjunto de funcionalidades de cifrado cuando el núcleo se ha configurado con la seguridad de hardware. Se trata de un subconjunto de los conjuntos de cifrado que se admiten cuando el núcleo se ha configurado para utilizar la seguridad basada en archivos. Para obtener más información, consulte Compatibilidad con conjuntos de cifrado TLS.

nota

Al conectarse al núcleo de Greengrass desde los dispositivos de Greengrass a través de la red local, asegúrese de utilizar uno de los conjuntos de cifrado admitidos para realizar la conexión TLS.

Configuración de la compatibilidad con actualizaciones transparentes

Para habilitar las actualizaciones transparentes (OTA) del software AWS IoT Greengrass Core cuando se utiliza la seguridad de hardware, debe instalar la biblioteca de encapsulado de PKCS#11 OpenSC libp11 y editar el archivo de configuración de Greengrass. Para obtener más información acerca de las actualizaciones OTA, consulte Actualizaciones de OTA para el software AWS IoT Greengrass Core.

  1. Detenga el daemon de Greengrass.

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
    nota

    greengrass-root representa la ruta donde está instalado el software de AWS IoT Greengrass Core en su dispositivo. Normalmente, este es el directorio /greengrass.

  2. Instale el motor de OpenSSL. Se admite OpenSSL 1.0 o 1.1.

    sudo apt-get install libengine-pkcs11-openssl
  3. Busque la ruta del motor de OpenSSL (libpkcs11.so) en el sistema:

    1. Obtenga la lista de los paquetes instalados para la biblioteca.

      sudo dpkg -L libengine-pkcs11-openssl

      El archivo libpkcs11.so se encuentra en el directorio engines.

    2. Copie la ruta completa al archivo (por ejemplo, /usr/lib/ssl/engines/libpkcs11.so).

  4. Abra el archivo de configuración de Greengrass. Este es el archivo config.json del directorio /greengrass-root/config.

  5. Para la propiedad OpenSSLEngine, escriba la ruta al archivo libpkcs11.so.

    { "crypto": { "caPath" : "file:///path-to-root-ca", "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, ... } ... }
    nota

    Si la propiedad OpenSSLEngine no existe en el objeto PKCS11, añádalo.

  6. Iniciar el daemon de Greengrass.

    cd /greengrass-root/ggc/core/ sudo ./greengrassd start

Compatibilidad con versiones anteriores del software AWS IoT Greengrass Core

El software de AWS IoT Greengrass Core compatible con la seguridad por hardware es totalmente compatible con las versiones anteriores de los archivos config.json que se generan para la versión 1.6 y anteriores. Si el objeto crypto no está presente en el archivo de configuración config.json, AWS IoT Greengrass utiliza las propiedades coreThing.certPath, coreThing.keyPath y coreThing.caPath basadas en archivos. Esta compatibilidad con versiones anteriores se aplica a las actualizaciones OTA de Greengrass, que no sobrescriben un archivo de configuración basado en archivos que se especifica en config.json.

Hardware sin compatibilidad con PKCS#11

La biblioteca de PKCS#11 suele ser proporcionada por el proveedor de hardware o es de código abierto. Por ejemplo, con hardware que cumplan los estándares (como TPM1.2), se puede utilizar software de código abierto. Sin embargo, si el hardware no tiene la correspondiente implementación de la biblioteca de PKCS#11, o bien si desea escribir un proveedor de PKCS#11 personalizado, póngase en contacto con su representante de AWS Enterprise Support para plantearle cualquier pregunta relacionada con la integración.

Véase también