View a markdown version of this page

Pre-provisioning ganci - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Pre-provisioning ganci

AWS consiglia di utilizzare le funzioni hook di pre-provisioning durante la creazione di modelli di provisioning per consentire un maggiore controllo su quali e quanti dispositivi sono integrati nell'account. Pre-provisioning gli hook sono funzioni Lambda che convalidano i parametri trasmessi dal dispositivo prima di consentirne il provisioning. Questa funzione Lambda deve esistere nell'account prima di effettuare il provisioning di un dispositivo perché viene chiamata ogni volta che un dispositivo invia una richiesta tramite RegisterThing.

Importante

Assicurati di includere il valore source-arn o source-account nelle chiavi del contesto delle condizioni globali delle policy associate all'operazione Lambda per impedire la manipolazione delle autorizzazioni. Per ulteriori informazioni, consulta Cross-service confusa prevenzione sostitutiva.

Per il provisioning dei dispositivi, la funzione Lambda deve accettare l'oggetto di input e restituire l'oggetto di output descritto in questa sezione. Il provisioning procede solo se la funzione Lambda restituisce un oggetto con "allowProvisioning": True.

Pre-provision input hook

AWS IoT invia questo oggetto alla funzione Lambda quando un dispositivo si registra con. 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", ... } }

L'oggetto parameters passato alla funzione Lambda contiene le proprietà nell'argomento parameters passato nel payload della richiesta RegisterThing.

Pre-provision valore restituito dall'hook

La funzione Lambda deve restituire una risposta che indica se ha autorizzato la richiesta di provisioning e i valori di qualsiasi proprietà da sovrascrivere.

Di seguito è riportato un esempio di risposta riuscita dalla funzione di pre-provisioning.

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

I valori "parameterOverrides" verranno aggiunti al parametro "parameters" nella richiesta di payload RegisterThing.

Nota
  • Se la funzione Lambda fallisce, la richiesta di provisioning fallisce ACCESS_DENIED e viene registrato un errore in Logs. CloudWatch

  • Se la funzione Lambda non restituisce "allowProvisioning": "true" nella risposta, la richiesta di provisioning fallisce restituendo ACCESS_DENIED.

  • La funzione Lambda deve terminare l'esecuzione e restituire il valore entro 5 secondi, altrimenti la richiesta di provisioning non riesce.

Pre-provisioning hook (esempio Lambda)

Python

Un esempio di hook di pre-provisioning Lambda in Python.

import json def pre_provisioning_hook(event, context): print(event) return { 'allowProvisioning': True, 'parameterOverrides': { 'DeviceLocation': 'Seattle' } }
Java

Un esempio di hook di pre-provisioning Lambda in Java.

Classe gestore:

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 richiesta:

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 risposta:

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

Un esempio di hook di pre-provisioning Lambda in. JavaScript

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