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 almacenar y descargar claves privadas de forma segura. 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 hardware HSMs, 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.

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 de Transport Layer Security (TLS) cuando se conecta un núcleo de Greengrass. 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 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 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 Configure el soporte para las actualizaciones over-the-air.
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 superior para utilizar una clave EC para el servidor MQTT.
-
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 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 seguridad de hardware para un núcleo 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 del hardware en AWS IoT Greengrass, edite el crypto
objeto enconfig.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 a la CA AWS IoT raíz. |
Debe ser el URI de un archivo de la forma: notaAsegúrese de que los puntos de conexión se corresponden con su tipo de certificado. |
PKCS11 |
||
OpenSSLEngine |
Opcional. La ruta absoluta al archivo |
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 Configure el soporte para las actualizaciones over-the-air. |
P11Provider |
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 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 URI de archivo de la forma: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 |
IoTCertificate .certificatePath |
La ruta absoluta al certificado de dispositivo del núcleo. |
Debe ser el URI de un archivo de la forma: |
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: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 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 Despliega los secretos hasta la AWS IoT Greengrass médula. | |
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: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 |
Campo | Descripción | Notas |
---|---|---|
caPath |
La ruta absoluta a la CA AWS IoT raíz. |
Debe ser el URI de un archivo de la forma: notaAsegúrese de que los puntos de conexión se corresponden con su tipo de certificado. |
PKCS11 |
||
OpenSSLEngine |
Opcional. La ruta absoluta al archivo |
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 Configure el soporte para las actualizaciones over-the-air. |
P11Provider |
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 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 URI de archivo de la forma: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 |
IoTCertificate .certificatePath |
La ruta absoluta al certificado de dispositivo del núcleo. |
Debe ser el URI de un archivo de la forma: |
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: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 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 Despliega los secretos hasta la AWS IoT Greengrass médula. | |
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: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 |
Campo | Descripción | Notas |
---|---|---|
caPath |
La ruta absoluta a la CA AWS IoT raíz. |
Debe ser el URI de un archivo de la forma: notaAsegúrese de que los puntos de conexión se corresponden con su tipo de certificado. |
PKCS11 |
||
OpenSSLEngine |
Opcional. La ruta absoluta al archivo |
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 Configure el soporte para las actualizaciones over-the-air. |
P11Provider |
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 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 URI de archivo de la forma: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 |
IoTCertificate .certificatePath |
La ruta absoluta al certificado de dispositivo del núcleo. |
Debe ser el URI de un archivo de la forma: |
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: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 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 Despliega los secretos hasta la AWS IoT Greengrass médula. | |
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: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 |
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
-
-
Genere claves privadas directamente en el HSM utilizando el generador de números aleatorios de hardware interno.
nota
Si configura las claves privadas para utilizarlas con esta función (siguiendo las instrucciones proporcionadas por el fabricante del hardware), tenga en cuenta que AWS IoT Greengrass actualmente solo admite el mecanismo de relleno de la PKCS1 versión 1.5 para el cifrado y descifrado de los secretos locales. AWS IoT Greengrass no admite el relleno de cifrado asimétrico óptimo (OAEP).
-
Configure las claves privadas para prohibir la exportación.
-
Utilice la herramienta de aprovisionamiento proporcionada por el proveedor del hardware para generar una solicitud de firma de certificado (CSR) con la clave privada protegida por hardware y, a continuación, utilice la consola para generar un certificado de cliente. AWS IoT
nota
La práctica de rotación de 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 servidor MQTT local en el AWS IoT Greengrass núcleo. 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 ningún límite al número de claves que se almacenan en el HSM, por lo que puede almacenar claves privadas para el cliente de IoT, el servidor MQTT y los componentes del administrador de secretos. 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 usa con mucha frecuencia porque el software AWS IoT Greengrass Core mantiene conexiones duraderas a 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 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. 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 múltiples configuraciones de almacenamiento de claves para los componentes del cliente de IoT y del servidor MQTT, 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 Clave de MQTT Rendimiento 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 Legacy Sistema de archivos: Clave A Sistema de archivos: Clave B Limitada por la CPU Para configurar el núcleo de Greengrass para que utilice claves basadas en el sistema de archivos para el servidor MQTT, omita la
principals.MQTTServerCertificate
sección deconfig.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 objetocrypto
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
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.
Configure el soporte para 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 libp11 PKCS #11 y editar el archivo de configuración de Greengrass
Detenga el daemon de Greengrass.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stopnota
greengrass-root
representa la ruta en la que está instalado el software AWS IoT Greengrass principal en su dispositivo. Normalmente, este es el directorio/greengrass
.Instale el motor de OpenSSL. Se admite OpenSSL 1.0 o 1.1.
sudo apt-get install libengine-pkcs11-openssl
Busque la ruta del motor de OpenSSL (
libpkcs11.so
) en el sistema:Obtenga la lista de los paquetes instalados para la biblioteca.
sudo dpkg -L libengine-pkcs11-openssl
El archivo
libpkcs11.so
se encuentra en el directorioengines
.Copie la ruta completa al archivo (por ejemplo,
/usr/lib/ssl/engines/libpkcs11.so
).
Abra el archivo de configuración de Greengrass. Este es el archivo config.json del directorio
/
.greengrass-root
/config-
Para la propiedad
OpenSSLEngine
, escriba la ruta al archivolibpkcs11.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 objetoPKCS11
, añádalo. 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 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 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 Enterprise AWS Support si tiene preguntas relacionadas con la integración.
Véase también
-
PKCS #11 Cryptographic Token Interface Usage Guide Version 2.40. Editado por John Leiseboer y Robert Griffin. 16 de noviembre de 2014. Nota 02 del Comité OASIS. http://docs.oasis-open. org/pkcs11/pkcs11-ug/v2.40/cn02/pkcs11-ug-v2.40-cn02.html
. Última versión: http://docs.oasis-open. org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html .