

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.

# Firma de certificados autogestionada mediante un proveedor de certificados AWS IoT Core
<a name="provisioning-cert-provider"></a>

Puede crear un proveedor de AWS IoT Core certificados para firmar las solicitudes de firma de certificados (CSRs) en el aprovisionamiento de AWS IoT flotas. Un proveedor de certificados hace referencia a una función de Lambda y a la [API de MQTT `CreateCertificateFromCsr` para el aprovisionamiento de flotas](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr). La función de Lambda acepta una CSR y devuelve un certificado de cliente firmado.

Si no cuenta con un proveedor de certificados Cuenta de AWS, se recurre a la [API CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) 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 [CreateCertificateFromCsr MQTT cambiará y todas las llamadas a esta API](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) de MQTT invocarán al proveedor de certificados para que emita el certificado.

Con el proveedor de AWS IoT Core certificados, puede implementar soluciones que utilicen autoridades de certificación privadas (CAs) [AWS Private CA](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html), como otras de confianza pública CAs, 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 CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) hasta que elimines el proveedor de certificados de tu empresa. Cuenta de AWS

**Topics**
+ [Funcionamiento de la firma de certificados autoadministrada en el aprovisionamiento de flotas](#provisioning-cert-provider-how-it-works)
+ [Entrada de la función de Lambda del proveedor de certificados](#provisioning-cert-provider-lambda-input)
+ [Valor devuelto por la función de Lambda del proveedor de certificados](#provisioning-cert-provider-lambda-return)
+ [Ejemplo de función de Lambda](#provisioning-cert-provider-lambda)
+ [Firma de certificados autoadministrada para el aprovisionamiento de flotas](#provisioning-self-certificate-signing)
+ [AWS CLI comandos para el proveedor de certificados](#provisioning-cert-provider-cli)

## Funcionamiento de la firma de certificados autoadministrada en el aprovisionamiento de flotas
<a name="provisioning-cert-provider-how-it-works"></a>

### Conceptos clave
<a name="provisioning-cert-provider-concepts"></a>

Los siguientes conceptos proporcionan detalles que pueden ayudarle a entender cómo funciona la firma de certificados autogestionada en el aprovisionamiento de AWS IoT flotas. Para obtener más información, consulte [Aprovisionamiento de dispositivos que no tienen certificados de dispositivo mediante el aprovisionamiento de flotas](https://docs.aws.amazon.com//iot/latest/developerguide/provision-wo-cert.html).

**AWS IoT aprovisionamiento de flotas**  
Con el aprovisionamiento de AWS IoT flotas (abreviatura de aprovisionamiento de flotas), AWS IoT Core genera y entrega de forma segura certificados de dispositivo a sus dispositivos cuando se conectan a ellos 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 del MQTT de aprovisionamiento de [flota](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html). APIs Esta solicitud incluye una solicitud de firma de certificado (CSR), la cual se firmará para crear un certificado de cliente. 

**AWS firma gestionada de certificados en el aprovisionamiento de flotas**  
AWS gestionado es la configuración predeterminada para la firma de certificados en el aprovisionamiento de flotas. Con la firma de certificados AWS gestionada, AWS IoT Core firmará CSRs con la suya propia. CAs

**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 autogestionada, se crea un proveedor de AWS IoT Core certificados para CSRs firmarlos. Puede usar la firma de certificados autogestionada para firmar CSRs con una CA generada por una CA AWS privada, otra CA de confianza pública o su propia infraestructura de clave pública (PKI).

**AWS IoT Core proveedor de certificados**  
AWS IoT Core el proveedor de certificados (abreviatura de proveedor de certificados) es un recurso administrado por el cliente que se utiliza para la firma autogestionada de certificados en el aprovisionamiento de flotas.

### Diagrama
<a name="provisioning-cert-provider-diagram"></a>

El siguiente diagrama es una ilustración simplificada de cómo funciona la firma automática de certificados en el aprovisionamiento de flotas. AWS IoT 

![\[AWS IoT Core proveedor de certificados para el aprovisionamiento de flotas\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/provisioning-cert-provider.png)

+ Cuando se fabrica o se introduce un nuevo dispositivo de IoT en la flota, necesita certificados de cliente para autenticarse AWS IoT Core.
+ Como parte del proceso de aprovisionamiento de la flota, el dispositivo solicita los certificados de los clientes a través del AWS IoT Core MQTT de [aprovisionamiento de la flota](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html). APIs 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 AWS gestionada, 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
<a name="provisioning-cert-provider-lambda-input"></a>

AWS IoT Core envía el siguiente objeto a la función Lambda cuando un dispositivo se registra en ella. El valor de `certificateSigningRequest` es la CSR en [formato de correo con privacidad mejorada (PEM)](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-format.html) que se proporciona en la solicitud `CreateCertificateFromCsr`. `principalId`Es el ID del principal al que se conecta AWS IoT Core al realizar la `CreateCertificateFromCsr` solicitud. `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
<a name="provisioning-cert-provider-lambda-return"></a>

La función de Lambda debe devolver una respuesta que contenga el valor `certificatePem`. El siguiente es un ejemplo de una respuesta satisfactoria. 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](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr).

## Ejemplo de función de Lambda
<a name="provisioning-cert-provider-lambda"></a>

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 cómo crear una CA privada, consulte [¿Qué es una CA AWS privada?](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) y [Creación de una CA privada](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html).

```
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 Lambda debe estar en la misma región Cuenta de AWS y región que el recurso del proveedor de certificados.
Se debe conceder AWS IoT al director del servicio el permiso de invocación para la función Lambda. Para evitar [problemas de suplente confuso](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html), le recomendamos que defina `sourceArn` y `sourceAccount` para los permisos de invocación. Para obtener más información, consulte [Prevención de la sustitución confisa entre servicios](https://docs.aws.amazon.com//iot/latest/developerguide/cross-service-confused-deputy-prevention.html).

El siguiente ejemplo de política basada en recursos para [Lambda](https://docs.aws.amazon.com//lambda/latest/dg/access-control-resource-based.html) concede a AWS IoT el permiso para invocar la función de Lambda:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Id": "InvokePermission",
	"Statement": [
		{
			"Sid": "LambdaAllowIotProvider",
			"Effect": "Allow",
			"Principal": {
				"Service": "iot.amazonaws.com"
			},
			"Action": "lambda:InvokeFunction",
			"Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
			"Condition": {
				"StringEquals": {
					"AWS:SourceAccount": "123456789012"
				},
				"ArnLike": {
				"AWS:SourceArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider/my-certificate-provider"
				}
			}
		}
	]
}
```

## Firma de certificados autoadministrada para el aprovisionamiento de flotas
<a name="provisioning-self-certificate-signing"></a>

Puede elegir la firma de certificados autoadministrada para el aprovisionamiento de flotas mediante la AWS CLI o la Consola de administración de AWS.

### AWS CLI
<a name="provisioning-self-certificate-signing-cli"></a>

Para elegir la firma de certificados autogestionada, debe crear un proveedor de AWS IoT Core certificados para iniciar sesión CSRs en Fleet Provisioning. 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](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) 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 \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn: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](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` en la *Referencia de la API de *AWS IoT**.

### Consola de administración de AWS
<a name="provisioning-self-certificate-signing-console"></a>

Para elegir la firma de certificados autogestionada mediante Consola de administración de AWS, siga estos pasos:

1. Vaya a la [consola de AWS IoT](https://console.aws.amazon.com//iot/home).

1. En el panel de navegación de la izquierda, bajo **Seguridad**, elija **Firma de certificado**.

1. En la página **Firma de certificado**, en **Detalles de firma de certificado**, elija **Editar el método de firma de certificados**.

1. En la página **Editar el método de firma de certificados**, en **Método de firma de certificados**, elija **Autoadministrado**.

1. 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.

1. Seleccione **Actualizar firma de certificado**.

## AWS CLI comandos para el proveedor de certificados
<a name="provisioning-cert-provider-cli"></a>

### Creación de un proveedor de certificados
<a name="provisioning-create-cert-provider"></a>

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](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) 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 \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn: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](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` en la *Referencia de la API de *AWS IoT**.

### Actualización del proveedor de certificados
<a name="provisioning-update-cert-provider"></a>

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 \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn: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](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateCertificateProvider.html)` y en la *Referencia de la API de *AWS IoT**.

### Descripción del proveedor de certificados
<a name="provisioning-describe-cert-provider"></a>

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 --certificateProviderName my-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](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeCertificateProvider.html)` en la *Referencia de la API de *AWS IoT**.

### Eliminación de un proveedor de certificados
<a name="provisioning-delete-cert-provider"></a>

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, `CreateCertificateFromCsr` se reanudará el comportamiento de y AWS IoT se crearán certificados AWS IoT firmados por una CSR.

```
aws iot delete-certificate-provider --certificateProviderName my-certificate-provider
```

Este comando no proporciona ninguna salida. 

Para obtener más información, consulte `[DeleteCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DeleteCertificateProvider.html)` en la *Referencia de la API de *AWS IoT**.

### Visualización de la lista de proveedores de certificados
<a name="provisioning-list-cert-provider"></a>

Para enumerar los proveedores de certificados de su Cuenta de AWS empresa, utilice la operación `ListCertificateProviders` API o el comando `list-certificate-providers` CLI.

```
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 [https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html](https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html) en la *Referencia de la API de *AWS IoT**.