

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

# Provisionamento de dispositivos
<a name="iot-provision"></a>

AWS fornece várias maneiras diferentes de provisionar um dispositivo e instalar certificados de cliente exclusivos nele. Esta seção descreve todas as maneiras e como selecionar a melhor delas para sua solução de IoT. Essas opções são descritas em detalhes no whitepaper intitulado [Fabricação e provisionamento de dispositivos com certificados X.509 no AWS IoT Core](https://docs.aws.amazon.com/whitepapers/latest/device-manufacturing-provisioning/device-manufacturing-provisioning.html). 

**Selecione a opção que melhor se adapta à sua situação**
+ 

**Você pode instalar certificados em dispositivos de IoT antes de eles serem entregues**  
[Se você puder instalar com segurança certificados de cliente exclusivos em seus dispositivos de IoT antes de serem entregues para uso pelo usuário final, convém usar o [*just-in-time*provisionamento (JITP) ou o registro (JITR](jit-provisioning.md)). *just-in-time*](auto-register-device-cert.md)

  Usando o JITP e o JITR, a autoridade de certificação (CA) usada para assinar o certificado do dispositivo é registrada AWS IoT e reconhecida AWS IoT quando o dispositivo se conecta pela primeira vez. O dispositivo é provisionado AWS IoT em sua primeira conexão usando os detalhes de seu modelo de provisionamento.

  Para obter mais informações sobre o provisionamento de item único, JITP, JITR e em massa de dispositivos com certificados exclusivos, consulte [Provisionamento de dispositivos com certificados de dispositivo](provision-w-cert.md).
+ 

**Usuários finais ou instaladores podem usar um aplicativo para instalar certificados em seus dispositivos de IoT**  
Se não estiver a seu alcance instalar com segurança certificados de cliente exclusivos em seu dispositivo de IoT antes de ele ser entregue ao usuário final, mas o usuário final ou um instalador puderem usar um aplicativo para registrar os dispositivos e instalar os certificados exclusivos, use o processo de [provisionamento por usuário confiável](provision-wo-cert.md#trusted-user).

  Usar um usuário confiável, como um usuário final ou um instalador com uma conta conhecida, pode simplificar o processo de fabricação do dispositivo. Em vez de um certificado de cliente exclusivo, os dispositivos têm um certificado temporário que permite que o dispositivo se conecte AWS IoT por apenas 5 minutos. Durante essa janela de 5 minutos, o usuário confiável obtém um certificado de cliente exclusivo com uma vida útil mais longa, que é instalado no dispositivo. A vida útil limitada do certificado de reivindicação minimiza o risco de um certificado comprometido.

  Para obter mais informações, consulte [Provisionamento por usuário confiável](provision-wo-cert.md#trusted-user).
+ 

**Usuários finais NÃO PODEM usar um aplicativo para instalar certificados em seus dispositivos de IoT**  
Se nenhuma das opções anteriores funcionar em sua solução de IoT, o processo de [provisionamento por reivindicação](provision-wo-cert.md#claim-based) é uma opção. Com esse processo, seus dispositivos de IoT têm um certificado de reivindicação que é compartilhado por outros dispositivos da frota. Na primeira vez que um dispositivo se conecta a um certificado de solicitação, AWS IoT registra o dispositivo usando seu modelo de provisionamento e emite ao dispositivo seu certificado de cliente exclusivo para acesso posterior. AWS IoT

   Essa opção permite o provisionamento automático de um dispositivo quando ele se conecta AWS IoT, mas pode apresentar um risco maior no caso de um certificado de solicitação comprometido. Se um certificado de reivindicação for comprometido, você poderá desativá-lo. A desativação do certificado de reivindicação impede que todos os dispositivos com esse certificado sejam registrados no futuro. No entanto, a desativação do certificado de reivindicação não bloqueará dispositivos que já foram provisionados.

  Para obter mais informações, consulte [Provisionamento por reivindicação](provision-wo-cert.md#claim-based).

## Dispositivos de provisionamento em AWS IoT
<a name="provisioning-in-iot"></a>

Ao provisionar um dispositivo com AWS IoT, você deve criar recursos para que seus dispositivos AWS IoT possam se comunicar com segurança. Outros recursos podem ser criados para ajudar a gerenciar a frota de dispositivos. Os seguintes recursos podem ser criados durante o processo de provisionamento: 
+ Uma coisa da IoT.

  Coisas de IoT são entradas no registro do AWS IoT dispositivo. Cada coisa tem um nome exclusivo e um conjunto de atributos, e está associada a um dispositivo físico. As coisas podem ser definidas usando um tipo de coisa ou agrupadas em grupos de coisas. Para obter mais informações, consulte [Gerenciando dispositivos com AWS IoT](iot-thing-management.md).

   Embora não seja necessário, criar objetos possibilita gerenciar a frota de dispositivos de forma mais eficaz, podendo pesquisar dispositivos por tipo, grupo e atributos de objetos. Para obter mais informações, consulte [Indexação de frotas](iot-indexing.md).
**nota**  
Para indexar os dados de status de conectividade do objeto, provisione o objeto e configure-o para que o nome dela corresponda ao do ID do cliente usado na solicitação de conexão.
+ Um certificado X.509.

  Os dispositivos usam certificados X.509 para realizar autenticação mútua com. AWS IoT Você pode registrar um certificado existente ou AWS IoT gerar e registrar um novo certificado para você. Associe um certificado a um dispositivo anexando-o à coisa que representa o dispositivo. Também é necessário copiar o certificado e a chave privada associada no dispositivo. Os dispositivos apresentam o certificado ao se conectar AWS IoT a. Para obter mais informações, consulte [Autenticação](authentication.md).
+ Uma política da IoT.

  As políticas da IoT definem as operações que um dispositivo pode executar na AWS IoT. As políticas da IoT são anexadas aos certificados do dispositivo. Quando um dispositivo apresenta o certificado para AWS IoT, ele recebe as permissões especificadas na política. Para obter mais informações, consulte [Autorização](iot-authorization.md). Cada dispositivo precisa de um certificado para se comunicar com a AWS IoT.

AWS IoT oferece suporte ao provisionamento automatizado de frotas usando modelos de provisionamento. Os modelos de provisionamento descrevem os recursos AWS IoT necessários para provisionar seu dispositivo. Os modelos contêm variáveis que permitem usar um modelo para provisionar vários dispositivos. Ao provisionar um dispositivo, especifique valores para as variáveis específicas do dispositivo usando um dicionário ou *mapa*. Para provisionar outro dispositivo, especifique novos valores no dicionário.

É possível usar o provisionamento automatizado independentemente de os dispositivos terem certificados exclusivos (e a chave privada associada) ou não.

## Provisionamento de frota APIs
<a name="provisioning-apis"></a>

Há várias categorias de APIs uso no provisionamento de frotas:
+ Essas funções do plano de controle criam e gerenciam os modelos de provisionamento de frota e configuram políticas de usuário confiáveis.
  + [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)
  + [ CreateProvisioningTemplateVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplateVersion.html)
  + [DeleteProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteProvisioningTemplate.html)
  + [DeleteProvisioningTemplateVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteProvisioningTemplateVersion.html)
  + [DescribeProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeProvisioningTemplate.html)
  + [DescribeProvisioningTemplateVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeProvisioningTemplateVersion.html)
  + [ListProvisioningTemplates](https://docs.aws.amazon.com/iot/latest/apireference/API_ListProvisioningTemplates.html)
  + [ListProvisioningTemplateVersions](https://docs.aws.amazon.com/iot/latest/apireference/API_ListProvisioningTemplateVersions.html)
  + [UpdateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateProvisioningTemplate.html)
+ Usuários confiáveis podem usar essa função de plano de controle para gerar uma reivindicação de integração temporária. Essa reivindicação temporária é passada para o dispositivo durante a configuração da rede Wi-Fi ou método semelhante.
  + [CreateProvisioningClaim](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningClaim.html)
+ A API MQTT usada durante o processo de provisionamento por dispositivos com um certificado de reivindicação de provisionamento incorporado em um dispositivo ou passado para ele por um usuário confiável.
  + [CreateCertificateFromCsr](fleet-provision-api.md#create-cert-csr)
  + [CreateKeysAndCertificate](fleet-provision-api.md#create-keys-cert)
  + [RegisterThing](fleet-provision-api.md#register-thing)

# Provisionar dispositivos que não têm certificados de dispositivo usando o provisionamento de frotas
<a name="provision-wo-cert"></a>

Ao usar o provisionamento de AWS IoT frota, AWS IoT pode gerar e entregar com segurança certificados de dispositivos e chaves privadas aos seus dispositivos quando eles se conectam AWS IoT pela primeira vez. AWS IoT fornece certificados de cliente assinados pela autoridade de certificação (CA) raiz da Amazon.

Há duas maneiras de usar o provisionamento de frotas:
+ [Provisionamento por reivindicação](#claim-based)
+ [Provisionamento por usuário confiável](#trusted-user)

## Provisionamento por reivindicação
<a name="claim-based"></a>

Os dispositivos podem ser fabricados com um certificado de alegação de provisionamento e uma chave privada (que são credenciais de finalidade especial) incorporados neles. Se esses certificados estiverem registrados AWS IoT, o serviço poderá trocá-los por certificados de dispositivo exclusivos que o dispositivo possa usar para operações regulares. Esse processo inclui as seguintes etapas:

**Antes de entregar o dispositivo**

1. Chame [https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html) para criar um modelo de provisionamento. Essa API retorna um ARN de modelo. Para obter mais informações, consulte [API MQTT de provisionamento de dispositivos](fleet-provision-api.md).

   Você também pode criar um modelo de aprovisionamento de frota no AWS IoT console. 

   1. No painel de navegação, escolha o menu suspenso **Conectar muitos dispositivos**. Depois, selecione **Conectar muitos dispositivos**.

   1. Escolha **Criar modelo de provisionamento**.

   1. Escolha o **cenário de provisionamento** que melhor se adapta aos seus processos de instalação. Em seguida, escolha **Próximo**.

   1. Preencha o fluxo de trabalho do modelo.

1. Crie certificados e chaves privadas associadas a serem usados como certificados de reivindicação de provisionamento.

1. Registre esses certificados AWS IoT e associe uma política de IoT que restrinja o uso dos certificados. O exemplo de política da IoT a seguir restringe o uso do certificado associado a essa política para dispositivos de provisionamento.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Connect"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Publish",
                   "iot:Receive"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topic/$aws/certificates/create/*",
       "arn:aws:iot:us-east-1:123456789012:topic/$aws/provisioning-templates/templateName/provision/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iot:Subscribe",
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/certificates/create/*",
       "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/provisioning-templates/templateName/provision/*"
               ]
           }
       ]
   }
   ```

1. Dê permissão ao AWS IoT serviço para criar ou atualizar recursos de IoT, como itens e certificados em sua conta, ao provisionar dispositivos. Faça isso anexando a política `AWSIoTThingsRegistration` gerenciada a uma função do IAM (chamada de função de provisionamento) que confia no responsável pelo serviço. AWS IoT 

1. Produza o dispositivo com o certificado de reivindicação de provisionamento incorporado de forma segura nele.

O dispositivo agora está pronto para ser entregue no local onde será instalado para uso.

**Importante**  
As chaves privadas de alegação de provisionamento devem ser protegidas o tempo todo, inclusive no dispositivo. Recomendamos que você use AWS IoT CloudWatch métricas e registros para monitorar as indicações de uso indevido. Se você detectar uso indevido, desative o certificado de reivindicação de provisionamento para que ele não possa ser usado para o provisionamento de dispositivos.

**Como inicializar o dispositivo para uso**

1. O dispositivo usa o [AWS IoT Device SDKs, Mobile SDKs e AWS IoT Device Client](iot-sdks.md) para se conectar e se autenticar AWS IoT usando o certificado de solicitação de aprovisionamento que está instalado no dispositivo.
**nota**  
Por segurança, o `certificateOwnershipToken` devolvido pelo `CreateCertificateFromCsr` e `CreateKeysAndCertificate` expira após uma hora. `RegisterThing` deve ser chamado antes que `certificateOwnershipToken` expire. Se o certificado criado por `CreateCertificateFromCsr` ou `CreateKeysAndCertificate` não tiver sido ativado e não tiver sido anexado a uma política ou a uma coisa quando o token expirar, o certificado será excluído. Se o token expirar, o dispositivo poderá chamar `CreateCertificateFromCsr` ou `CreateKeysAndCertificate` novamente para gerar um novo certificado.

1. O dispositivo obtém um certificado permanente e uma chave privada usando uma destas opções. O dispositivo usará o certificado e a chave para todas as autenticações futuras com AWS IoT.

   1. Ligue [`CreateKeysAndCertificate`](fleet-provision-api.md#create-keys-cert)para criar um novo certificado e uma nova chave privada usando a autoridade de AWS certificação.

      Ou

   1. Chame [`CreateCertificateFromCsr`](fleet-provision-api.md#create-cert-csr) para gerar um certificado de uma solicitação de assinatura de certificado que mantém sua chave privada segura.

1. No dispositivo, chame [`RegisterThing`](fleet-provision-api.md#register-thing) para registrar o dispositivo com a AWS IoT e criar recursos de nuvem.

   O serviço de Provisionamento de frotas usa um modelo de provisionamento para definir e criar recursos de nuvem como coisas da IoT. O modelo pode especificar atributos e grupos aos quais a coisa pertence. Os grupos de coisas devem existir antes que uma nova possa ser adicionada a eles.

1. Depois de salvar o certificado permanente no dispositivo, o dispositivo deverá se desconectar da sessão iniciada com o certificado de reivindicação de provisionamento e reconectar usando o certificado permanente. 

O dispositivo agora está pronto para se comunicar normalmente com AWS IoT.

## Provisionamento por usuário confiável
<a name="trusted-user"></a>

Em muitos casos, um dispositivo se conecta AWS IoT pela primeira vez quando um usuário confiável, como um usuário final ou técnico de instalação, usa um aplicativo móvel para configurar o dispositivo em seu local de implantação.

**Importante**  
É necessário gerenciar o acesso e a permissão do usuário confiável para realizar esse procedimento. Uma maneira de fazer isso é fornecer e manter uma conta para o usuário confiável que os autentica e concede acesso às operações da API e aos recursos da AWS IoT necessários para realizar este procedimento. 

**Antes de entregar o dispositivo**

1. Ligue [https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html)para criar um modelo de provisionamento e retornar seu e. *templateArn* *templateName*

1. Crie um perfil do IAM que será utilizado por um usuário confiável para iniciar o processo de provisionamento. O modelo de provisionamento permite que somente esse usuário provisione um dispositivo. Por exemplo:

   ```
   {
       "Effect": "Allow",
       "Action": [
           "iot:CreateProvisioningClaim"
       ],
       "Resource": [
           "arn:aws:iot:aws-region:aws-account-id:provisioningtemplate/templateName"
       ]
   }
   ```

1. Dê permissão ao AWS IoT serviço para criar ou atualizar recursos de IoT, como itens e certificados em sua conta ao provisionar dispositivos. Você faz isso anexando a política `AWSIoTThingsRegistration` gerenciada a uma função do IAM (chamada de função de *provisionamento) que confia no* responsável pelo serviço. AWS IoT 

1. Forneça os meios para identificar seus usuários confiáveis, por exemplo, fornecendo a eles uma conta que possa autenticá-los e autorizar suas interações com as operações de AWS API necessárias para registrar seus dispositivos.

**Como inicializar o dispositivo para uso**

1. Um usuário confiável entra no aplicativo para dispositivos móveis ou no web service de provisionamento.

1. O aplicativo móvel ou o aplicativo web usa o perfil do IAM e chama [https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningClaim.html](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningClaim.html) para obter um certificado de reivindicação de provisionamento temporário da AWS IoT.
**nota**  
Por segurança, o certificado de reivindicação de provisionamento temporário retornado pelo `CreateProvisioningClaim` expira após cinco minutos. As etapas a seguir devem retornar com êxito um certificado válido antes que o certificado de reivindicação de provisionamento temporário expire. Os certificados de reivindicação de provisionamento temporário não são exibidos na lista de certificados da sua conta.

1. O aplicativo móvel ou aplicativo web fornece o certificado de reivindicação de provisionamento temporário para o dispositivo juntamente com todas as informações de configuração necessárias, como credenciais de Wi-Fi.

1. O dispositivo usa o certificado de reivindicação de provisionamento temporário para conectar-se à AWS IoT usando o [AWS IoT Device SDKs, Mobile SDKs e AWS IoT Device Client](iot-sdks.md).

1. O dispositivo obtém um certificado permanente e uma chave privada usando uma dessas opções em até cinco minutos após a conexão AWS IoT com o certificado de solicitação de aprovisionamento temporário. O dispositivo usará o certificado e a chave com os quais essas opções retornarão para todas as autenticações futuras AWS IoT.

   1. Ligue [`CreateKeysAndCertificate`](fleet-provision-api.md#create-keys-cert)para criar um novo certificado e uma nova chave privada usando a autoridade de AWS certificação.

      Ou

   1. Chame [`CreateCertificateFromCsr`](fleet-provision-api.md#create-cert-csr) para gerar um certificado de uma solicitação de assinatura de certificado que mantém sua chave privada segura.
**nota**  
Lembre-se [`CreateKeysAndCertificate`](fleet-provision-api.md#create-keys-cert)ou [`CreateCertificateFromCsr`](fleet-provision-api.md#create-cert-csr)deve devolver um certificado válido dentro de cinco minutos após a conexão AWS IoT com o certificado de solicitação de aprovisionamento temporário.

1. O dispositivo liga [`RegisterThing`](fleet-provision-api.md#register-thing)para registrar o dispositivo AWS IoT e criar recursos na nuvem. 

   O serviço de Provisionamento de frotas usa um modelo de provisionamento para definir e criar recursos de nuvem como coisas da IoT. O modelo pode especificar atributos e grupos aos quais a coisa pertence. Os grupos de coisas devem existir antes que uma nova possa ser adicionada a eles.

1. Depois de salvar o certificado permanente no dispositivo, o dispositivo deve se desconectar da sessão iniciada com o certificado de reivindicação de provisionamento temporário e reconectar usando o certificado permanente. 

O dispositivo agora está pronto para se comunicar normalmente com AWS IoT.

## Usando ganchos de pré-provisionamento com a CLI AWS
<a name="hooks-cli-instruc"></a>

O procedimento a seguir cria um modelo de provisionamento com hooks de pré-provisionamento. A função do Lambda usada aqui é um exemplo que pode ser modificado. 

**Como criar e aplicar um hook de pré-provisionamento a um modelo de provisionamento**

1. Crie uma função do Lambda que tenha uma entrada e uma saída definidas. As funções do Lambda são altamente personalizáveis. `allowProvisioning` e `parameterOverrides` são necessários para criar hooks de pré-provisionamento. Para obter mais informações sobre a criação de funções Lambda, consulte [Usando AWS Lambda com a interface de linha de AWS comando](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html).

   Veja a seguir um exemplo de uma saída de função do Lambda:

   ```
   {
     "allowProvisioning": True,
     "parameterOverrides": {
       "incomingKey0": "incomingValue0",
       "incomingKey1": "incomingValue1"
     }
   }
   ```

1. AWS IoT usa políticas baseadas em recursos para chamar o Lambda, então você deve dar AWS IoT permissão para chamar sua função do Lambda.
**Importante**  
Certifique-se de incluir `source-arn` ou `source-account` nas chaves de contexto de condição global das políticas anexadas à sua ação do Lambda, para evitar a manipulação de permissões. Para obter mais informações sobre isso, consulte [Prevenção contra o ataque do “substituto confuso” em todos os serviços](cross-service-confused-deputy-prevention.md).

   Veja a seguir um exemplo que usa [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) para conceder à IoT permissão para o Lambda.

   ```
   aws lambda add-permission \
       --function-name myLambdaFunction \
       --statement-id iot-permission \
       --action lambda:InvokeFunction \
       --principal iot.amazonaws.com
   ```

1. Adicione um gancho de pré-provisionamento a um modelo usando o comando ou. [create-provisioning-template[update-provisioning-template](https://docs.aws.amazon.com/cli/latest/reference/iot/update-provisioning-template.html)](https://docs.aws.amazon.com/cli/latest/reference/iot/create-provisioning-template.html)

   O exemplo de CLI a seguir usa o [create-provisioning-template](https://docs.aws.amazon.com/cli/latest/reference/iot/create-provisioning-template.html)para criar um modelo de provisionamento com ganchos de pré-provisionamento:

   ```
   aws iot create-provisioning-template \
       --template-name myTemplate \
       --provisioning-role-arn arn:aws:iam:us-east-1:1234564789012:role/myRole \
       --template-body file://template.json \
       --pre-provisioning-hook file://hooks.json
   ```

   A saída desse comando é semelhante à seguinte:

   ```
   {
       "templateArn": "arn:aws:iot:us-east-1:1234564789012:provisioningtemplate/myTemplate",
       "defaultVersionId": 1,
       "templateName": myTemplate
   }
   ```

   Também é possível carregar um parâmetro de um arquivo em vez de digitar tudo como um valor de parâmetro da linha de comando para economizar tempo. Para obter mais informações, consulte [Carregar parâmetros da AWS CLI a partir de um arquivo](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html). Veja a seguir o parâmetro `template` no formato JSON expandido:

   ```
   {
       "Parameters" : {
           "DeviceLocation": {
               "Type": "String"
           }
       },
       "Mappings": {
           "LocationTable": {
               "Seattle": {
                   "LocationUrl": "https://example.aws"
               }
           }
       },
       "Resources" : {
           "thing" : {
               "Type" : "AWS::IoT::Thing",
               "Properties" : {
                   "AttributePayload" : {
                       "version" : "v1",
                       "serialNumber" : "serialNumber"
                   },
                   "ThingName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]},
                   "ThingTypeName" : {"Fn::Join":["",["ThingTypePrefix_",{"Ref":"SerialNumber"}]]},
                   "ThingGroups" : ["widgets", "WA"],
                   "BillingGroup": "BillingGroup"
               },
               "OverrideSettings" : {
                   "AttributePayload" : "MERGE",
                   "ThingTypeName" : "REPLACE",
                   "ThingGroups" : "DO_NOTHING"
               }
           },
           "certificate" : {
               "Type" : "AWS::IoT::Certificate",
               "Properties" : {
                   "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"},
                   "Status" : "Active",
                   "ThingPrincipalType" : "EXCLUSIVE_THING"
               }
           },
           "policy" : {
               "Type" : "AWS::IoT::Policy",
               "Properties" : {
                   "PolicyDocument" : {
                       "Version": "2012-10-17",		 	 	 
                       "Statement": [{
                           "Effect": "Allow",
                           "Action":["iot:Publish"],
                           "Resource": ["arn:aws:iot:us-east-1:504350838278:topic/foo/bar"]
                       }]
                   }
               }
           }
       },
       "DeviceConfiguration": {
           "FallbackUrl": "https://www.example.com/test-site",
           "LocationUrl": {
               "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]}
       }
   }
   ```

   Veja a seguir o parâmetro `pre-provisioning-hook` no formato JSON expandido:

   ```
   {
        "targetArn" : "arn:aws:lambda:us-east-1:765219403047:function:pre_provisioning_test",
        "payloadVersion" : "2020-04-01"
   }
   ```

# Provisionamento de dispositivos com certificados de dispositivo
<a name="provision-w-cert"></a>

AWS IoT fornece três maneiras de provisionar dispositivos quando eles já têm um certificado de dispositivo (e uma chave privada associada):
+ Provisionamento de uma única coisa com um modelo de provisionamento. Essa é uma boa opção se você precisa provisionar somente um dispositivo por vez.
+ Just-in-time provisionamento (JITP) com um modelo que provisiona um dispositivo quando ele se conecta pela primeira vez a. AWS IoT Essa é uma boa opção se você precisa registrar uma grande quantidade de dispositivos, mas não tem informações sobre eles para montar uma lista de provisionamento em massa.
+ Registro em massa. Essa opção permite que você especifique uma lista de valores de um modelo de provisionamento de uma única coisa que são armazenados em um arquivo em um bucket do S3. Essa abordagem funciona bem se você tem uma grande quantidade de dispositivos conhecidos cujas características desejadas podem ser montadas por você em uma lista. 

**Topics**
+ [Provisionamento de uma única coisa](single-thing-provisioning.md)
+ [Just-in-time provisionamento](jit-provisioning.md)
+ [Registro em massa](bulk-provisioning.md)

# Provisionamento de uma única coisa
<a name="single-thing-provisioning"></a>

Para provisionar algo, use a [RegisterThing](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterThing.html)API ou o comando `register-thing` CLI. O comando `register-thing` da CLI usa os seguintes argumentos:

--template-body  
O modelo provisionado.

--parameters  
Uma lista de pares de nome-valor para os parâmetros usados no modelo de provisionamento, no formato JSON (por exemplo, `{"ThingName" : "MyProvisionedThing", "CSR" : "csr-text"}`).

Consulte [Modelos de provisionamento](provision-template.md).

[RegisterThing](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterThing.html)ou `register-thing` retorna o ARNs para os recursos e o texto do certificado que ele criou:

```
{
    "certificatePem": "certificate-text",
    "resourceArns": {
    "PolicyLogicalName": "arn:aws:iot:us-west-2:123456789012:policy/2A6577675B7CD1823E271C7AAD8184F44630FFD7",
    "certificate": "arn:aws:iot:us-west-2:123456789012:cert/cd82bb924d4c6ccbb14986dcb4f40f30d892cc6b3ce7ad5008ed6542eea2b049",
    "thing": "arn:aws:iot:us-west-2:123456789012:thing/MyProvisionedThing"
    }
}
```

Se um parâmetro for omitido do dicionário, o valor padrão será usado. Se nenhum valor padrão estiver especificado, o parâmetro não será substituído por um valor.

# Just-in-time provisionamento
<a name="jit-provisioning"></a>

Você pode usar o just-in-time provisionamento (JITP) para provisionar seus dispositivos quando eles tentarem se conectar pela primeira vez. AWS IoT Para provisionar o dispositivo, você deve habilitar o registro automático e associar um modelo de provisionamento ao certificado da CA usado para assinar o certificado do dispositivo. Os sucessos e erros de provisionamento são registrados como na Amazon. [Métricas de provisionamento de dispositivos](metrics_dimensions.md#provisioning-metrics) CloudWatch

**Topics**
+ [Visão geral de JITP](#jit-provisioning-overview)
+ [Registrar CA usando o modelo de provisionamento](#jit-provisioning-registerCA-template)
+ [Registrar CA usando o nome do modelo de provisionamento](#jit-provisioning-registerCA-templateName)

## Visão geral de JITP
<a name="jit-provisioning-overview"></a>

Quando um dispositivo tenta se conectar AWS IoT usando um certificado assinado por um certificado CA registrado, AWS IoT carrega o modelo do certificado CA e o usa para fazer a chamada [RegisterThing](fleet-provision-api.md#register-thing). O fluxo de trabalho de JITP registra primeiro um certificado com um valor de status de `PENDING_ACTIVATION`. Quando o fluxo de provisionamento do dispositivo for concluído, o status do certificado será alterado para `ACTIVE`.

AWS IoT define os seguintes parâmetros que você pode declarar e referenciar nos modelos de provisionamento:
+ `AWS::IoT::Certificate::Country`
+ `AWS::IoT::Certificate::Organization`
+ `AWS::IoT::Certificate::OrganizationalUnit`
+ `AWS::IoT::Certificate::DistinguishedNameQualifier`
+ `AWS::IoT::Certificate::StateName`
+ `AWS::IoT::Certificate::CommonName`
+ `AWS::IoT::Certificate::SerialNumber`
+ `AWS::IoT::Certificate::Id`

Os valores para esses parâmetros de modelo de provisionamento são limitados ao que o JITP pode extrair do campo de assunto do certificado do dispositivo que está sendo provisionado. O certificado deve conter valores para todos os parâmetros no corpo do modelo. O parâmetro `AWS::IoT::Certificate::Id` se refere a um ID gerado internamente, e não a um ID contido no certificado. Você pode obter o valor desse ID usando a `principal()` função dentro de uma AWS IoT regra. 

**nota**  
Você pode AWS IoT Core just-in-time provisionar dispositivos usando o recurso de provisionamento (JITP) sem precisar enviar toda a cadeia de confiança na primeira conexão de um dispositivo para o. AWS IoT Core A apresentação do certificado da CA é opcional, mas é necessário que o dispositivo envie a extensão [Server Name Indication (SNI)](https://datatracker.ietf.org/doc/html/rfc3546#section-3.1) ao se conectar ao AWS IoT Core.

### Exemplo de corpo do modelo
<a name="jit-provisioning-example-templatebody"></a>

O arquivo JSON a seguir é um exemplo de corpo do modelo de JITP completo. 

```
{
   "Parameters":{
      "AWS::IoT::Certificate::CommonName":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::SerialNumber":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Country":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Id":{
         "Type":"String"
      }
   },
   "Resources":{
      "thing":{
         "Type":"AWS::IoT::Thing",
         "Properties":{
            "ThingName":{
               "Ref":"AWS::IoT::Certificate::CommonName"
            },
            "AttributePayload":{
               "version":"v1",
               "serialNumber":{
                  "Ref":"AWS::IoT::Certificate::SerialNumber"
               }
            },
            "ThingTypeName":"lightBulb-versionA",
            "ThingGroups":[
               "v1-lightbulbs",
               {
                  "Ref":"AWS::IoT::Certificate::Country"
               }
            ]
         },
         "OverrideSettings":{
            "AttributePayload":"MERGE",
            "ThingTypeName":"REPLACE",
            "ThingGroups":"DO_NOTHING"
         }
      },
      "certificate":{
         "Type":"AWS::IoT::Certificate",
         "Properties":{
            "CertificateId":{
               "Ref":"AWS::IoT::Certificate::Id"
            },
            "Status":"ACTIVE"
         }
      },
      "policy":{
         "Type":"AWS::IoT::Policy",
         "Properties":{
            "PolicyDocument":"{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
         }
      }
   }
}
```

Este modelo de exemplo declara valores para os parâmetros de provisionamento `AWS::IoT::Certificate::CommonName`, `AWS::IoT::Certificate::SerialNumber`, `AWS::IoT::Certificate::Country` e `AWS::IoT::Certificate::Id` que são extraídos do certificado e usados na seção `Resources`. Em seguida, o fluxo de trabalho de JITP usa esse modelo para executar as seguintes ações:
+ Registrar um certificado e definir seu status como PENDING\$1ACTIVE.
+ Criar um recurso de coisa.
+ Criar um recurso de política.
+ Anexar a política ao certificado.
+ Anexe o certificado ao objeto da .
+ Atualizar o status do certificado como ACTIVE.

O provisionamento do dispositivo falhará se o certificado não tiver todas as propriedades mencionadas na seção `Parameters` do `templateBody`. Por exemplo, se `AWS::IoT::Certificate::Country` estiver incluído no modelo, mas o certificado não tiver uma propriedade `Country`, o provisionamento do dispositivo falhará.

Você também pode usar CloudTrail para solucionar problemas com seu modelo JITP. Para obter informações sobre as métricas registradas na Amazon CloudWatch, consulte[Métricas de provisionamento de dispositivos](metrics_dimensions.md#provisioning-metrics). Para obter mais informações sobre modelos de provisionamento, consulte [Modelos de provisionamento](provision-template.md).

**nota**  
Durante o processo de provisionamento, o just-in-time provisionamento (JITP) chama outras operações de API do plano de controle. AWS IoT Essas chamadas podem exceder as [Cotas de controle de utilização da AWS IoT](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#throttling-limits) definidas para a conta e resultar em chamadas limitadas. Entre em contato com o [Suporte ao cliente da AWS](https://console.aws.amazon.com/support/home) para aumentar as cotas do controle de utilização, se necessário.

## Registrar CA usando o modelo de provisionamento
<a name="jit-provisioning-registerCA-template"></a>

Para registrar uma CA usando um modelo de provisionamento completo, siga estas etapas: 

1. Salve o modelo de provisionamento e as informações do ARN da função, como no exemplo a seguir, como um arquivo JSON:

   ```
   { 
        "templateBody" : "{\r\n    \"Parameters\" : {\r\n        \"AWS::IoT::Certificate::CommonName\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::SerialNumber\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::Country\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::Id\": {\r\n            \"Type\": \"String\"\r\n        }\r\n    },\r\n    \"Resources\": {\r\n        \"thing\": {\r\n            \"Type\": \"AWS::IoT::Thing\",\r\n            \"Properties\": {\r\n                \"ThingName\": {\r\n                    \"Ref\": \"AWS::IoT::Certificate::CommonName\"\r\n                },\r\n                \"AttributePayload\": {\r\n                    \"version\": \"v1\",\r\n                    \"serialNumber\": {\r\n                        \"Ref\": \"AWS::IoT::Certificate::SerialNumber\"\r\n                    }\r\n                },\r\n                \"ThingTypeName\": \"lightBulb-versionA\",\r\n                \"ThingGroups\": [\r\n                    \"v1-lightbulbs\",\r\n                    {\r\n                        \"Ref\": \"AWS::IoT::Certificate::Country\"\r\n                    }\r\n                ]\r\n            },\r\n            \"OverrideSettings\": {\r\n                \"AttributePayload\": \"MERGE\",\r\n                \"ThingTypeName\": \"REPLACE\",\r\n                \"ThingGroups\": \"DO_NOTHING\"\r\n            }\r\n        },\r\n        \"certificate\": {\r\n            \"Type\": \"AWS::IoT::Certificate\",\r\n            \"Properties\": {\r\n                \"CertificateId\": {\r\n                    \"Ref\": \"AWS::IoT::Certificate::Id\"\r\n                },\r\n                \"Status\": \"ACTIVE\"\r\n            },\r\n            \"OverrideSettings\": {\r\n                \"Status\": \"DO_NOTHING\"\r\n            }\r\n        },\r\n        \"policy\": {\r\n            \"Type\": \"AWS::IoT::Policy\",\r\n            \"Properties\": {\r\n                \"PolicyDocument\": \"{ \\\"Version\\\": \\\"2012-10-17		 	 	 \\\", \\\"Statement\\\": [{ \\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\":[\\\"iot:Publish\\\"], \\\"Resource\\\": [\\\"arn:aws:iot:us-east-1:123456789012:topic\/foo\/bar\\\"] }] }\"\r\n            }\r\n        }\r\n    }\r\n}",
        "roleArn" : "arn:aws:iam::123456789012:role/JITPRole"
   }
   ```

   Neste exemplo, o valor do campo `templateBody` deve ser um objeto JSON especificado como uma string de escape e pode usar somente os valores da [lista anterior](#jit-provisioning-overview). É possível usar uma variedade de ferramentas para criar a saída JSON necessária, como `json.dumps` (Python) ou `JSON.stringify` (Node). O valor do campo `roleARN` deve ser o ARN de uma função que tenha a `AWSIoTThingsRegistration` anexada a ele. Além disso, o modelo pode usar um `PolicyName` existente em vez da `PolicyDocument` em linha no exemplo. 

1. Registre um certificado CA com a operação [Register CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) API ou o [https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html)comando CLI. Você precisa especificar o diretório do modelo de provisionamento e as informações do ARN da função que você salvou na etapa anterior:

   O seguinte exemplo mostra como registrar um certificado CA no modo `DEFAULT` usando a AWS CLI:

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --verification-cert file://your-verification-cert 
                   --set-as-active --allow-auto-registration --registration-config file://your-template
   ```

   O seguinte exemplo mostra como registrar um certificado CA no modo `SNI_ONLY` usando a AWS CLI:

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --certificate-mode SNI_ONLY
                    --set-as-active --allow-auto-registration --registration-config file://your-template
   ```

   Para obter mais informações, consulte [Registrar certificados CA](https://docs.aws.amazon.com//iot/latest/developerguide/register-CA-cert.html).

1.  (Opcional) Atualize as configurações de um certificado CA usando a operação [Update CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) API ou o comando [https://docs.aws.amazon.com//cli/latest/reference/iot/update-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-ca-certificate.html)CLI. 

   O seguinte exemplo mostra como atualizar um certificado CA usando a AWS CLI:

   ```
   aws iot update-ca-certificate --certificate-id caCertificateId
                   --new-auto-registration-status ENABLE --registration-config file://your-template
   ```

## Registrar CA usando o nome do modelo de provisionamento
<a name="jit-provisioning-registerCA-templateName"></a>

Para registrar uma CA usando o nome de um modelo de provisionamento, siga estas etapas:

1. Salve o corpo do modelo de provisionamento como um arquivo JSON. Você pode encontrar um exemplo de um corpo de modelo no [corpo de modelo de exemplo](#jit-provisioning-example-templatebody).

1. Para criar um modelo de aprovisionamento, use a [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)API ou o comando CLI: [https://docs.aws.amazon.com//cli/latest/reference/iot/create-provisioning-template.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-provisioning-template.html)

   ```
   aws iot create-provisioning-template --template-name your-template-name \
           --template-body file://your-template-body.json --type JITP \
           --provisioning-role-arn arn:aws:iam::123456789012:role/test
   ```
**nota**  
Para just-in-time provisionamento (JITP), você deve especificar o tipo de modelo a ser `JITP` ao criar o modelo de provisionamento. Para obter mais informações sobre o tipo de modelo, consulte [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)a *Referência AWS da API*.

1. Para registrar a CA com o nome do modelo, use a CACertificate API de [registro](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) ou o comando da [https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html)CLI:

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --verification-cert file://your-verification-cert \
           --set-as-active --allow-auto-registration --registration-config templateName=your-template-name
   ```

# Registro em massa
<a name="bulk-provisioning"></a>

É possível usar o comando [https://docs.aws.amazon.com/iot/latest/apireference/API_StartThingRegistrationTask.html](https://docs.aws.amazon.com/iot/latest/apireference/API_StartThingRegistrationTask.html) para registrar coisas em massa. Esse comando usa um modelo de provisionamento, um nome de bucket do S3, um nome de chave, e o ARN de uma função que permite acesso ao arquivo no bucket do S3. O arquivo no bucket do S3 contém os valores usados para substituir os parâmetros no modelo. O arquivo deve ser um JSON delimitado por nova linha. Cada linha contém todos os valores dos parâmetros para o registro de um único dispositivo. Por exemplo:

```
{"ThingName": "foo", "SerialNumber": "123", "CSR": "csr1"}
{"ThingName": "bar", "SerialNumber": "456", "CSR": "csr2"}
```

As seguintes operações de APIs relacionadas ao registro em massa podem ser úteis:
+ [ListThingRegistrationTasks](https://docs.aws.amazon.com/iot/latest/apireference/API_ListThingRegistrationTasks.html): lista as tarefas atuais de provisionamento em massa. 
+ [ DescribeThingRegistrationTask](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeThingRegistrationTask.html): fornece informações sobre uma tarefa específica de registro de itens em massa.
+ [StopThingRegistrationTask](https://docs.aws.amazon.com/iot/latest/apireference/API_StopThingRegistrationTask.html): interrompe uma tarefa de registro em massa.
+ [ListThingRegistrationTaskReports](https://docs.aws.amazon.com/iot/latest/apireference/API_ListThingRegistrationTaskReports.html): usado para verificar os resultados e as falhas de uma tarefa de registro de itens em massa.

**nota**  
Somente uma tarefa de operação de registro de coisas em massa pode ser executada de cada vez (por conta).
As operações de registro em massa chamam outras operações de API do plano de AWS IoT controle. Essas chamadas podem exceder as [Cotas de controle de utilização da AWS IoT](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#throttling-limits) na conta e causar erros de limitação. Entre em contato com o [Suporte ao AWS Cliente](https://console.aws.amazon.com/support/home) para aumentar suas cotas AWS IoT de limitação, se necessário.

# Modelos de provisionamento
<a name="provision-template"></a>

Um modelo de provisionamento é um documento JSON que usa parâmetros para descrever os recursos que seu dispositivo deve usar para interagir. AWS IoT Um modelo de provisionamento contém duas seções: `Parameters` e `Resources`. Há dois tipos de modelos de provisionamento em. AWS IoT Um é usado para just-in-time provisionamento (JITP) e registro em massa, e o segundo é usado para provisionamento de frotas.

**Topics**
+ [Seção de parâmetros](#parameters-section)
+ [Seção de recursos](#resources-section)
+ [Exemplo de modelo para registro em massa](#bulk-template-example)
+ [Exemplo de modelo para just-in-time provisionamento (JITP)](#JITP-template-example)
+ [Provisionamento de frotas](#fleet-provision-template)

## Seção de parâmetros
<a name="parameters-section"></a>

A seção `Parameters` declara os parâmetros usados na seção `Resources`. Cada parâmetro declara um nome, um tipo e um valor padrão opcional. O valor padrão é usado quando o dicionário passado com o modelo não contém um valor para o parâmetro. A seção `Parameters` de um documento de modelo é semelhante à seguinte:

```
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber" : {
            "Type" : "String"
        },
        "Location" : {
            "Type" : "String",
            "Default" : "WA"
        },
        "CSR" : {
            "Type" : "String"    
        }
    }
}
```

Esse trecho de código do corpo de modelo declara quatro parâmetros: `ThingName`, `SerialNumber`, `Location` e `CSR`. Todos esses parâmetros são do tipo `String`. O parâmetro `Location` declara um valor padrão de `"WA"`.

## Seção de recursos
<a name="resources-section"></a>

A `Resources` seção do corpo do modelo declara os recursos necessários para que seu dispositivo se comunique com AWS IoT: uma coisa, um certificado e uma ou mais políticas de IoT. Cada recurso especifica um nome lógico, um tipo e um conjunto de propriedades.

Um nome lógico permite que você faça referência a um recurso em outro lugar no modelo.

O tipo especifica o tipo de recurso que você está declarando. Os tipos válidos são:
+ `AWS::IoT::Thing`
+ `AWS::IoT::Certificate`
+ `AWS::IoT::Policy`

As propriedades que você especifica dependem do tipo de recurso que você está declarando.

### Recursos de coisas
<a name="thing-resources"></a>

Os recursos de coisas são declarados usando as seguintes propriedades:
+ `ThingName`: String.
+ `AttributePayload`: opcional. Uma lista de pares nome-valor.
+ `ThingTypeName`: opcional. String para um tipo de coisa associado à coisa.
+ `ThingGroups`: opcional. Uma lista de grupos aos quais a coisa pertence.
+ `BillingGroup`: opcional. String para o nome de um grupo de faturamento associado.
+ `PackageVersions`: opcional. String para um pacote associado e nomes de versão.

### Recursos de certificados
<a name="certificate-resources"></a>

É possível especificar certificados de uma das seguintes maneiras:
+ Uma solicitação de assinatura de certificado (CSR).
+ Um ID de certificado de um certificado de dispositivo existente. (Somente o certificado IDs pode ser usado com um modelo de aprovisionamento de frota.)
+ Um certificado de dispositivo criado com um certificado da CA registrado na AWS IoT. Se houver mais de um certificado CA registrado com o mesmo campo de assunto, você também deverá passar o certificado CA usado para assinar o certificado do dispositivo.

**nota**  
Ao declarar um certificado em um modelo, use somente um desses métodos. Por exemplo, se você usar uma CSR, não será possível especificar também um ID de certificado ou um certificado de dispositivo. Para obter mais informações, consulte [Certificados do cliente X.509](x509-client-certs.md). 

Para obter mais informações, consulte [Visão geral do certificado X.509](authentication.md#x509-certificate-overview). 

Os recursos de certificados são declarados usando as seguintes propriedades:
+ `CertificateSigningRequest`: String.
+ `CertificateId`: String.
+ `CertificatePem`: String.
+ `CACertificatePem`: String.
+ `Status`: opcional. String que pode ser `ACTIVE` ou `INACTIVE`. Padronizada como ACTIVE.
+ `ThingPrincipalType`: opcional. String que especifica o tipo de relacionamento entre a coisa e a entidade principal (o certificado).
  + `EXCLUSIVE_THING`: estabelece um relacionamento exclusivo. A entidade principal só pode ser vinculada a essa coisa específica e a nenhuma outra.
  + `NON_EXCLUSIVE_THING`: anexa a entidade principal especificada às coisas. É possível anexar várias coisas à entidade principal. Esse é o valor padrão caso não seja especificado.
**nota**  
Você também pode provisionar dispositivos sem certificados de dispositivos. Para obter mais informações, consulte [Provisionar dispositivos que não têm certificados de dispositivo usando o provisionamento de frotas](provision-wo-cert.md).

Exemplos:
+ Certificado especificado com um CSR:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "CertificateSigningRequest": {"Ref" : "CSR"},
              "Status" : "ACTIVE"      
          }
      }
  }
  ```
+ Certificado especificado com um ID de certificado existente:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "CertificateId": {"Ref" : "CertificateId"}
          }
      }
  }
  ```
+ Certificado especificado com um certificado .pem existente .pem e certificado .pem da CA:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "CACertificatePem": {"Ref" : "CACertificatePem"},
              "CertificatePem": {"Ref" : "CertificatePem"}
          }
      }
  }
  ```
+ Vincule exclusivamente uma coisa a uma entidade principal:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "ThingPrincipalType" : "EXCLUSIVE_THING"
          }
      }
  }
  ```

### Recursos de políticas
<a name="policy-resources"></a>

Os recursos de políticas são declarados com uma das seguintes propriedades:
+ `PolicyName`: opcional. String. Padroniza para um hash do documento de política. O `PolicyName` só pode referenciar políticas da AWS IoT , mas não políticas do IAM. Se você estiver usando uma política da AWS IoT existente, insira o nome da política para a propriedade `PolicyName`. Não inclua a propriedade `PolicyDocument`.
+ `PolicyDocument`: opcional. Um objeto JSON especificado como uma string de escape. Se `PolicyDocument` não for fornecido, a política já deverá estar criada.

**nota**  
Se uma seção `Policy` estiver presente, `PolicyName` ou `PolicyDocument`, mas não ambos, deve ser especificado.

### Configurações de substituição
<a name="override-settings"></a>

Se um modelo especificar um recurso que já existe, a seção `OverrideSettings` permitirá que você especifique a ação a ser executada:

`DO_NOTHING`  
Deixe o recurso como está.

`REPLACE`  
Substitui o recurso pelo recurso especificado no modelo.

`FAIL`  
Faz com que a solicitação falhe com um `ResourceConflictsException`.

`MERGE`  
Válido apenas para as propriedades `ThingGroups` e `AttributePayload` de uma `thing`. Mescla os atributos ou associações de grupo existentes da coisa com os especificados no modelo.

Ao declarar um recurso de coisa, você pode especificar `OverrideSettings` para as seguintes propriedades:
+ `ATTRIBUTE_PAYLOAD`
+ `THING_TYPE_NAME`
+ `THING_GROUPS`

Ao declarar um recurso de certificado, você pode especificar `OverrideSettings` para a propriedade `Status`.

`OverrideSettings` não estão disponíveis para recursos de política.

### Exemplo de recurso
<a name="resource-example"></a>

O trecho de código do modelo a seguir declara uma coisa, um certificado e uma política:

```
{ 
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "ThingName" : {"Ref" : "ThingName"},
                "AttributePayload" : { "version" : "v1", "serialNumber" :  {"Ref" : "SerialNumber"}}, 
                "ThingTypeName" :  "lightBulb-versionA",
                "ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}]
            },
            "OverrideSettings" : {
                "AttributePayload" : "MERGE",
                "ThingTypeName" : "REPLACE",
                "ThingGroups" : "DO_NOTHING"
            }
        },  
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateSigningRequest": {"Ref" : "CSR"},
                "Status" : "ACTIVE"      
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyDocument" : "{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
            }
        }
    }
}
```

A coisa é declarada com:
+ O nome lógico `"thing"`.
+ O tipo `AWS::IoT::Thing`.
+  Um conjunto de propriedades de coisas.

  As propriedades da coisa incluem o nome, um conjunto de atributos, um nome opcional de tipo de coisa e uma lista opcional de grupos de coisas aos quais a coisa pertence.

Os parâmetros são referenciados por `{"Ref":"parameter-name"}`. Quando o modelo é avaliado, os parâmetros são substituídos pelo valor do parâmetro do dicionário passado com o modelo.

O certificado é declarado com:
+ O nome lógico `"certificate"`.
+ O tipo `AWS::IoT::Certificate`.
+ Um conjunto de propriedades.

  As propriedades incluem a CSR do certificado e a configuração do status como `ACTIVE`. O texto da CSR é passado como um parâmetro no dicionário passado com o modelo.

A política é declarada com:
+ O nome lógico `"policy"`.
+ O tipo `AWS::IoT::Policy`.
+ O nome de uma política existente ou um documento de política.

## Exemplo de modelo para registro em massa
<a name="bulk-template-example"></a>

O arquivo JSON a seguir é um exemplo de modelo de provisionamento completo que especifica o certificado com uma CSR:

(O valor do campo `PolicyDocument` deve ser um objeto JSON especificado como uma string de escape.)

```
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber" : {
            "Type" : "String"
        },
        "Location" : {
            "Type" : "String",
            "Default" : "WA"
        },
        "CSR" : {
            "Type" : "String"    
        }
    },
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "ThingName" : {"Ref" : "ThingName"},
                "AttributePayload" : { "version" : "v1", "serialNumber" :  {"Ref" : "SerialNumber"}}, 
                "ThingTypeName" :  "lightBulb-versionA",
                "ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}]
            }
        },
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateSigningRequest": {"Ref" : "CSR"},
                "Status" : "ACTIVE",
                "ThingPrincipalType" : "EXCLUSIVE_THING"
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyDocument" : "{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
            }
        }
    }
}
```

## Exemplo de modelo para just-in-time provisionamento (JITP)
<a name="JITP-template-example"></a>

O arquivo JSON a seguir é um exemplo de modelo de provisionamento completo que especifica um certificado existente com um ID de certificado:

```
{
   "Parameters":{
      "AWS::IoT::Certificate::CommonName":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::SerialNumber":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Country":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Id":{
         "Type":"String"
      }
   },
   "Resources":{
      "thing":{
         "Type":"AWS::IoT::Thing",
         "Properties":{
            "ThingName":{
               "Ref":"AWS::IoT::Certificate::CommonName"
            },
            "AttributePayload":{
               "version":"v1",
               "serialNumber":{
                  "Ref":"AWS::IoT::Certificate::SerialNumber"
               }
            },
            "ThingTypeName":"lightBulb-versionA",
            "ThingGroups":[
               "v1-lightbulbs",
               {
                  "Ref":"AWS::IoT::Certificate::Country"
               }
            ]
         },
         "OverrideSettings":{
            "AttributePayload":"MERGE",
            "ThingTypeName":"REPLACE",
            "ThingGroups":"DO_NOTHING"
         }
      },
      "certificate":{
         "Type":"AWS::IoT::Certificate",
         "Properties":{
            "CertificateId":{
               "Ref":"AWS::IoT::Certificate::Id"
            },
            "Status":"ACTIVE",
            "ThingPrincipalType" : "EXCLUSIVE_THING"
         }
      },
      "policy":{
         "Type":"AWS::IoT::Policy",
         "Properties":{
            "PolicyDocument":"{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
         }
      }
   }
}
```

**Importante**  
Você deve usar `CertificateId` em um modelo usado para o provisionamento JIT.

Para obter mais informações sobre o tipo de modelo de aprovisionamento, consulte a referência [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type)da AWS API.

Para obter mais informações sobre como usar esse modelo para just-in-time provisionamento, consulte: Provisionamento [J. ust-in-time](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html)

## Provisionamento de frotas
<a name="fleet-provision-template"></a>

Os modelos de provisionamento de frota são usados AWS IoT para configurar a nuvem e o dispositivo. Esses modelos usam os mesmos parâmetros e recursos que o JITP e os modelos de registro em massa. Para obter mais informações, consulte [Modelos de provisionamento](#provision-template). Os modelos de provisionamento de frotas podem conter uma seção `Mapping` e uma seção `DeviceConfiguration`. É possível usar funções intrínsecas dentro de um modelo de provisionamento de frotas para gerar uma configuração específica de dispositivo. Os modelos de aprovisionamento de frotas são recursos nomeados e identificados por ARNs (por exemplo,`arn:aws:iot:us-west-2:1234568788:provisioningtemplate/templateName`).

### Mapeamentos
<a name="mappings"></a>

A seção opcional `Mappings` corresponde uma chave a um conjunto de valores nomeados correspondente. Por exemplo, se você quiser definir valores com base em uma AWS região, você pode criar um mapeamento que usa o Região da AWS nome como chave e contém os valores que você deseja especificar para cada região específica. Você usa a função intrínseca `Fn::FindInMap` para recuperar valores em um mapa.

Não é possível incluir parâmetros, pseudoparâmetros ou chamar funções intrínsecas na seção `Mappings`.

### Configuração do dispositivo
<a name="device-config"></a>

A seção de configuração do dispositivo contém os dados arbitrários que você deseja enviar para os dispositivos ao provisionar. Por exemplo: 

```
{
    "DeviceConfiguration": {
        "Foo":"Bar"
    }
}
```

Se você estiver enviando mensagens para seus dispositivos usando o formato de carga útil do JavaScript Object Notation (JSON), AWS IoT Core formate esses dados como JSON. Se você estiver usando o formato de carga útil Concise Binary Object Representation (CBOR), o AWS IoT Core formatará esses dados como CBOR. A seção `DeviceConfiguration` não é compatível com objetos JSON aninhados.

### Funções intrínsecas
<a name="intrinsic-functions"></a>

As funções intrínsecas são usadas em qualquer seção do modelo de provisionamento, exceto a seção `Mappings`.

`Fn::Join`  
Anexa um conjunto de valores em um único valor, separados pelo delimitador especificado. Se um delimitador é uma string vazia, os valores são concatenados sem delimitador.  
`Fn::Join` não é compatível com [Recursos de políticas](#policy-resources).

`Fn::Select`  
Retorna um único objeto de uma lista de objetos por índice.  
`Fn::Select` não verifica valores `null` ou se o índice está fora dos limites da matriz. Ambas as condições resultam em um erro de provisionamento, portanto, escolha um valor de índice e garanta que a lista contenha valores não nulos.

`Fn::FindInMap`  
Retorna o valor correspondente às chaves em um mapa de dois níveis que é declarado na seção `Mappings`.

`Fn::Split`  
Divide uma string em uma lista de valores de string para que seja possível selecionar um elemento na lista de strings. Especifique um delimitador que determine onde a string é dividida (por exemplo, uma vírgula). Depois de dividir uma string, use `Fn::Select` para selecionar um elemento.  
Por exemplo, se uma string de sub-rede delimitada por vírgula IDs for importada para seu modelo de pilha, você poderá dividir a string em cada vírgula. Na lista de sub-rede IDs, use `Fn::Select` para especificar uma ID de sub-rede para um recurso.

`Fn::Sub`  
Substitui variáveis em uma string de entrada por valores especificados por você. É possível usar essa função para criar comandos ou saídas que incluem valores que não estão disponíveis até que você crie ou atualize uma pilha.

### Exemplo de modelo de provisionamento por frota
<a name="fleet-provisioning-example"></a>

```
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber": {
            "Type": "String"
        },
        "DeviceLocation": {
            "Type": "String"
        }
    },
    "Mappings": {
        "LocationTable": {
            "Seattle": {
                "LocationUrl": "https://example.aws"
            }
        }
    },
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "AttributePayload" : { 
                    "version" : "v1",
                    "serialNumber" : "serialNumber"
                },
                "ThingName" : {"Ref" : "ThingName"},
                "ThingTypeName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]},
                "ThingGroups" : ["v1-lightbulbs", "WA"],
                "BillingGroup": "LightBulbBillingGroup"
            },
            "OverrideSettings" : {
                "AttributePayload" : "MERGE",
                "ThingTypeName" : "REPLACE",
                "ThingGroups" : "DO_NOTHING"
            }
        },
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"},
                "Status" : "Active",
                "ThingPrincipalType" : "EXCLUSIVE_THING"
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyDocument" : {
                    "Version": "2012-10-17",		 	 	 
                    "Statement": [{
                        "Effect": "Allow",
                        "Action":["iot:Publish"],
                        "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/foo/bar"]
                    }]
                }
            }
        }
    },
    "DeviceConfiguration": {
        "FallbackUrl": "https://www.example.com/test-site",
        "LocationUrl": {
            "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]}
        }
}
```

**nota**  
Um modelo de provisionamento existente pode ser atualizado para adicionar um [hook de pré-provisionamento](pre-provisioning-hook.md).

# Ganchos de pré-provisionamento
<a name="pre-provisioning-hook"></a>

AWS recomenda o uso de funções de gancho de pré-provisionamento ao criar modelos de provisionamento para permitir mais controle sobre quais e quantos dispositivos sua conta incorpora. Os hooks de pré-provisionamento são funções do Lambda que validam parâmetros passados do dispositivo antes de permitir que ele seja provisionado. Essa função do Lambda deve existir na sua conta antes de provisionar um dispositivo, já que ela é chamada sempre que um dispositivo envia uma solicitação por meio de [RegisterThing](fleet-provision-api.md#register-thing).

**Importante**  
Certifique-se de incluir `source-arn` ou `source-account` nas chaves de contexto de condição global das políticas anexadas à sua ação do Lambda, para evitar a manipulação de permissões. Para obter mais informações sobre isso, consulte [Prevenção contra o ataque do “substituto confuso” em todos os serviços](cross-service-confused-deputy-prevention.md).

Para dispositivos a serem provisionados, a função do Lambda deve aceitar o objeto de entrada e retornar o objeto de saída descrito nesta seção. O provisionamento prosseguirá somente se a função do Lambda retornar um objeto com `"allowProvisioning": True`.

## Entrada de hook de pré-provisão
<a name="pre-provisioning-hook-input"></a>

AWS IoT envia esse objeto para a função Lambda quando um dispositivo se registra com. AWS IoT

```
{
    "claimCertificateId" : "string",
    "certificateId" : "string",
    "certificatePem" : "string",
    "templateArn" : "arn:aws:iot:us-east-1:1234567890:provisioningtemplate/MyTemplate",
    "clientId" : "221a6d10-9c7f-42f1-9153-e52e6fc869c1",
    "parameters" : {
        "string" : "string",
        ...
    }
}
```

O objeto `parameters` passado para a função do Lambda contém as propriedades no argumento `parameters` passado na carga da solicitação de[RegisterThing](fleet-provision-api.md#register-thing). 

## Valor de retorno do hook de pré-provisão
<a name="pre-provisioning-hook-output"></a>

A função do Lambda deve retornar uma resposta que indique se autorizou a solicitação de provisionamento e os valores de quaisquer propriedades a serem substituídos.

Veja a seguir um exemplo de uma resposta bem-sucedida da função de pré-provisionamento.

```
{
    "allowProvisioning": true,
    "parameterOverrides" : {
        "Key": "newCustomValue",
        ...
    }
}
```

Os valores de `"parameterOverrides"` serão adicionados ao parâmetro `"parameters"` na carga da solicitação de [RegisterThing](fleet-provision-api.md#register-thing).

**nota**  
Se a função Lambda falhar, a solicitação de provisionamento falhará `ACCESS_DENIED` e um erro será registrado no Logs. CloudWatch 
Se a função do Lambda não retornar `"allowProvisioning": "true"` na resposta, a solicitação de provisionamento falhará com `ACCESS_DENIED`.
A função do Lambda deve concluir a execução e retornar em até 5 segundos, caso contrário, a solicitação de provisionamento falhará.

## Exemplo de hook de pré-provisionamento do Lambda
<a name="pre-provisioning-example"></a>

------
#### [ Python ]

Um exemplo de hook de pré-provisionamento do Lambda em Python.

```
import json

def pre_provisioning_hook(event, context):
    print(event)

    return {
        'allowProvisioning': True,
        'parameterOverrides': {
            'DeviceLocation': 'Seattle'
        }
    }
```

------
#### [ Java ]

Um exemplo de hook de pré-provisionamento do Lambda em Java.

Classe de handler:

```
package example;

import java.util.Map;
import java.util.HashMap;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class PreProvisioningHook implements RequestHandler<PreProvisioningHookRequest, PreProvisioningHookResponse> {

    public PreProvisioningHookResponse handleRequest(PreProvisioningHookRequest object, Context context) {
        Map<String, String> parameterOverrides = new HashMap<String, String>();
        parameterOverrides.put("DeviceLocation", "Seattle");

        PreProvisioningHookResponse response = PreProvisioningHookResponse.builder()
                .allowProvisioning(true)
                .parameterOverrides(parameterOverrides)
                .build();

        return response;
    }

}
```

Classe de solicitação:

```
package example;

import java.util.Map;
import lombok.Builder;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PreProvisioningHookRequest {
    private String claimCertificateId;
    private String certificateId;
    private String certificatePem;
    private String templateArn;
    private String clientId;
    private Map<String, String> parameters;
}
```

Classe de resposta:

```
package example;

import java.util.Map;
import lombok.Builder;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;


@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PreProvisioningHookResponse {
    private boolean allowProvisioning;
    private Map<String, String> parameterOverrides;
}
```

------
#### [ JavaScript ]

Um exemplo de um gancho de pré-provisionamento no Lambda. JavaScript

```
exports.handler = function(event, context, callback) {
    console.log(JSON.stringify(event, null, 2));
    var reply = { 
        allowProvisioning: true,
        parameterOverrides: {
            DeviceLocation: 'Seattle'
        }
     };
     callback(null, reply);
}
```

------

# 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*.

# Criação de políticas e perfis do IAM para um usuário instalando um dispositivo
<a name="provision-create-role"></a>

**nota**  
Esses procedimentos devem ser usados somente quando orientados pelo AWS IoT console.  
Para acessar essa página a partir do console, abra [Criar um novo modelo de provisionamento](https://console.aws.amazon.com//iot/home#/provisioningtemplate/create/provisioningmethods/trustedUser).

## Por que isso não pode ser feito no AWS IoT console?
<a name="provision-create-role-why"></a>

Para uma experiência mais segura, as ações do IAM são executadas no console do IAM. Os procedimentos nesta seção recomendam que você examine as etapas para criar os perfis e políticas do IAM necessárias para usar o modelo de provisionamento.

## Criação de uma política do IAM para o usuário que instalará um dispositivo
<a name="provision-create-role-policy"></a>

Esse procedimento descreve como criar uma política do IAM que autoriza um usuário a instalar um dispositivo usando um modelo de provisionamento.

Ao realizar esse procedimento, você alternará entre o console do IAM e o AWS IoT console. Recomendamos que os dois consoles estejam abertos simultaneamente enquanto você conclui o procedimento.

**Para criar uma política do IAM para o usuário que instalará um dispositivo**

1. Abra [Hub de políticas no console do IAM](https://console.aws.amazon.com//iamv2/home#/policies).

1. Escolha **Criar política**.

1. Na página **Criar política**, escolha a guia **JSON**.

1. Vá para a página no AWS IoT console em que você escolheu **Configurar política e função do usuário**.

1. Em **Exemplo de política de provisionamento**, escolha **Copiar**.

1. Volte para o console do IAM.

1. No editor **JSON**, cole a política que você copiou do AWS IoT console. Essa política é específica para o modelo que você está criando no AWS IoT console.

1. Para continuar, escolha **Próximo: Tags**.

1. Na página **Adicionar tags (opcional)**, escolha **Adicionar tag** para cada tag que você deseja adicionar a essa política. Você poderá ignorar essa etapa se não tiver tags para adicionar.

1. Para continuar, escolha **Próximo: Revisar**.

1. Na página **Review Policy (Revisar política)**, faça o seguinte:

   1. Em **Nome\$1**, insira um nome para a política que ajude você a lembrar a finalidade dela.

      Anote o nome que você está dando a essa política, já que ele será usado no próximo procedimento.

   1. Você pode optar por inserir uma descrição opcional da política que está criando.

   1. Revise o restante da política e as tags.

1. Escolha **Criar política** para concluir a criação da nova política.

Depois de criar a nova política, continue no [Criação de um perfil do IAM para o usuário que instalará um dispositivo](#provision-create-role-role) para criar a função do usuário à qual você vai anexá-la.

## Criação de um perfil do IAM para o usuário que instalará um dispositivo
<a name="provision-create-role-role"></a>

Essas etapas descrevem como criar um perfil do IAM que autentica o usuário que instalará um dispositivo usando um modelo de provisionamento.

**Para criar uma política do IAM para o usuário que instalará um dispositivo**

1. Abra [Hub de Funções no console do IAM](https://console.aws.amazon.com//iamv2/home#/roles).

1. Selecione **Criar perfil**.

1. Em **Selecionar entidade confiável**, escolha o tipo de entidade confiável a que você deseja dar acesso ao modelo que você está criando.

1. Escolha ou insira a identificação da entidade confiável à qual você deseja conceder acesso e escolha **Próximo**.

1. Na página **Adicionar permissões**, na caixa de pesquisa **Políticas de permissão**, insira o nome da política criada no [procedimento anterior](#provision-create-role-policy).

1. Para a lista de políticas, selecione a política criada no procedimento anterior e selecione **Próximo**.

1. Na seção **Nomear, revisar e criar**, faça o seguinte:

   1. Em **Nome do perfil**, insira um nome de função que ajude você a se lembrar da finalidade da função.

   1. Em **Descrição**, você pode optar por inserir uma descrição opcional da função. Isso não é necessário para continuar.

   1. Revise os valores na **Etapa 1** e **Etapa 2**.

   1. Em **Adicionar tags (opcional)**, você pode optar por adicionar tags a essa função. Isso não é necessário para continuar.

   1. Verifique se as informações nessa página estão completas e corretas e escolha **Criar função**. 

Depois de criar a nova função, retorne ao AWS IoT console para continuar criando o modelo.

## Atualização de uma política existente para autorizar um novo modelo
<a name="provision-create-role-update"></a>

As etapas a seguir descrevem como adicionar um novo modelo a uma política do IAM que autoriza um usuário a instalar um dispositivo usando um modelo de provisionamento.

**Para adicionar um novo modelo a uma política do IAM existente**

1. Abra [Hub de políticas no console do IAM](https://console.aws.amazon.com//iamv2/home#/policies).

1. Na caixa de pesquisa, insira o nome da política que será atualizada.

1. Na lista abaixo da caixa de pesquisa, encontre a política que você deseja atualizar e escolha o nome dela.

1. Em **Resumo da política**, escolha a guia **JSON**, se esse painel ainda não estiver visível.

1. Para modificar o documento da política, escolha **Editar política**.

1. No editor, escolha a guia **JSON**, se esse painel ainda não estiver visível.

1. No documento da política, encontre a declaração de política que contém a ação `iot:CreateProvisioningClaim`.

   Se o documento de política não contiver uma declaração de política com a ação `iot:CreateProvisioningClaim`, copie o trecho de declaração a seguir e cole-o como uma entrada adicional na matriz `Statement` do documento de política. 
**nota**  
Esse trecho deve ser colocado antes do caractere `]` de fechamento na matriz `Statement`. Talvez seja necessário adicionar uma vírgula antes ou depois desse trecho para corrigir erros de sintaxe.

   ```
   {
       "Effect": "Allow",
       "Action": [
           "iot:CreateProvisioningClaim"
       ],
       "Resource": [
           "--PUT YOUR NEW TEMPLATE ARN HERE--"
       ]
   }
   ```

1. Vá para a página no AWS IoT console em que você escolheu **Modificar permissões de função de usuário**.

1. Procure o **ARN do recurso** do modelo e escolha **Copiar**.

1. Volte para o console do IAM.

1. Cole o Amazon Resource Name (ARN) copiado no topo da lista de ARNs modelos na `Statement` matriz para que seja a primeira entrada.

   Se esse for o único ARN na matriz, remova a vírgula no final do valor que você acabou de colar.

1. Revise a declaração de política atualizada e corrija os erros indicados pelo editor.

1. Para salvar o documento de política atualizado, escolha **Revisar política**.

1. Selecione Revisar política e, em seguida, escolha, **Salvar alterações**.

1. Volte para o AWS IoT console.

# API MQTT de provisionamento de dispositivos
<a name="fleet-provision-api"></a><a name="provision-mqtt-api"></a>

O serviço de Provisionamento de frotas dá suporte às seguintes operações da API MQTT:
+ `CreateCertificateFromCsr`
+ `CreateKeysAndCertificate`
+ `RegisterThing`

Essa API suporta buffers de resposta no formato Concise Binary Object Representation (CBOR) e JavaScript Object Notation (JSON), dependendo do tópico. *payload-format* Para clareza, os exemplos de resposta e de solicitação nesta seção são mostrados no formato JSON.


| *payload-format* | Tipo de dados do formato de resposta | 
| --- | --- | 
| cbor | Representação Concisa de Objetos Binários (CBOR) | 
| json | JavaScript Notação de objeto (JSON) | 

**Importante**  
Antes de publicar um tópico de mensagem de solicitação, assine os tópicos de resposta para receber a resposta. As mensagens usadas por esta API usam o protocolo MQTT de publicação/assinatura para fornecer uma interação de solicitação e resposta.   
Se você não assinar os tópicos de resposta *antes* de publicar uma solicitação, talvez não receba os resultados dessa solicitação.  
O IoT Core Fleet Provisioning exibe os resultados da API de provisionamento de dispositivos do MQTT por meio da mesma conexão do MQTT usada para publicar a solicitação da API.

## CreateCertificateFromCsr
<a name="create-cert-csr"></a>

Cria um certificado a partir de uma solicitação de assinatura de certificado (CSR). AWS IoT fornece certificados de cliente assinados pela autoridade de certificação (CA) raiz da Amazon. O novo certificado tem um status `PENDING_ACTIVATION`. Quando você chama `RegisterThing` para provisionar uma coisa com esse certificado, o status do certificado muda para `ACTIVE` ou `INACTIVE` conforme descrito no modelo.

Para obter mais informações sobre como criar um certificado de cliente usando seu certificado de Autoridade de Certificação e uma solicitação de assinatura de certificado, consulte [Criar um certificado de cliente usando o certificado CA](create-device-cert.md).

**nota**  
Por segurança, o `certificateOwnershipToken` devolvido pelo `CreateCertificateFromCsr` expira após uma hora. `RegisterThing` deve ser chamado antes que `certificateOwnershipToken` expire. Se o certificado criado por `CreateCertificateFromCsr` não tiver sido ativado nem anexado a uma política ou a um objeto quando o token expirar, o certificado será excluído. Se o token expirar, o dispositivo poderá chamar `CreateCertificateFromCsr` novamente para gerar um novo certificado.

### CreateCertificateFromCsr pedido
<a name="create-cert-csr-request"></a>

Publique uma mensagem com o tópico `$aws/certificates/create-from-csr/payload-format`.

`payload-format`  
O formato da carga útil da mensagem como `cbor` ou `json`.

#### CreateCertificateFromCsr carga útil de solicitação
<a name="create-cert-csr-request-payload"></a>

```
{
    "certificateSigningRequest": "string"
}
```

`certificateSigningRequest`  
A CSR, no formato PEM.

### CreateCertificateFromCsr resposta
<a name="create-cert-csr-response"></a>

Assine `$aws/certificates/create-from-csr/payload-format/accepted`.

`payload-format`  
O formato da carga útil da mensagem como `cbor` ou `json`.

#### CreateCertificateFromCsr carga útil de resposta
<a name="create-cert-csr-response-payload"></a>

```
{
    "certificateOwnershipToken": "string",
    "certificateId": "string",
    "certificatePem": "string"
}
```

`certificateOwnershipToken`  
O token para provar a propriedade do certificado durante o provisionamento. 

`certificateId`  
O ID do certificado. As operações de gerenciamento de certificado usam apenas um certificateId. 

`certificatePem`  
Os dados do certificado, no formato PEM.

### CreateCertificateFromCsr erro
<a name="create-cert-csr-error"></a>

Para receber respostas de erro, assine `$aws/certificates/create-from-csr/payload-format/rejected`.

`payload-format`  
O formato da carga útil da mensagem como `cbor` ou `json`.

#### CreateCertificateFromCsr carga útil de erro
<a name="create-cert-csr-error-payload"></a>

```
{
    "statusCode": int,
    "errorCode": "string",
    "errorMessage": "string"
}
```

`statusCode`  
O código do status.

`errorCode`  
O código do erro.

`errorMessage`  
A mensagem de erro.

## CreateKeysAndCertificate
<a name="create-keys-cert"></a>

Cria novas chaves e um certificado. AWS IoT fornece certificados de cliente assinados pela autoridade de certificação (CA) raiz da Amazon. O novo certificado tem um status `PENDING_ACTIVATION`. Quando você chama `RegisterThing` para provisionar uma coisa com esse certificado, o status do certificado muda para `ACTIVE` ou `INACTIVE` conforme descrito no modelo.

**nota**  
Por segurança, o `certificateOwnershipToken` devolvido pelo `CreateKeysAndCertificate` expira após uma hora. `RegisterThing` deve ser chamado antes que `certificateOwnershipToken` expire. Se o certificado criado por `CreateKeysAndCertificate` não tiver sido ativado nem anexado a uma política ou a um objeto quando o token expirar, o certificado será excluído. Se o token expirar, o dispositivo poderá chamar `CreateKeysAndCertificate` novamente para gerar um novo certificado.

### CreateKeysAndCertificate pedido
<a name="create-keys-cert-request"></a>

Publique uma mensagem em `$aws/certificates/create/payload-format` com uma carga de mensagem vazia.

`payload-format`  
O formato da carga útil da mensagem como `cbor` ou `json`.

### CreateKeysAndCertificate resposta
<a name="create-keys-cert-response"></a>

Assine `$aws/certificates/create/payload-format/accepted`.

`payload-format`  
O formato da carga útil da mensagem como `cbor` ou `json`.

#### CreateKeysAndCertificate resposta
<a name="create-keys-cert-response-payload"></a>

```
{
    "certificateId": "string",
    "certificatePem": "string",
    "privateKey": "string",
    "certificateOwnershipToken": "string"
}
```

`certificateId`  
O ID do certificado.

`certificatePem`  
Os dados do certificado, no formato PEM.

`privateKey`  
A chave privada.

`certificateOwnershipToken`  
O token para provar a propriedade do certificado durante o provisionamento.

### CreateKeysAndCertificate erro
<a name="create-keys-cert-error"></a>

Para receber respostas de erro, assine `$aws/certificates/create/payload-format/rejected`.

`payload-format`  
O formato da carga útil da mensagem como `cbor` ou `json`.

#### CreateKeysAndCertificate carga útil de erro
<a name="create-keys-cert-error-payload"></a>

```
{
    "statusCode": int,
    "errorCode": "string",
    "errorMessage": "string"
}
```

`statusCode`  
O código do status.

`errorCode`  
O código do erro.

`errorMessage`  
A mensagem de erro.

## RegisterThing
<a name="register-thing"></a>

Provisiona uma coisa usando um modelo predefinido.

### RegisterThing pedido
<a name="register-thing-request"></a>

Publique uma mensagem em `$aws/provisioning-templates/templateName/provision/payload-format`.

`payload-format`  
O formato da carga útil da mensagem como `cbor` ou `json`.

`templateName`  
O nome do modelo provisionado.

#### RegisterThing carga útil de solicitação
<a name="register-thing-request-payload"></a>

```
{
    "certificateOwnershipToken": "string",
    "parameters": {
        "string": "string",
        ...
    }
}
```

`certificateOwnershipToken`  
O token para provar a propriedade do certificado. AWS IoT gera o token quando você cria um certificado por MQTT.

`parameters`  
Opcional. Pares de chave-valor do dispositivo que são usados pelos [hooks de pré-provisionamento](pre-provisioning-hook.md) para avaliar a solicitação de registro.

### RegisterThing resposta
<a name="register-thing-response"></a>

Assine `$aws/provisioning-templates/templateName/provision/payload-format/accepted`.

`payload-format`  
O formato da carga útil da mensagem como `cbor` ou `json`.

`templateName`  
O nome do modelo provisionado.

#### RegisterThing carga útil de resposta
<a name="register-thing-response-payload"></a>

```
{
    "deviceConfiguration": {
        "string": "string",
        ...
    },
    "thingName": "string"
}
```

`deviceConfiguration`  
A configuração do dispositivo definida no modelo.

`thingName`  
O nome da coisa da IoT criada durante o provisionamento.

### RegisterThing resposta de erro
<a name="register-thing-error"></a>

Para receber respostas de erro, assine `$aws/provisioning-templates/templateName/provision/payload-format/rejected`.

`payload-format`  
O formato da carga útil da mensagem como `cbor` ou `json`.

`templateName`  
O nome do modelo provisionado.

#### RegisterThing carga útil de resposta de erro
<a name="register-thing-error-payload"></a>

```
{
    "statusCode": int,
    "errorCode": "string",
    "errorMessage": "string"
}
```

`statusCode`  
O código do status.

`errorCode`  
O código do erro.

`errorMessage`  
A mensagem de erro.