Pre-Provisioning-Hooks - AWS IoT Core

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Pre-Provisioning-Hooks

AWS empfiehlt, bei der Erstellung von Bereitstellungsvorlagen Hook-Funktionen vor der Bereitstellung zu verwenden, damit Sie besser kontrollieren können, welche und wie viele Geräte Ihr Konto integriert. Pre-Provisioning-Hooks sind Lambda-Funktionen, die vom Gerät übergebene Parameter überprüfen, bevor das Gerät bereitgestellt werden kann. Diese Lambda-Funktion muss in Ihrem Konto vorhanden sein, bevor Sie ein Gerät bereitstellen, da sie jedes Mal aufgerufen wird, wenn ein Gerät eine Anfrage über RegisterThing sendet.

Wichtig

Achten Sie darauf, das source-arn oder source-account in die globalen Bedingungskontextschlüssel der Richtlinien aufzunehmen, die mit Ihrer Lambda-Aktion verknüpft sind, damit Berechtigungen nicht manipuliert werden können. Weitere Informationen hierzu finden Sie unter Serviceübergreifende Confused-Deputy-Prävention.

Damit Geräte bereitgestellt werden können, muss Ihre Lambda-Funktion das Eingabeobjekt akzeptieren und das in diesem Abschnitt beschriebene Ausgabeobjekt zurückgeben. Die Bereitstellung wird nur fortgesetzt, wenn die Lambda-Funktion ein Objekt mit "allowProvisioning": True zurückgibt.

Pre-Provisioning-Hook-Eingabe

AWS IoT sendet dieses Objekt an die Lambda-Funktion, wenn sich ein Gerät bei AWS IoT registriert.

{ "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", ... } }

Das an die Lambda-Funktion übergebene parameters-Objekt enthält die Eigenschaften im parameters-Argument, das in der RegisterThing-Anforderungsnutzlast übergeben wird.

Pre-Provisioning-Hook-Rückgabewert

Die Lambda-Funktion muss eine Antwort zurückgeben, die angibt, ob sie die Bereitstellungsanforderung und die Werte der zu überschreibenden Eigenschaften autorisiert hat.

Im Folgenden finden Sie ein Beispiel für eine erfolgreiche Antwort der Pre-Provisioning-Funktion.

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

"parameterOverrides"-Werte werden dem Parameter "parameters" in der RegisterThing-Anforderungsnutzlast hinzugefügt.

Anmerkung
  • Wenn die Lambda-Funktion fehlschlägt, schlägt die Bereitstellungsanforderung fehl ACCESS_DENIED und ein Fehler wird in Logs protokolliert. CloudWatch

  • Wenn die Lambda-Funktion in der Antwort nicht "allowProvisioning": "true" zurückgibt, schlägt die Bereitstellungsanforderung mit ACCESS_DENIED fehl.

  • Die Lambda-Funktion muss die Ausführung beenden und innerhalb von 5 Sekunden zurückgeben, andernfalls schlägt die Bereitstellungsanforderung fehl.

Lambda-Beispiel für einen Pre-Provisioning-Hook

Python

Ein Beispiel für einen Pre-Provisioning-Hook ist Lambda in Python.

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

Ein Beispiel für einen Pre-Provisioning-Hook ist Lambda in Java.

Handler-Klasse

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

Anforderungsklasse:

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

Response-Klasse:

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

Ein Beispiel für einen Pre-Provisioning-Hook 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); }