Provisionar dispositivos que não têm certificados de dispositivo usando o provisionamento de frotas - AWS IoT Core

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

Provisionar dispositivos que não têm certificados de dispositivo usando o provisionamento de frotas

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

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 CreateProvisioningTemplate para criar um modelo de provisionamento. Essa API retorna um ARN de modelo. Para ter mais informações, consulte API MQTT de provisionamento de dispositivos.

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

    1. No painel de navegação, selecione Conectar e Modelos de provisionamento de frotas.

    2. Selecione Criar modelo e siga as solicitações.

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

  3. 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:aws-region:aws-account-id:topic/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topic/$aws/provisioning-templates/templateName/provision/*" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/provisioning-templates/templateName/provision/*" ] } ] }
  4. 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

  5. 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 SDKs de dispositivos, SDKs móveis e AWS IoT cliente de dispositivo 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.

  2. 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 CreateKeysAndCertificatepara criar um novo certificado e uma nova chave privada usando a autoridade de AWS certificação.

      Ou

    2. Chame CreateCertificateFromCsr para gerar um certificado de uma solicitação de assinatura de certificado que mantém sua chave privada segura.

  3. No dispositivo, chame RegisterThing 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.

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

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. Chame CreateProvisioningTemplate para criar um modelo de provisionamento e retornar templateArn e templateName.

  2. 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" ] }
  3. 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

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

  2. O aplicativo móvel ou o aplicativo web usa o perfil do IAM e chama CreateProvisioningClaim 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.

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

  4. O dispositivo usa o certificado de reivindicação de provisionamento temporário para conectar-se à AWS IoT usando o AWS IoT SDKs de dispositivos, SDKs móveis e AWS IoT cliente de dispositivo.

  5. 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 provisionamento temporário. O dispositivo usará o certificado e a chave com os quais essas opções retornarão para toda autenticação futura AWS IoT.

    1. Ligue CreateKeysAndCertificatepara criar um novo certificado e uma nova chave privada usando a autoridade de AWS certificação.

      Ou

    2. Chame CreateCertificateFromCsr para gerar um certificado de uma solicitação de assinatura de certificado que mantém sua chave privada segura.

    nota

    Lembre-se CreateKeysAndCertificateou CreateCertificateFromCsrdeve 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.

  6. O dispositivo liga RegisterThingpara 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.

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

Usar hooks de pré-provisionamento com a CLI da AWS

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.

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

    { "allowProvisioning": True, "parameterOverrides": { "incomingKey0": "incomingValue0", "incomingKey1": "incomingValue1" } }
  2. 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.

    Veja a seguir um exemplo que usa add-permission 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
  3. Adicione um hook de pré-provisionamento a um modelo usando o comando create-provisioning-template ou update-provisioning-template.

    O exemplo de CLI a seguir usa o create-provisioning-template para criar um modelo de provisionamento que tenha hooks 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. 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" } }, "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" }