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 función está disponible para AWS IoT Greengrass Core v1.7 y versiones posteriores.

AWS IoT Greengrass admite el uso de módulos de seguridad de hardware (HSM) a través de la interfaz PKCS #11 para el almacenamiento y la descarga seguros de 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 módulos de hardwareHSMs, como 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.

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

AWS IoT Greengrass Core architecture with hardware security and message routing to AWS IoT Core and local devices.

En una instalación estándar, AWS IoT Greengrass utiliza dos claves privadas. El componente AWS IoT cliente (cliente de IoT) utiliza una clave durante el protocolo de enlace Transport Layer Security (TLS) cuando se conecta un núcleo de Greengrass a. AWS IoT Core A esta clave también se la conoce como "clave privada del núcleo". La otra clave la usa el MQTT servidor local, lo que permite que los dispositivos 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 para la seguridad del hardware 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 RSA clave 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:

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

  • Los certificados de cliente de IoT que están asociados a la clave privada se registran AWS IoT y se activan. Puedes verificarlo en la AWS IoT consola, en Administrar, expandir Todos los dispositivos, elegir Cosas y elegir la pestaña Certificados como elemento principal.

  • El software AWS IoT Greengrass principal, versión 1.7 o posterior, está instalado en el dispositivo principal, tal y como se describe en el módulo 2 del tutorial de introducción. Se requiere la versión 1.9 o posterior para usar una clave EC para el MQTT servidor.

  • Los certificados se asocian al núcleo de Greengrass. Puedes comprobarlo en la página de administración de la parte principal de la AWS IoT consola.

nota

Actualmente, AWS IoT Greengrass no admite cargar el certificado de CA o el certificado de cliente de IoT directamente desdeHSM. 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 seguridad de hardware para un AWS IoT Greengrass núcleo

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

Para ver el proceso de configuración de una HSM configuración mediante una implementación de software puro, consulteMó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. Su objetivo es permitirle conocer la especificación PKCS #11 y realizar las pruebas iniciales de su software si planea utilizar un software basado HSM en hardware en el futuro.

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

Cuando se utiliza la seguridad de hardware, el crypto objeto se utiliza para especificar las rutas a los certificados, las claves privadas y los activos de la biblioteca de proveedores PKCS #11 del núcleo, 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 a la CA AWS IoT raíz.

Debe ser un archivo URI con el formato:file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Opcional. La ruta absoluta al .so archivo Open SSL Engine para habilitar la compatibilidad con PKCS #11 en OpenSSL.

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

Esta propiedad es obligatoria si utiliza el agente de OTA actualización de Greengrass con seguridad de hardware. Para obtener más información, consulte Configure la compatibilidad con las actualizaciones over-the-air .

P11Provider

La ruta absoluta a la biblioteca PKCS libdl-loadable de la implementación #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 cumplir con las especificaciones de la etiqueta #11PKCS.

slotUserPin

El usuario PIN 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 El certificado y la clave privada que el núcleo utiliza para realizar solicitudes a AWS IoT.
IoTCertificate  .privateKeyPath

La ruta a la clave privada del núcleo.

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

Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 que especifique la etiqueta del objeto.

IoTCertificate  .certificatePath

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

Debe ser un archivo con URI el formato:file:///absolute/path/to/file.

MQTTServerCertificate

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

MQTTServerCertificate  .privateKeyPath

La ruta a la clave privada MQTT del servidor local.

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

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

Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 que especifique la etiqueta del objeto.

Si se omite esta propiedad, AWS IoT Greengrass gira 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 La clave privada que protege la clave de datos utilizada para el cifrado. Para obtener más información, consulte 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 RSA clave.

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

Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 que especifique la etiqueta del objeto. La clave privada debe generarse mediante el mecanismo de relleno PKCS#1 v1.5.

Campo Descripción Notas
caPath

La ruta absoluta a la CA AWS IoT raíz.

Debe ser un archivo URI con el formato:file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Opcional. La ruta absoluta al .so archivo Open SSL Engine para habilitar la compatibilidad con PKCS #11 en OpenSSL.

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

Esta propiedad es obligatoria si utiliza el agente de OTA actualización de Greengrass con seguridad de hardware. Para obtener más información, consulte Configure la compatibilidad con las actualizaciones over-the-air .

P11Provider

La ruta absoluta a la biblioteca PKCS libdl-loadable de la implementación #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 cumplir con las especificaciones de la etiqueta #11PKCS.

slotUserPin

El usuario PIN 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 El certificado y la clave privada que el núcleo utiliza para realizar solicitudes a AWS IoT.
IoTCertificate  .privateKeyPath

La ruta a la clave privada del núcleo.

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

Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 que especifique la etiqueta del objeto.

IoTCertificate  .certificatePath

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

Debe ser un archivo con URI el formato:file:///absolute/path/to/file.

MQTTServerCertificate

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

MQTTServerCertificate  .privateKeyPath

La ruta a la clave privada MQTT del servidor local.

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

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

Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 que especifique la etiqueta del objeto.

Si se omite esta propiedad, AWS IoT Greengrass gira 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 La clave privada que protege la clave de datos utilizada para el cifrado. Para obtener más información, consulte 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 RSA clave.

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

Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 que especifique la etiqueta del objeto. La clave privada debe generarse mediante el mecanismo de relleno PKCS#1 v1.5.

Campo Descripción Notas
caPath

La ruta absoluta a la CA AWS IoT raíz.

Debe ser un archivo URI con el formato:file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Opcional. La ruta absoluta al .so archivo Open SSL Engine para habilitar la compatibilidad con PKCS #11 en OpenSSL.

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

Esta propiedad es obligatoria si utiliza el agente de OTA actualización de Greengrass con seguridad de hardware. Para obtener más información, consulte Configure la compatibilidad con las actualizaciones over-the-air .

P11Provider

La ruta absoluta a la biblioteca PKCS libdl-loadable de la implementación #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 cumplir con las especificaciones de la etiqueta #11PKCS.

slotUserPin

El usuario PIN 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 El certificado y la clave privada que el núcleo utiliza para realizar solicitudes a AWS IoT.
IoTCertificate  .privateKeyPath

La ruta a la clave privada del núcleo.

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

Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 que especifique la etiqueta del objeto.

IoTCertificate  .certificatePath

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

Debe ser un archivo con URI el formato:file:///absolute/path/to/file.

MQTTServerCertificate

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

MQTTServerCertificate  .privateKeyPath

La ruta a la clave privada MQTT del servidor local.

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

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

Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 que especifique la etiqueta del objeto.

Si se omite esta propiedad, AWS IoT Greengrass gira 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 La clave privada que protege la clave de datos utilizada para el cifrado. Para obtener más información, consulte 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 RSA clave.

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

Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 que especifique la etiqueta del objeto. La clave privada debe generarse mediante el mecanismo de relleno PKCS#1 v1.5.

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

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

Seguridad

nota

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

Rendimiento

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

nota

AWS IoT Greengrass no impone ningún límite a la cantidad de claves que se almacenan en elHSM, por lo que puede almacenar claves privadas para los componentes del cliente, el MQTT servidor y el administrador de secretos de IoT. Sin embargo, algunos HSM proveedores pueden imponer límites a la cantidad de claves que puedes almacenar en una ranura.

IoT client and MQTT server interacting with AWS IoT Greengrass Core and AWS IoT Core.

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

Cuando la clave MQTT del servidor está almacenada en elHSM, la velocidad a la que se pueden conectar los dispositivos depende del número de operaciones de RSA firma por segundo que HSM puedan realizar. Por ejemplo, si HSM se tarda 300 milisegundos en realizar una firma RSASSA PKCS1 -v1.5 en una clave privada RSA -2048, solo se pueden conectar tres dispositivos al núcleo de Greengrass por segundo. Una vez realizadas las conexiones, deja de usarse y HSM se aplican las cuotas estándar para ello. AWS IoT Greengrass

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

AWS IoT Greengrass admite múltiples configuraciones de almacenamiento de claves para los componentes de cliente y MQTT servidor de IoT, por lo que puede optimizarlas según sus requisitos de seguridad y rendimiento. En la siguiente tabla se incluyen ejemplos de configuraciones.

Configuración Clave de IoT MQTTclave Rendimiento
HSMClave compartida HSM: Clave A HSM: Clave A Limitado por: HSM o CPU
HSMLlaves separadas HSM: Clave A HSM: Tecla B Limitado por: HSM o CPU
HSMsolo para IoT HSM: Clave A Sistema de archivos: Clave B Limitado por la CPU
Legacy Sistema de archivos: Clave A Sistema de archivos: Clave B Limitado por el CPU

Para configurar el núcleo de Greengrass para que utilice claves basadas en el sistema de archivos para el MQTT servidor, omita la principals.MQTTServerCertificate sección de config.json (o especifique una ruta de acceso a la clave basada en archivos 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 conjuntos de cifrado cuando el núcleo está configurado para garantizar la seguridad del 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

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

Configure la compatibilidad con las actualizaciones over-the-air

Para habilitar las actualizaciones over-the-air (OTA) del software AWS IoT Greengrass principal al utilizar la seguridad del hardware, debe instalar la biblioteca contenedora OpenSC PKCSlibp11 #11 y editar el archivo de configuración de Greengrass. Para obtener más información sobre las actualizaciones, consulte. OTA 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 en la que se instala el software AWS IoT Greengrass principal en el dispositivo. Normalmente, este es el directorio /greengrass.

  2. Instale el SSL motor Open. Se admiten Open SSL 1.0 o 1.1.

    sudo apt-get install libengine-pkcs11-openssl
  3. Busque la ruta al SSL motor Open (libpkcs11.so) en su 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 principal

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

Hardware sin soporte para #11 PKCS

La biblioteca PKCS #11 normalmente la proporciona el proveedor de hardware o es de código abierto. Por ejemplo, con un hardware que cumpla con los estándares (por ejemplo, TPM1 .2), podría ser posible utilizar el software de código abierto existente. Sin embargo, si su hardware no tiene una implementación de biblioteca PKCS #11 correspondiente, o si desea crear un proveedor PKCS #11 personalizado, póngase en contacto con su representante de AWS Enterprise Support si tiene preguntas relacionadas con la integración.

Véase también