Hook di pre-provisioning - 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à.

Hook di pre-provisioning

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. Gli hook di pre-provisioning sono funzioni Lambda che convalidano i parametri passati dal dispositivo prima di consentire il provisioning dello stesso. 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 Prevenzione del confused deputy tra servizi.

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.

Input dell'hook di pre-provisioning

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.

Valore restituito dall'hook di pre-provisioning

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.

Esempio di hook di pre-provisioning 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); }