Firma de certificados autoadministrada mediante un proveedor de certificados de AWS IoT Core
Puede crear un proveedor de certificados de AWS IoT Core para firmar las solicitudes de firma de certificados (CSR) en el aprovisionamiento de flotas de AWS IoT. Un proveedor de certificados hace referencia a una función de Lambda y a la API de MQTT CreateCertificateFromCsr para el aprovisionamiento de flotas. La función de Lambda acepta una CSR y devuelve un certificado de cliente firmado.
Si no cuenta con un proveedor de certificados en su Cuenta de AWS, se llama a la API de MQTT CreateCertificateFromCSR en el aprovisionamiento de flotas para generar el certificado a partir de una CSR. Tras crear un proveedor de certificados, el comportamiento de la API de MQTT CreateCertificateFromCsr cambiará y todas las llamadas a esta API de MQTT invocarán al proveedor de certificados para que emita el certificado.
Con el proveedor de certificados de AWS IoT Core, puede implementar soluciones que utilicen entidades de certificación (CA) privadas, como AWS Private CA, otras CA de confianza pública o su propia infraestructura de clave pública (PKI) para firmar la CSR. Además, puede utilizar el proveedor de certificados para personalizar los campos del certificado de su cliente, como los períodos de validez, los algoritmos de firma, los emisores y las extensiones.
importante
Solo puede crear un proveedor de certificados por Cuenta de AWS. El cambio en el comportamiento de firma se aplica a toda la flota que llama a la API de MQTT CreateCertificateFromCsr hasta que elimine el proveedor de certificados de su Cuenta de AWS.
En este tema:
Funcionamiento de la firma de certificados autoadministrada en el aprovisionamiento de flotas
Conceptos clave
Los siguientes conceptos proporcionan detalles que pueden ayudarle a entender cómo funciona la firma de certificados autoadministrada en el aprovisionamiento de flotas de AWS IoT. Para obtener más información, consulte Aprovisionamiento de dispositivos que no tienen certificados de dispositivo mediante el aprovisionamiento de flotas.
- AWS IoT Aprovisionamiento de flotas de
-
Con el aprovisionamiento de flotas de AWS IoT, AWS IoT Core genera y distribuye de forma segura certificados de dispositivo a sus dispositivos cuando estos se conectan a AWS IoT Core por primera vez. Puede utilizar el aprovisionamiento de flotas para conectar dispositivos que no tienen certificados de dispositivo con AWS IoT Core.
- Solicitud de firma de certificado (CSR)
-
En el proceso de aprovisionamiento de flotas, un dispositivo realiza una solicitud a AWS IoT Core través de las API de MQTT de aprovisionamiento de flotas. Esta solicitud incluye una solicitud de firma de certificado (CSR), la cual se firmará para crear un certificado de cliente.
- AWS Firma de certificados administrada por en el aprovisionamiento de flotas
-
Administrado por AWS es la configuración predeterminada para la firma de certificados en el aprovisionamiento de flotas. Con la firma de certificados administrada por AWS, AWS IoT Core firmará las CSR con sus propias CA.
- Firma de certificados autoadministrada en el aprovisionamiento de flotas
-
La autoadministración es otra opción para la firma de certificados en el aprovisionamiento de flotas. Con la firma de certificados autoadministrada, se crea un proveedor de certificados de AWS IoT Core para firmar las CSR. Puede utilizar la firma de certificados autoadministrada para firmar las CSR con una CA generada por una CA privada de AWS, otra CA de confianza pública o su propia infraestructura de clave pública (PKI).
- AWS IoT Core Proveedor de certificados de
-
El proveedor de certificados de AWS IoT Core (brevemente, el proveedor de certificados) es un recurso administrado por el cliente que se utiliza para la firma autoadministrada de certificados en el aprovisionamiento de flotas.
Diagrama
El siguiente diagrama muestra de forma simplificada el funcionamiento de la firma automática de certificados en el aprovisionamiento de flotas de AWS IoT.
-
Cuando se fabrica o se introduce un nuevo dispositivo de IoT en la flota, necesita certificados de cliente para autenticarse con AWS IoT Core.
-
Como parte del proceso de aprovisionamiento de flotas, el dispositivo solicita a AWS IoT Core los certificados de cliente a través de las API de MQTT de aprovisionamiento de flotas. Esta solicitud incluye una solicitud de firma de certificado (CSR).
-
AWS IoT Core invoca al proveedor de certificados y pasa la CSR como entrada al proveedor.
-
El proveedor de certificados toma la CSR como entrada y emite un certificado de cliente.
Para la firma de certificados administrada por AWS, AWS IoT Core firma la CSR con su propia CA y emite un certificado de cliente.
-
Con el certificado de cliente emitido, el dispositivo continuará con el aprovisionamiento de flotas y establecerá una conexión segura con AWS IoT Core.
Entrada de la función de Lambda del proveedor de certificados
AWS IoT Core envía este objeto a la función de Lambda cuando un dispositivo se registra en él. El valor de certificateSigningRequest es la CSR en formato de correo con privacidad mejorada (PEM) que se proporciona en la solicitud CreateCertificateFromCsr. principalId es el ID de la entidad principal que se utiliza para conectar a AWS IoT Core al hacer la solicitud CreateCertificateFromCsr. clientId es el ID de cliente establecido para la conexión MQTT.
{ "certificateSigningRequest": "string", "principalId": "string", "clientId": "string" }
Valor devuelto por la función de Lambda del proveedor de certificados
La función de Lambda debe devolver una respuesta que contenga el valor certificatePem. A continuación, se muestra un ejemplo de respuesta correcta. AWS IoT Core utilizará el valor devuelto (certificatePem) para crear el certificado.
{ "certificatePem": "string" }
Si el registro se realiza correctamente, CreateCertificateFromCsr devolverá el mismo certificatePem en la respuesta CreateCertificateFromCsr. Para obtener más información, consulte el ejemplo de carga útil de respuesta de CreateCertificateFromCsr.
Ejemplo de función de Lambda
Antes de crear un proveedor de certificados, debe crear una función de Lambda para firmar una CSR. El siguiente es un ejemplo de función de Lambda en Python. Esta función llama a AWS Private CA para firmar la CSR de entrada con una CA privada y el algoritmo de firma SHA256WITHRSA. El certificado de cliente devuelto tendrá una validez de un año. Para obtener más información sobre AWS Private CA y cómo crear una CA privada, consulte ¿Qué es Autoridad de certificación privada de AWS? y Creación de una entidad de certificación (CA) privada.
import os import time import uuid import boto3 def lambda_handler(event, context): ca_arn = os.environ['CA_ARN'] csr = (event['certificateSigningRequest']).encode('utf-8') acmpca = boto3.client('acm-pca') cert_arn = acmpca.issue_certificate( CertificateAuthorityArn=ca_arn, Csr=csr, Validity={"Type": "DAYS", "Value": 365}, SigningAlgorithm='SHA256WITHRSA', IdempotencyToken=str(uuid.uuid4()) )['CertificateArn'] # Wait for certificate to be issued time.sleep(1) cert_pem = acmpca.get_certificate( CertificateAuthorityArn=ca_arn, CertificateArn=cert_arn )['Certificate'] return { 'certificatePem': cert_pem }
importante
-
Los certificados devueltos por la función de Lambda deben tener el mismo nombre de sujeto y clave pública que la solicitud de firma de certificado (CSR).
-
La función de Lambda debe terminar de ejecutarse en cinco segundos.
-
La función de Lambda debe estar en la misma Cuenta de AWS y región que el recurso del proveedor de certificados.
-
A la entidad principal del servicio de AWS IoT se le debe conceder el permiso de invocación para la función de Lambda. Para evitar problemas de suplente confuso, le recomendamos que defina
sourceArnysourceAccountpara los permisos de invocación. Para obtener más información, consulte Prevención de la sustitución confisa entre servicios.
El siguiente ejemplo de política basada en recursos para Lambda concede a AWS IoT el permiso para invocar la función de Lambda:
Firma de certificados autoadministrada para el aprovisionamiento de flotas
Puede elegir la firma de certificados autoadministrada para el aprovisionamiento de flotas mediante la AWS CLI o la Consola de administración de AWS.
Para elegir la firma de certificados autoadministrada, debe crear un proveedor de certificados de AWS IoT Core que firme las CSR en el aprovisionamiento de flotas. AWS IoT Core invoca al proveedor de certificados, que toma una CSR como entrada y devuelve un certificado de cliente. Para crear un perfil de certificado, utilice la operación de la API CreateCertificateProvider o el comando de la CLI create-certificate-provider.
nota
Tras crear un proveedor de certificados, el comportamiento de la API CreateCertificateFromCsr para el aprovisionamiento de flotas cambiará, de modo que todas las llamadas a CreateCertificateFromCsr invocarán al proveedor de certificados para crear los certificados. Puede que este comportamiento tarde unos minutos en cambiar una vez creado un proveedor de certificados.
aws iot create-certificate-provider \ --certificateProviderNamemy-certificate-provider\ --lambdaFunctionArnarn:aws:lambda:us-east-1:123456789012:function:my-function-1\ --accountDefaultForOperations CreateCertificateFromCsr
A continuación se muestra un ejemplo del resultado asociado a la ejecución de este comando:
{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }
Para obtener más información, consulte CreateCertificateProvider en la Referencia de la API de AWS IoT.
Para elegir la firma de certificados autoadministrada mediante la Consola de administración de AWS, siga estos pasos:
-
Vaya a la consola de AWS IoT
. -
En el panel de navegación de la izquierda, bajo Seguridad, elija Firma de certificado.
-
En la página Firma de certificado, en Detalles de firma de certificado, elija Editar el método de firma de certificados.
-
En la página Editar el método de firma de certificados, en Método de firma de certificados, elija Autoadministrado.
-
En la sección Configuración autoadministrada, introduzca un nombre para el proveedor de certificados y, a continuación, cree o elija una función de Lambda.
-
Seleccione Actualizar firma de certificado.
Comandos de la AWS CLI para el proveedor de certificados
Creación de un proveedor de certificados
Para crear un perfil de certificado, utilice la operación de la API CreateCertificateProvider o el comando de la CLI create-certificate-provider.
nota
Tras crear un proveedor de certificados, el comportamiento de la API CreateCertificateFromCsr para el aprovisionamiento de flotas cambiará, de modo que todas las llamadas a CreateCertificateFromCsr invocarán al proveedor de certificados para crear los certificados. Puede que este comportamiento tarde unos minutos en cambiar una vez creado un proveedor de certificados.
aws iot create-certificate-provider \ --certificateProviderNamemy-certificate-provider\ --lambdaFunctionArnarn:aws:lambda:us-east-1:123456789012:function:my-function-1\ --accountDefaultForOperations CreateCertificateFromCsr
A continuación se muestra un ejemplo del resultado asociado a la ejecución de este comando:
{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }
Para obtener más información, consulte CreateCertificateProvider en la Referencia de la API de AWS IoT.
Actualización del proveedor de certificados
Para actualizar un proveedor de certificados, utilice la operación de la API UpdateCertificateProvider o el comando de la CLI update-certificate-provider.
aws iot update-certificate-provider \ --certificateProviderNamemy-certificate-provider\ --lambdaFunctionArnarn:aws:lambda:us-east-1:123456789012:function:my-function-2\ --accountDefaultForOperations CreateCertificateFromCsr
A continuación se muestra un ejemplo del resultado asociado a la ejecución de este comando:
{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }
Para obtener más información, consulte UpdateCertificateProvider y en la Referencia de la API de AWS IoT.
Descripción del proveedor de certificados
Para describir un proveedor de certificados, utilice la operación de la API DescribeCertificateProvider o el comando de la CLI describe-certificate-provider.
aws iot describe-certificate-provider --certificateProviderNamemy-certificate-provider
A continuación se muestra un ejemplo del resultado asociado a la ejecución de este comando:
{ "certificateProviderName": "my-certificate-provider", "lambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "accountDefaultForOperations": [ "CreateCertificateFromCsr" ], "creationDate": "2022-11-03T00:15", "lastModifiedDate": "2022-11-18T00:15" }
Para obtener más información, consulte DescribeCertificateProvider en la Referencia de la API de AWS IoT.
Eliminación de un proveedor de certificados
Para eliminar un proveedor de certificados, utilice la operación de la API DeleteCertificateProvider o el comando de la CLI delete-certificate-provider. Si elimina el recurso del proveedor de certificados, se reanudará el comportamiento de CreateCertificateFromCsr y AWS IoT creará certificados firmados por AWS IoT de una CSR.
aws iot delete-certificate-provider --certificateProviderNamemy-certificate-provider
Este comando no proporciona ninguna salida.
Para obtener más información, consulte DeleteCertificateProvider en la Referencia de la API de AWS IoT.
Visualización de la lista de proveedores de certificados
Para enumerar los proveedores de certificados de su Cuenta de AWS, utilice la operación de la API ListCertificateProviders o el comando de la CLI list-certificate-providers.
aws iot list-certificate-providers
A continuación se muestra un ejemplo del resultado asociado a la ejecución de este comando:
{ "certificateProviders": [ { "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" } ] }
Para obtener más información, consulte ListCertificateProvider en la Referencia de la API de AWS IoT.