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: 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 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: 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 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: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 |
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: 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 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: 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 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: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 |
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: 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 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: 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 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: Para el almacenamiento de HSM, debe ser una ruta RFC 7512 PKCS#11 |
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 deconfig.json
(o especifique una ruta basada en archivos a la clave 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 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
Detenga el daemon de Greengrass.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stopnota
greengrass-root
representa la ruta donde está instalado el software de AWS IoT Greengrass Core 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 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
-
PKCS #11 Cryptographic Token Interface Usage Guide Version 2.40. Editado por John Leiseboer y Robert Griffin. 16 de noviembre de 2014. OASIS Committee Note 02. 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 .