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 frotas da AWS IoT, a AWS IoT pode gerar e entregar com segurança certificados de dispositivo e chaves privadas para os dispositivos quando eles se conectam à AWS IoT pela primeira vez. A AWS IoT fornece certificados de cliente que são 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 forem registrados com a AWS IoT, o serviço poderá trocá-los por certificados de dispositivo exclusivos que o dispositivo pode usar para operações regulares. Esse processo inclui as seguintes etapas:
Antes de entregar o dispositivo
-
Chame
CreateProvisioningTemplate
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.Também é possível criar um modelo de provisionamento de frotas no console da AWS IoT.
-
No painel de navegação, selecione Conectar e Modelos de provisionamento de frotas.
-
Selecione Criar modelo e siga as solicitações.
-
-
Crie certificados e chaves privadas associadas a serem usados como certificados de reivindicação de provisionamento.
-
Registre esses certificados na AWS IoT e associe uma política da IoT que restringe 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/*" ] } ] } -
Conceda ao serviço da AWS IoT permissão para criar ou atualizar recursos da IoT, como coisas e certificados em sua conta ao provisionar dispositivos. Faça isso anexando a política gerenciada pela
AWSIoTThingsRegistration
a um perfil do IAM (chamado de função de provisionamento) que confia no principal do serviço da AWS IoT. -
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 as métricas e os logs da AWS IoT do CloudWatch para monitorar 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
-
O dispositivo usa os AWS IoT Device SDKs, Mobile SDKs e AWS IoT Device Client para se conectar e fazer a autenticação com a AWS IoT usando o certificado de reivindicação de provisionamento instalado no dispositivo.
nota
Por segurança, o
certificateOwnershipToken
devolvido peloCreateCertificateFromCsr
eCreateKeysAndCertificate
expira após uma hora.RegisterThing
deve ser chamado antes quecertificateOwnershipToken
expire. Se o certificado criado porCreateCertificateFromCsr
ouCreateKeysAndCertificate
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á chamarCreateCertificateFromCsr
ouCreateKeysAndCertificate
novamente para gerar um novo certificado. -
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 futuras autenticações com a AWS IoT.
-
Chame CreateKeysAndCertificate para criar um certificado e uma chave privada usando a autoridade de certificação da AWS.
Ou
-
Chame CreateCertificateFromCsr para gerar um certificado de uma solicitação de assinatura de certificado que mantém sua chave privada segura.
-
-
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.
-
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 a 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 para dispositivos móveis a fim de configurar o dispositivo em seu local implantado.
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
-
Chame
CreateProvisioningTemplate
para criar um modelo de provisionamento e retornartemplateArn
etemplateName
. -
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
" ] } -
Conceda ao serviço da AWS IoT permissão para criar ou atualizar recursos da IoT, como coisas e certificados em sua conta ao provisionar dispositivos. Você faz isso anexando a política gerenciada
AWSIoTThingsRegistration
a um perfil do IAM (chamada de função de provisionamento) que confia no principal do serviço da AWS IoT. -
Forneça os meios para identificar seus usuários confiáveis, como fornecendo a eles uma conta que pode autenticá-los e autorizar suas interações com as operações da API da AWS necessárias para registrar seus dispositivos.
Como inicializar o dispositivo para uso
-
Um usuário confiável entra no aplicativo para dispositivos móveis ou no web service de provisionamento.
-
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. -
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.
-
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.
-
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 com a AWS IoT com o certificado de reivindicação de provisionamento temporário. O dispositivo usará o certificado e a chave que essas opções retornam para todas as futuras autenticações com a AWS IoT.
-
Chame CreateKeysAndCertificate para criar um certificado e uma chave privada usando a autoridade de certificação da AWS.
Ou
-
Chame CreateCertificateFromCsr para gerar um certificado de uma solicitação de assinatura de certificado que mantém sua chave privada segura.
nota
Lembre-se de que CreateKeysAndCertificate ou CreateCertificateFromCsr devem retornar um certificado válido dentro de cinco minutos depois de se conectar à AWS IoT com o certificado de reivindicação de provisionamento temporário.
-
-
O dispositivo chama 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.
-
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 a 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
-
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
eparameterOverrides
são necessários para criar hooks de pré-provisionamento. Para obter mais informações sobre como criar funções do Lambda, consulte Usar o AWS Lambda com a interface da linha de comando da AWS.Veja a seguir um exemplo de uma saída de função do Lambda:
{ "allowProvisioning": True, "parameterOverrides": { "
incomingKey0
": "incomingValue0
", "incomingKey1
": "incomingValue1
" } } -
A AWS IoT usa políticas baseadas em recursos para chamar o Lambda e, portanto, será necessário conceder à AWS IoT permissão para chamar a função do Lambda.
Importante
Certifique-se de incluir
source-arn
ousource-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 -
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-arnarn:aws:iam:us-east-1:1234564789012:role/myRole
\ --template-bodyfile://template.json
\ --pre-provisioning-hookfile://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
" }