Kait pra-penyediaan - AWS IoT Core

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Kait pra-penyediaan

AWS merekomendasikan penggunaan fungsi hook pra-penyediaan saat membuat templat penyediaan untuk memungkinkan lebih banyak kontrol atas perangkat mana dan berapa banyak perangkat yang ada di dalam akun Anda. Kait pra-penyediaan adalah fungsi Lambda yang memvalidasi parameter yang diteruskan dari perangkat sebelum mengizinkan perangkat disediakan. Fungsi Lambda ini harus ada di akun Anda sebelum Anda menyediakan perangkat karena dipanggil setiap kali perangkat mengirimkan permintaan. RegisterThing

penting

Pastikan untuk menyertakan source-arn atau source-account dalam kunci konteks kondisi global dari kebijakan yang dilampirkan pada tindakan Lambda Anda untuk mencegah manipulasi izin. Untuk informasi selengkapnya tentang langkah ini, lihat Pencegahan confused deputy lintas layanan.

Agar perangkat dapat disediakan, fungsi Lambda Anda harus menerima objek input dan mengembalikan objek keluaran yang dijelaskan di bagian ini. Penyediaan berlangsung hanya jika fungsi Lambda mengembalikan objek dengan. "allowProvisioning": True

Masukan kait pra-penyediaan

AWS IoT mengirimkan objek ini ke fungsi Lambda saat perangkat mendaftar dengan. 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", ... } }

parametersObjek yang diteruskan ke fungsi Lambda berisi properti dalam parameters argumen yang diteruskan dalam payload RegisterThing permintaan.

Nilai pengembalian kait pra-penyediaan

Fungsi Lambda harus mengembalikan respons yang menunjukkan apakah fungsi Lambda telah mengizinkan permintaan penyediaan dan nilai properti apa pun untuk diganti.

Berikut ini adalah contoh respons yang berhasil dari fungsi pra-penyediaan.

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

"parameterOverrides"nilai akan ditambahkan ke "parameters" parameter payload RegisterThing permintaan.

catatan
  • Jika fungsi Lambda gagal, permintaan penyediaan gagal ACCESS_DENIED dan kesalahan dicatat ke Log. CloudWatch

  • Jika fungsi Lambda tidak ditampilkan "allowProvisioning": "true" dalam respons, permintaan penyediaan gagal. ACCESS_DENIED

  • Fungsi Lambda harus selesai berjalan dan kembali dalam 5 detik, jika tidak permintaan penyediaan gagal.

Contoh Lambda kait pra-penyediaan

Python

Contoh hook Lambda pra-penyediaan dengan Python.

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

Contoh hook Lambda pra-penyediaan di Jawa.

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

Permintaan kelas:

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

Kelas respons:

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

Contoh kait pra-penyediaan Lambda di. JavaScript

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