사전 프로비저닝 후크 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

사전 프로비저닝 후크

AWS 계정이 온보딩하는 디바이스와 수를 더 잘 제어할 수 있도록 프로비저닝 템플릿을 만들 때 사전 프로비저닝 후크 함수를 사용할 것을 권장합니다. 사전 프로비저닝 후크는 디바이스 프로비저닝을 허용하기 전에 디바이스에서 전달된 파라미터의 유효성을 검사하는 Lambda 함수입니다. 이 Lambda 함수는 디바이스가 RegisterThing을 통해 요청을 전송할 때마다 호출되므로 디바이스를 프로비저닝하기 전에 계정에 있어야 합니다.

중요

권한 조작을 방지하기 위해 Lambda 작업에 연결된 정책의 전역 조건 컨텍스트 키에 source-arn 또는 source-account가 포함되어야 합니다. 자세한 내용은 교차 서비스 혼동된 대리인 방지 단원을 참조하십시오.

디바이스를 프로비저닝하려면 Lambda 함수가 입력 객체를 수락하고 이 섹션에 설명된 출력 객체를 반환해야 합니다. Lambda 함수가 "allowProvisioning": True의 객체를 반환하는 경우에만 프로비저닝이 진행됩니다.

사전 프로비저닝 후크 입력

AWS IoT 디바이스가 등록되면 이 객체를 Lambda 함수로 보냅니다. 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", ... } }

Lambda 함수에 전달된 parameters 객체는 RegisterThing 요청 페이로드에서 전달된 parameters 인수의 속성을 포함합니다.

사전 프로비저닝 후크 반환 값

Lambda 함수는 프로비저닝 요청을 승인했는지 여부를 나타내는 응답과, 재정의할 속성의 값을 반환해야 합니다.

다음은 사전 프로비저닝 함수에서 성공한 응답의 예입니다.

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

"parameterOverrides" 값이 RegisterThing 요청 페이로드의 "parameters" 파라미터에 추가됩니다.

참고
  • Lambda 함수가 실패하면 프로비저닝 요청이 ACCESS_DENIED 실패하고 Logs에 오류가 기록됩니다. CloudWatch

  • Lambda 함수가 응답에서 "allowProvisioning": "true"를 반환하지 않는 경우 프로비저닝 요청은 ACCESS_DENIED와 함께 실패합니다.

  • Lambda 함수는 실행을 완료하고 5초 이내에 반환해야 합니다. 그렇지 않으면 프로비저닝 요청이 실패합니다.

사전 프로비저닝 후크 Lambda 예제

Python

Python에서 사전 프로비저닝 후크 Lambda 예제.

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

Java에서 사전 프로비저닝 후크 Lambda 예제.

핸들러 클래스:

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

요청 클래스:

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

응답 클래스:

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

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