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.
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:
-
Un módulo de seguridad de hardware (HSM) que admite la configuración de clave privada de destino para los componentes del cliente de IoT, el MQTT servidor local y el administrador de secretos 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 RSA las claves: un tamaño de clave de RSA -2048 (o mayor) y un esquema de firma PKCS#1 v1.5.
Para llaves 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
. -
El módulo de hardware debe poder resolverse mediante una etiqueta de ranura, tal y como se define en la especificación #11. PKCS
-
La clave privada debe generarse y cargarse en él mediante las herramientas de HSM aprovisionamiento proporcionadas por el 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 OTA actualización de Greengrass, debe estar instalada la biblioteca SSLcontenedora Open libp11 PKCS #11
. Para obtener más información, consulte Configure la compatibilidad con 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 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: notaAsegúrese de que los puntos de conexión se corresponden con su tipo de certificado. |
PKCS11 |
||
OpenSSLEngine |
Opcional. La ruta absoluta al |
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:. Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 |
IoTCertificate .certificatePath |
La ruta absoluta al certificado de dispositivo del núcleo. |
Debe ser un archivo con URI el formato: |
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: Para el HSM almacenamiento, debe ser una ruta RFC7512 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 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: Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 |
Campo | Descripción | Notas |
---|---|---|
caPath |
La ruta absoluta a la CA AWS IoT raíz. |
Debe ser un archivo URI con el formato: notaAsegúrese de que los puntos de conexión se corresponden con su tipo de certificado. |
PKCS11 |
||
OpenSSLEngine |
Opcional. La ruta absoluta al |
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:. Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 |
IoTCertificate .certificatePath |
La ruta absoluta al certificado de dispositivo del núcleo. |
Debe ser un archivo con URI el formato: |
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: Para el HSM almacenamiento, debe ser una ruta RFC7512 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 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: Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 |
Campo | Descripción | Notas |
---|---|---|
caPath |
La ruta absoluta a la CA AWS IoT raíz. |
Debe ser un archivo URI con el formato: notaAsegúrese de que los puntos de conexión se corresponden con su tipo de certificado. |
PKCS11 |
||
OpenSSLEngine |
Opcional. La ruta absoluta al |
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:. Para el HSM almacenamiento, debe ser una ruta RFC7512 PKCS #11 |
IoTCertificate .certificatePath |
La ruta absoluta al certificado de dispositivo del núcleo. |
Debe ser un archivo con URI el formato: |
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: Para el HSM almacenamiento, debe ser una ruta RFC7512 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 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: Para el HSM almacenamiento, debe ser una ruta RFC7512 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 él HSM mediante 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 AWS IoT consola para generar un certificado de cliente.
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.
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 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
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
Detenga el daemon de Greengrass.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stopnota
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
.Instale el SSL motor Open. Se admiten Open SSL 1.0 o 1.1.
sudo apt-get install libengine-pkcs11-openssl
Busque la ruta al SSL motor Open (
libpkcs11.so
) en su 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 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
-
PKCSGuía de uso de la interfaz de token criptográfico #11, versión 2.40. Editado por John Leiseboer y Robert Griffin. 16 de noviembre de 2014. OASISNota del Comité 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 .