

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Assinatura de certificado autogerenciada usando provedor AWS IoT Core de certificados
<a name="provisioning-cert-provider"></a>

Você pode criar um provedor de AWS IoT Core certificados para assinar solicitações de assinatura de certificados (CSRs) no aprovisionamento de AWS IoT frotas. Um provedor de certificados faz referência a uma função do Lambda e à [API MQTT para provisionamento de frotas `CreateCertificateFromCsr`](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr). A função do Lambda aceita uma CSR e retorna um certificado de cliente assinado.

Quando você não tem um provedor de certificados com o seu Conta da AWS, a [API CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) é chamada no provisionamento da frota para gerar o certificado a partir de uma CSR. Depois de criar um provedor de certificado, o comportamento da [API do CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) mudará e todas as chamadas para essa API do MQTT invocarão o provedor do certificado para emitir o certificado.

Com o provedor de AWS IoT Core certificados, você pode implementar soluções que utilizam autoridades de certificação privadas (CAs) [CA Privada da AWS](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html), como outras de confiança CAs pública ou sua própria infraestrutura de chave pública (PKI) para assinar a CSR. Além disso, você pode usar o provedor de certificados para personalizar os campos do certificado do seu cliente, como períodos de validade, algoritmos de assinatura, emissores e extensões.

**Importante**  
Em seguida, é possível criar apenas um provedor de certificados por Conta da AWS. A mudança de comportamento de assinatura se aplica a toda a frota que chama a [API CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) até que você exclua o provedor de certificados do seu Conta da AWS.

**Topics**
+ [Como a assinatura autogerenciada de certificados funciona no provisionamento de frotas](#provisioning-cert-provider-how-it-works)
+ [Entrada da função do Lambda do provedor de certificados](#provisioning-cert-provider-lambda-input)
+ [Valor de retorno da função do Lambda do provedor de certificados](#provisioning-cert-provider-lambda-return)
+ [Exemplo de função do Lambda](#provisioning-cert-provider-lambda)
+ [Assinatura de certificado autogerenciada para provisionamento de frota](#provisioning-self-certificate-signing)
+ [AWS CLI comandos para provedor de certificados](#provisioning-cert-provider-cli)

## Como a assinatura autogerenciada de certificados funciona no provisionamento de frotas
<a name="provisioning-cert-provider-how-it-works"></a>

### Principais conceitos
<a name="provisioning-cert-provider-concepts"></a>

Os conceitos a seguir fornecem detalhes que podem ajudar você a entender como a assinatura autogerenciada de certificados funciona no provisionamento de AWS IoT frotas. Para obter mais informações, consulte [Provisionar itens que não têm certificados de dispositivo usando o provisionamento de frota](https://docs.aws.amazon.com//iot/latest/developerguide/provision-wo-cert.html).

**AWS IoT aprovisionamento de frotas**  
Com o provisionamento de AWS IoT frota (abreviação de provisionamento de frota), AWS IoT Core gera e entrega com segurança certificados de dispositivos aos seus dispositivos quando eles se conectam pela primeira vez. AWS IoT Core Você pode usar o aprovisionamento de frotas para conectar dispositivos que não têm certificados de dispositivo ao AWS IoT Core. 

**Solicitação de assinatura de certificado (CSR)**  
No processo de provisionamento da frota, um dispositivo faz uma solicitação AWS IoT Core por meio do MQTT de [provisionamento da frota](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html). APIs Essa solicitação inclui uma solicitação de assinatura de certificado (CSR), que será assinada para produzir um certificado de cliente. 

**AWS assinatura gerenciada de certificados no provisionamento de frotas**  
AWS gerenciado é a configuração padrão para assinatura de certificados no aprovisionamento de frotas. Com a assinatura de certificado AWS gerenciada, AWS IoT Core assinará CSRs usando a sua própria CAs.

**Assinatura de certificado autogerenciada em provisionamento de frota**  
Autogerenciada é outra opção para assinatura de certificado no provisionamento de frota. Com a assinatura de certificado autogerenciada, você cria um provedor AWS IoT Core de certificados para assinar CSRs. Você pode usar a assinatura de certificado autogerenciada para assinar CSRs com uma CA gerada pela CA AWS privada, outra CA publicamente confiável ou sua própria infraestrutura de chave pública (PKI).

**AWS IoT Core provedor de certificados**  
AWS IoT Core provedor de certificados (abreviação de provedor de certificados) é um recurso gerenciado pelo cliente usado para assinatura autogerenciada de certificados no provisionamento de frotas.

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

O diagrama a seguir é uma ilustração simplificada de como a assinatura de autocertificado funciona no provisionamento de AWS IoT frotas.

![\[AWS IoT Core provedor de certificados para provisionamento de frotas\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/provisioning-cert-provider.png)

+ Quando um novo dispositivo de IoT é fabricado ou introduzido na frota, ele precisa de certificados de cliente para se autenticar. AWS IoT Core
+ Como parte do processo de provisionamento da frota, o dispositivo solicita certificados do cliente AWS IoT Core por meio do MQTT de [provisionamento da frota](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html). APIs Essa solicitação inclui uma solicitação de assinatura de certificado (CSR).
+ AWS IoT Core invoca o provedor do certificado e passa o CSR como entrada para o provedor.
+ O provedor do certificado usa a CSR como entrada e emite um certificado do cliente.

  Para assinatura AWS gerenciada de certificados, AWS IoT Core assina a CSR usando sua própria CA e emite um certificado de cliente.
+ Com o certificado de cliente emitido, o dispositivo continuará o provisionamento da frota e estabelecerá uma conexão segura com o AWS IoT Core.

## Entrada da função do Lambda do provedor de certificados
<a name="provisioning-cert-provider-lambda-input"></a>

AWS IoT Core envia o objeto a seguir para a função Lambda quando um dispositivo se registra nela. O valor de `certificateSigningRequest` é a CSR no [formato Privacy-Enhanced Mail (PEM)](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-format.html) fornecido na solicitação. `CreateCertificateFromCsr` `principalId`É o ID do principal usado para se conectar AWS IoT Core ao fazer a `CreateCertificateFromCsr` solicitação. `clientId`é o ID do cliente definido para a conexão MQTT.

```
{
	"certificateSigningRequest": "string",
	"principalId": "string",
	"clientId": "string"
}
```

## Valor de retorno da função do Lambda do provedor de certificados
<a name="provisioning-cert-provider-lambda-return"></a>

A função do Lambda deve retornar uma resposta que contenha o valor `certificatePem`. Veja a seguir um exemplo de uma resposta bem-sucedida. AWS IoT Core usará o valor de retorno (`certificatePem`) para criar o certificado.

```
{
	"certificatePem": "string"
}
```

Se o cadastro for bem-sucedido, `CreateCertificateFromCsr` retornará o mesmo `certificatePem` na resposta `CreateCertificateFromCsr`. Para obter mais informações, consulte o exemplo de carga útil de resposta de [CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr).

## Exemplo de função do Lambda
<a name="provisioning-cert-provider-lambda"></a>

Antes de criar um provedor de certificados, é necessário criar uma função do Lambda para assinar um CSR. A seguir está um exemplo de função do Lambda em Python. Essa função chama CA Privada da AWS para assinar a CSR de entrada, usando uma CA privada e o algoritmo de assinatura `SHA256WITHRSA`. O certificado de cliente devolvido será válido por um ano. Para obter mais informações sobre CA Privada da AWS e como criar uma CA privada, consulte [O que é CA AWS privada?](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) e [Criação de uma 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**  
Os certificados retornados pela função do Lambda devem ter o mesmo nome de assunto e chave pública da Solicitação de Assinatura de Certificado (CSR).
A função do Lambda deve terminar de ser executada em 5 segundos.
A função Lambda deve estar na mesma região do Conta da AWS recurso do provedor de certificados.
O responsável pelo AWS IoT serviço deve receber a permissão de invocação para a função Lambda. Para evitar [problemas de substituto confuso](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html), recomendamos definir as permissões de invocação `sourceArn` e `sourceAccount`. Para obter mais informações, consulte [Prevenção de confused deputy entre serviços](https://docs.aws.amazon.com//iot/latest/developerguide/cross-service-confused-deputy-prevention.html).

O seguinte exemplo de política baseada em recursos para o [Lambda](https://docs.aws.amazon.com//lambda/latest/dg/access-control-resource-based.html) concede a AWS IoT a permissão para invocar a função do 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"
				}
			}
		}
	]
}
```

## Assinatura de certificado autogerenciada para provisionamento de frota
<a name="provisioning-self-certificate-signing"></a>

Você pode escolher a assinatura de certificado autogerenciada para provisionamento de frota usando AWS CLI ou Console de gerenciamento da AWS.

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

Para escolher a assinatura de certificado autogerenciada, você deve criar um provedor de AWS IoT Core certificados para fazer login CSRs no aprovisionamento de frotas. AWS IoT Core invoca o provedor do certificado, que usa uma CSR como entrada e retorna um certificado do cliente. Para criar um provedor de certificados, use a operação da API `CreateCertificateProvider` ou o comando da CLI `create-certificate-provider`.

**nota**  
Depois de criar um provedor de certificados, o comportamento da [API `CreateCertificateFromCsr` para provisionamento de frotas](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) mudará, de modo que todas as chamadas para `CreateCertificateFromCsr` invocarão o provedor de certificados para criar os certificados. Pode levar alguns minutos para que esse comportamento mude após a criação de um provedor 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
```

O exemplo a seguir mostra uma saída de exemplo para esse comando:

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Para obter mais informações, consulte `[CreateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` na *Referência de APIs* de *AWS IoT*.

### Console de gerenciamento da AWS
<a name="provisioning-self-certificate-signing-console"></a>

Para escolher a assinatura de certificado autogerenciada usando Console de gerenciamento da AWS, siga as etapas:

1. Acesse o console do [AWS IoT](https://console.aws.amazon.com//iot/home).

1. Na navegação esquerda, em **Segurança**, escolha **Assinatura de certificado**.

1. Na página **Assinatura do certificado**, em **Detalhes da assinatura do certificado**, escolha **Editar método de assinatura do certificado**.

1. Na página **Editar método de assinatura do certificado**, em **Método de assinatura do certificado**, escolha **Autogerenciado**.

1. Na seção **Configurações autogerenciadas**, insira um nome para o provedor de certificados e crie ou escolha uma função do Lambda.

1. Escolha **Atualizar assinatura do certificado**.

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

### Criar provedor de certificados
<a name="provisioning-create-cert-provider"></a>

Para criar um provedor de certificados, use a operação da API `CreateCertificateProvider` ou o comando da CLI `create-certificate-provider`. 

**nota**  
Depois de criar um provedor de certificados, o comportamento da [API `CreateCertificateFromCsr` para provisionamento de frotas](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) mudará, de modo que todas as chamadas para `CreateCertificateFromCsr` invocarão o provedor de certificados para criar os certificados. Pode levar alguns minutos para que esse comportamento mude após a criação de um provedor 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
```

O exemplo a seguir mostra uma saída de exemplo para esse comando:

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Para obter mais informações, consulte `[CreateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` *Referência de APIs* de *AWS IoT*.

### Atualizar provedor de certificados
<a name="provisioning-update-cert-provider"></a>

Para atualizar um provedor de certificados, use a operação da API `UpdateCertificateProvider` ou o comando da 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
```

O exemplo a seguir mostra uma saída de exemplo para esse comando:

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Para obter mais informações, consulte `[UpdateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateCertificateProvider.html)` na *Referência de APIs de *AWS IoT**.

### Descrever provedor de certificados
<a name="provisioning-describe-cert-provider"></a>

Para descrever um provedor de certificados, use a operação da API `DescribeCertificateProvider` ou o comando da CLI `describe-certificate-provider`.

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

O exemplo a seguir mostra uma saída de exemplo para esse 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 obter mais informações, consulte `[DescribeCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeCertificateProvider.html)` *Referência de APIs* de *AWS IoT*.

### Excluir provedor de certificados
<a name="provisioning-delete-cert-provider"></a>

Para excluir um provedor de certificados, use a operação da API `DeleteCertificateProvider` ou o comando da CLI `delete-certificate-provider`. Se você excluir o recurso do provedor de certificados, o comportamento do `CreateCertificateFromCsr` será retomado e AWS IoT criará certificados AWS IoT assinados por um CSR.

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

Esse comando não retorna nenhuma saída. 

Para obter mais informações, consulte `[DeleteCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DeleteCertificateProvider.html)` *Referência de APIs* de *AWS IoT*.

### Listar provedor de certificados
<a name="provisioning-list-cert-provider"></a>

Para listar os provedores de certificados em seu Conta da AWS, use a operação de `ListCertificateProviders` API ou o `list-certificate-providers` comando CLI.

```
aws iot list-certificate-providers
```

O exemplo a seguir mostra uma saída de exemplo para esse comando:

```
{
	"certificateProviders": [
		{
			"certificateProviderName": "my-certificate-provider",
			"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
		}
	]
}
```

Para obter mais informações, consulte [https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html](https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html) na *Referência de APIs* de *AWS IoT*.