Enlaces de preaprovisionamiento - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Enlaces de preaprovisionamiento

AWS recomienda utilizar funciones de enlace previas al aprovisionamiento al crear plantillas de aprovisionamiento para tener un mayor control sobre qué dispositivos incorpora tu cuenta y cuántos de ellos. Los enlaces de preaprovisionamiento son funciones de Lambda que validan los parámetros transferidos desde el dispositivo antes de permitir que se aprovisione el dispositivo. Esta función de Lambda debe existir en su cuenta antes de aprovisionar un dispositivo porque se llama cada vez que un dispositivo envía una solicitud a través de RegisterThing.

importante

Asegúrese de incluir las claves contextuales de condición global source-arn o source-account en las de las políticas adjuntas a su acción de Lambda para evitar la manipulación de permisos. Para obtener más información acerca de este tema, consulte Prevención de la sustitución confusa entre servicios.

Para que los dispositivos se aprovisionen, la función de Lambda debe aceptar el objeto de entrada y devolver el objeto de salida descrito en esta sección. El aprovisionamiento continúa solo si la función de Lambda devuelve un objeto con "allowProvisioning": True.

Preaprovisionamiento de entrada de enlace

AWS IoT envía este objeto a la función Lambda cuando un dispositivo se registra en. 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", ... } }

El objeto parameters pasado a la función de Lambda contiene las propiedades en el argumento parameters pasado en la carga de solicitud RegisterThing.

Valor de retorno del enlace previo a la provisión

La función de Lambda debe devolver una respuesta que indique si ha autorizado la solicitud de aprovisionamiento y los valores de las propiedades para anular.

A continuación se muestra un ejemplo de una respuesta exitosa de la función de preaprovisionamiento.

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

Se agregarán valores "parameterOverrides" al parámetro "parameters" en la carga de solicitud de RegisterThing.

nota
  • Si se produce un error en la función Lambda, se produce un error en la solicitud de aprovisionamiento ACCESS_DENIED y se registra un error en Logs. CloudWatch

  • Si la función de Lambda no devuelve "allowProvisioning": "true" en la respuesta, se produce un error ACCESS_DENIED en la solicitud de aprovisionamiento.

  • La función de Lambda debe terminar de ejecutarse y volver en 5 segundos; de lo contrario, la solicitud de aprovisionamiento falla.

Ejemplo de enlace Lambda de preaprovisionamiento

Python

Un ejemplo de enlace Lambda de preaprovisionamiento en Python.

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

Un ejemplo de enlace Lambda de preaprovisionamiento en Java.

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

Clase Request:

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

Clase Response:

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 ejemplo de enlace previo al aprovisionamiento de 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); }