View a markdown version of this page

Pre-provisioning ganchos - 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á.

Pre-provisioning ganchos

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. Pre-provisioning ganchos são funções Lambda que validam os parâmetros passados do dispositivo antes de permitir que o dispositivo 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.

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 Cross-service prevenção delegada confusa.

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.

Pre-provision entrada de gancho

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

Pre-provision valor de retorno do gancho

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.

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

Pre-provisioning exemplo de gancho Lambda

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); }