

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

# Penyediaan perangkat
Penyediaan perangkat

AWS menyediakan beberapa cara berbeda untuk menyediakan perangkat dan menginstal sertifikat klien unik di dalamnya. Bagian ini menjelaskan setiap cara dan cara memilih yang terbaik untuk solusi IoT Anda. Opsi ini dijelaskan secara rinci dalam whitepaper berjudul [Device Manufacturing and Provisioning](https://docs.aws.amazon.com/whitepapers/latest/device-manufacturing-provisioning/device-manufacturing-provisioning.html) with X.509 Certificates in. AWS IoT Core

**Pilih opsi yang paling sesuai dengan situasi Anda**
+ 

**Anda dapat menginstal sertifikat di perangkat IoT sebelum dikirimkan**  
[Jika Anda dapat menginstal sertifikat klien unik dengan aman di perangkat IoT Anda sebelum dikirimkan untuk digunakan oleh pengguna akhir, Anda ingin [*just-in-time*menggunakan provisioning (JITP) atau registrasi (JITR](jit-provisioning.md)). *just-in-time*](auto-register-device-cert.md)

  Menggunakan JITP dan JITR, otoritas sertifikat (CA) yang digunakan untuk menandatangani sertifikat perangkat terdaftar AWS IoT dan dikenali oleh AWS IoT saat perangkat pertama kali terhubung. Perangkat disediakan AWS IoT pada koneksi pertamanya menggunakan detail template penyediaannya.

  Untuk informasi lebih lanjut tentang satu hal, JITP, JITR, dan penyediaan massal perangkat yang memiliki sertifikat unik, lihat. [Penyediaan perangkat yang memiliki sertifikat perangkat](provision-w-cert.md)
+ 

**Pengguna akhir atau penginstal dapat menggunakan aplikasi untuk menginstal sertifikat di perangkat IoT mereka**  
Jika Anda tidak dapat menginstal sertifikat klien unik dengan aman di perangkat IoT Anda sebelum dikirimkan ke pengguna akhir, tetapi pengguna akhir atau penginstal dapat menggunakan aplikasi untuk mendaftarkan perangkat dan menginstal sertifikat perangkat unik, Anda ingin menggunakan [penyediaan oleh proses pengguna tepercaya](provision-wo-cert.md#trusted-user).

  Menggunakan pengguna tepercaya, seperti pengguna akhir atau penginstal dengan akun yang dikenal, dapat menyederhanakan proses pembuatan perangkat. Alih-alih sertifikat klien yang unik, perangkat memiliki sertifikat sementara yang memungkinkan perangkat terhubung hanya AWS IoT selama 5 menit. Selama jendela 5 menit itu, pengguna tepercaya memperoleh sertifikat klien unik dengan masa pakai yang lebih lama dan menginstalnya di perangkat. Masa pakai sertifikat klaim yang terbatas meminimalkan risiko sertifikat yang dikompromikan.

  Untuk informasi selengkapnya, lihat [Penyediaan oleh pengguna tepercaya](provision-wo-cert.md#trusted-user).
+ 

**Pengguna akhir TIDAK DAPAT menggunakan aplikasi untuk menginstal sertifikat di perangkat IoT mereka**  
Jika tidak satu pun dari opsi sebelumnya akan berfungsi dalam solusi IoT Anda, [penyediaan melalui proses klaim](provision-wo-cert.md#claim-based) adalah opsi. Dengan proses ini, perangkat IoT Anda memiliki sertifikat klaim yang dibagikan oleh perangkat lain di armada. Pertama kali perangkat terhubung dengan sertifikat klaim, AWS IoT mendaftarkan perangkat menggunakan templat penyediaannya dan mengeluarkan perangkat sertifikat klien uniknya untuk akses selanjutnya. AWS IoT

   Opsi ini memungkinkan penyediaan otomatis perangkat saat terhubung AWS IoT, tetapi dapat menimbulkan risiko yang lebih besar jika terjadi sertifikat klaim yang dikompromikan. Jika sertifikat klaim dikompromikan, Anda dapat menonaktifkan sertifikat. Menonaktifkan sertifikat klaim mencegah semua perangkat dengan sertifikat klaim tersebut terdaftar di masa mendatang. Namun; menonaktifkan sertifikat klaim tidak memblokir perangkat yang telah disediakan.

  Untuk informasi selengkapnya, lihat [Penyediaan dengan klaim](provision-wo-cert.md#claim-based).

## Penyediaan perangkat di AWS IoT


Saat menyediakan perangkat AWS IoT, Anda harus membuat sumber daya agar perangkat Anda dan AWS IoT dapat berkomunikasi dengan aman. Sumber daya lain dapat dibuat untuk membantu Anda mengelola armada perangkat Anda. Sumber daya berikut dapat dibuat selama proses penyediaan: 
+ Hal IoT.

  Hal-hal IoT adalah entri dalam registri perangkat. AWS IoT Setiap benda memiliki nama dan set atribut yang unik, dan dikaitkan dengan perangkat fisik. Hal-hal dapat didefinisikan menggunakan tipe benda atau dikelompokkan ke dalam kelompok benda. Untuk informasi selengkapnya, lihat [Mengelola perangkat dengan AWS IoT](iot-thing-management.md).

   Meskipun tidak diperlukan, membuat sesuatu memungkinkan untuk mengelola armada perangkat Anda secara lebih efektif dengan mencari perangkat berdasarkan jenis benda, grup benda, dan atribut benda. Untuk informasi selengkapnya, lihat [Pengindeksan armada](iot-indexing.md).
**catatan**  
Untuk mengindeks data status konektivitas Thing Anda, sediakan Thing Anda dan konfigurasikan agar nama Thing cocok dengan ID klien yang digunakan pada permintaan Connect.
+ Sertifikat X.509.

  Perangkat menggunakan sertifikat X.509 untuk melakukan otentikasi timbal balik dengan. AWS IoT Anda dapat mendaftarkan sertifikat yang ada atau telah AWS IoT menghasilkan dan mendaftarkan sertifikat baru untuk Anda. Anda mengaitkan sertifikat dengan perangkat dengan melampirkannya ke benda yang mewakili perangkat. Anda juga harus menyalin sertifikat dan kunci pribadi terkait ke perangkat. Perangkat menyajikan sertifikat saat menghubungkan ke AWS IoT. Untuk informasi selengkapnya, lihat [Autentikasi](authentication.md).
+ Kebijakan IoT.

  Kebijakan IoT menentukan operasi yang dapat dilakukan perangkat. AWS IoT Kebijakan IoT dilampirkan ke sertifikat perangkat. Saat perangkat menunjukkan sertifikat tersebut AWS IoT, maka akan diberikan izin yang ditentukan dalam kebijakan. Untuk informasi selengkapnya, lihat [Otorisasi](iot-authorization.md). Setiap perangkat membutuhkan sertifikat untuk berkomunikasi AWS IoT.

AWS IoT mendukung penyediaan armada otomatis menggunakan templat penyediaan. Templat penyediaan menjelaskan sumber daya yang AWS IoT diperlukan untuk menyediakan perangkat Anda. Template berisi variabel yang memungkinkan Anda menggunakan satu template untuk menyediakan beberapa perangkat. Saat menyediakan perangkat, Anda menentukan nilai untuk variabel khusus perangkat menggunakan kamus atau *peta*. Untuk menyediakan perangkat lain, tentukan nilai baru dalam kamus.

Anda dapat menggunakan penyediaan otomatis apakah perangkat Anda memiliki sertifikat unik (dan kunci pribadi terkait) atau tidak.

## Penyediaan armada APIs


Ada beberapa kategori yang APIs digunakan dalam penyediaan armada:
+ Fungsi bidang kontrol ini membuat dan mengelola templat penyediaan armada dan mengonfigurasi kebijakan pengguna tepercaya.
  + [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)
  + [ CreateProvisioningTemplateVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplateVersion.html)
  + [DeleteProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteProvisioningTemplate.html)
  + [DeleteProvisioningTemplateVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteProvisioningTemplateVersion.html)
  + [DescribeProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeProvisioningTemplate.html)
  + [DescribeProvisioningTemplateVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeProvisioningTemplateVersion.html)
  + [ListProvisioningTemplates](https://docs.aws.amazon.com/iot/latest/apireference/API_ListProvisioningTemplates.html)
  + [ListProvisioningTemplateVersions](https://docs.aws.amazon.com/iot/latest/apireference/API_ListProvisioningTemplateVersions.html)
  + [UpdateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateProvisioningTemplate.html)
+ Pengguna tepercaya dapat menggunakan fungsi bidang kontrol ini untuk menghasilkan klaim orientasi sementara. Klaim sementara ini diteruskan ke perangkat selama konfigurasi Wi-Fi atau metode serupa.
  + [CreateProvisioningClaim](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningClaim.html)
+ MQTT API yang digunakan selama proses penyediaan oleh perangkat dengan sertifikat klaim penyediaan yang disematkan di perangkat, atau diteruskan ke perangkat oleh pengguna tepercaya.
  + [CreateCertificateFromCsr](fleet-provision-api.md#create-cert-csr)
  + [CreateKeysAndCertificate](fleet-provision-api.md#create-keys-cert)
  + [RegisterThing](fleet-provision-api.md#register-thing)

# Penyediaan perangkat yang tidak memiliki sertifikat perangkat menggunakan penyediaan armada


Dengan menggunakan penyediaan AWS IoT armada, AWS IoT dapat menghasilkan dan mengirimkan sertifikat perangkat dan kunci pribadi dengan aman ke perangkat Anda saat mereka terhubung AWS IoT untuk pertama kalinya. AWS IoT menyediakan sertifikat klien yang ditandatangani oleh otoritas sertifikat Amazon Root (CA).

Ada dua cara untuk menggunakan penyediaan armada:
+ [Penyediaan dengan klaim](#claim-based)
+ [Penyediaan oleh pengguna tepercaya](#trusted-user)

## Penyediaan dengan klaim


Perangkat dapat diproduksi dengan sertifikat klaim penyediaan dan kunci pribadi (yang merupakan kredenal tujuan khusus) yang tertanam di dalamnya. Jika sertifikat ini terdaftar AWS IoT, layanan dapat menukarnya dengan sertifikat perangkat unik yang dapat digunakan perangkat untuk operasi reguler. Proses ini mencakup langkah-langkah berikut:

**Sebelum Anda mengirimkan perangkat**

1. Panggilan [https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html)untuk membuat template penyediaan. API ini mengembalikan template ARN. Untuk informasi selengkapnya, lihat [Penyediaan perangkat MQTT API](fleet-provision-api.md).

   Anda juga dapat membuat template penyediaan armada di konsol. AWS IoT 

   1. Dari panel navigasi, pilih menu tarik-turun **Connect many devices**. Kemudian, pilih **Connect Many Devices**.

   1. Pilih **Buat templat penyediaan.**

   1. Pilih **skenario Provisioning** yang paling sesuai dengan proses instalasi Anda. Lalu, pilih **Selanjutnya**.

   1. Lengkapi alur kerja template.

1. Buat sertifikat dan kunci pribadi terkait untuk digunakan sebagai penyediaan sertifikat klaim.

1. Daftarkan sertifikat ini AWS IoT dan kaitkan kebijakan IoT yang membatasi penggunaan sertifikat. Contoh kebijakan IoT berikut membatasi penggunaan sertifikat yang terkait dengan kebijakan ini untuk menyediakan perangkat.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Connect"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Publish",
                   "iot:Receive"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topic/$aws/certificates/create/*",
       "arn:aws:iot:us-east-1:123456789012:topic/$aws/provisioning-templates/templateName/provision/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iot:Subscribe",
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/certificates/create/*",
       "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/provisioning-templates/templateName/provision/*"
               ]
           }
       ]
   }
   ```

1. Berikan izin AWS IoT layanan untuk membuat atau memperbarui sumber daya IoT seperti hal-hal dan sertifikat di akun Anda saat menyediakan perangkat. Lakukan ini dengan melampirkan kebijakan `AWSIoTThingsRegistration` terkelola ke peran IAM (disebut peran penyediaan) yang mempercayai kepala layanan. AWS IoT 

1. Memproduksi perangkat dengan sertifikat klaim penyediaan yang tertanam dengan aman di dalamnya.

Perangkat sekarang siap dikirim ke tempat ia akan diinstal untuk digunakan.

**penting**  
Kunci pribadi klaim penyediaan harus diamankan setiap saat, termasuk di perangkat. Kami menyarankan Anda menggunakan AWS IoT CloudWatch metrik dan log untuk memantau indikasi penyalahgunaan. Jika Anda mendeteksi penyalahgunaan, matikan sertifikat klaim penyediaan sehingga tidak dapat digunakan untuk penyediaan perangkat.

**Untuk menginisialisasi perangkat untuk digunakan**

1. Perangkat menggunakan [AWS IoT Klien Perangkat SDKs SDKs, Seluler, dan AWS IoT Perangkat](iot-sdks.md) untuk menyambung dan mengautentikasi dengan AWS IoT menggunakan sertifikat klaim penyediaan yang diinstal pada perangkat.
**catatan**  
Untuk keamanan, yang `certificateOwnershipToken` dikembalikan `CreateCertificateFromCsr` dan `CreateKeysAndCertificate` kedaluwarsa setelah satu jam. `RegisterThing`harus dipanggil sebelum `certificateOwnershipToken` kedaluwarsa. Jika sertifikat yang dibuat oleh `CreateCertificateFromCsr` atau `CreateKeysAndCertificate` belum diaktifkan dan belum dilampirkan pada kebijakan atau sesuatu pada saat token kedaluwarsa, sertifikat akan dihapus. Jika token kedaluwarsa, perangkat dapat menelepon `CreateCertificateFromCsr` atau `CreateKeysAndCertificate` lagi untuk menghasilkan sertifikat baru.

1. Perangkat memperoleh sertifikat permanen dan kunci pribadi dengan menggunakan salah satu opsi ini. Perangkat akan menggunakan sertifikat dan kunci untuk semua otentikasi future dengan AWS IoT.

   1. Panggilan [`CreateKeysAndCertificate`](fleet-provision-api.md#create-keys-cert)untuk membuat sertifikat baru dan kunci pribadi menggunakan otoritas AWS sertifikat.

      Atau

   1. Panggilan [`CreateCertificateFromCsr`](fleet-provision-api.md#create-cert-csr)untuk menghasilkan sertifikat dari permintaan penandatanganan sertifikat yang menjaga kunci pribadinya tetap aman.

1. Dari perangkat, panggil [`RegisterThing`](fleet-provision-api.md#register-thing)untuk mendaftarkan perangkat dengan AWS IoT dan membuat sumber daya cloud.

   Layanan Fleet Provisioning menggunakan template penyediaan untuk menentukan dan membuat sumber daya cloud seperti IoT. Template dapat menentukan atribut dan grup yang menjadi milik benda itu. Kelompok benda harus ada sebelum hal baru dapat ditambahkan ke mereka.

1. Setelah menyimpan sertifikat permanen pada perangkat, perangkat harus memutuskan sambungan dari sesi yang dimulai dengan sertifikat klaim penyediaan dan menyambung kembali menggunakan sertifikat permanen. 

Perangkat sekarang siap untuk berkomunikasi secara normal AWS IoT.

## Penyediaan oleh pengguna tepercaya


Dalam banyak kasus, perangkat terhubung AWS IoT untuk pertama kalinya ketika pengguna tepercaya, seperti pengguna akhir atau teknisi instalasi, menggunakan aplikasi seluler untuk mengonfigurasi perangkat di lokasi yang digunakan.

**penting**  
Anda harus mengelola akses dan izin pengguna tepercaya untuk melakukan prosedur ini. Salah satu cara untuk melakukannya adalah dengan menyediakan dan memelihara akun untuk pengguna tepercaya yang mengautentikasi mereka dan memberi mereka akses ke AWS IoT fitur dan operasi API yang diperlukan untuk melakukan prosedur ini. 

**Sebelum Anda mengirimkan perangkat**

1. Panggilan [https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html)untuk membuat template penyediaan dan mengembalikan dan. *templateArn* *templateName*

1. Buat peran IAM yang digunakan oleh pengguna tepercaya untuk memulai proses penyediaan. Template penyediaan hanya memungkinkan pengguna tersebut untuk menyediakan perangkat. Contoh:

   ```
   {
       "Effect": "Allow",
       "Action": [
           "iot:CreateProvisioningClaim"
       ],
       "Resource": [
           "arn:aws:iot:aws-region:aws-account-id:provisioningtemplate/templateName"
       ]
   }
   ```

1. Berikan izin AWS IoT layanan untuk membuat atau memperbarui sumber daya IoT, seperti hal-hal dan sertifikat di akun Anda saat menyediakan perangkat. Anda melakukan ini dengan melampirkan kebijakan `AWSIoTThingsRegistration` terkelola ke peran IAM (disebut *peran penyediaan*) yang mempercayai prinsip layanan. AWS IoT 

1. Sediakan sarana untuk mengidentifikasi pengguna tepercaya Anda, seperti dengan memberi mereka akun yang dapat mengautentikasi mereka dan mengotorisasi interaksi mereka dengan operasi AWS API yang diperlukan untuk mendaftarkan perangkat mereka.

**Untuk menginisialisasi perangkat untuk digunakan**

1. Pengguna tepercaya masuk ke aplikasi seluler atau layanan web penyediaan Anda.

1. Aplikasi seluler atau aplikasi web menggunakan peran IAM dan panggilan [https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningClaim.html](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningClaim.html)untuk mendapatkan sertifikat klaim penyediaan sementara dari. AWS IoT
**catatan**  
Untuk keamanan, sertifikat klaim penyediaan sementara yang `CreateProvisioningClaim` dikembalikan kedaluwarsa setelah lima menit. Langkah-langkah berikut harus berhasil mengembalikan sertifikat yang valid sebelum sertifikat klaim penyediaan sementara berakhir. Sertifikat klaim penyediaan sementara tidak muncul dalam daftar sertifikat akun Anda.

1. Aplikasi seluler atau aplikasi web memasok sertifikat klaim penyediaan sementara ke perangkat bersama dengan informasi konfigurasi yang diperlukan, seperti kredensi Wi-Fi.

1. Perangkat menggunakan sertifikat klaim penyediaan sementara untuk terhubung AWS IoT menggunakan. [AWS IoT Klien Perangkat SDKs SDKs, Seluler, dan AWS IoT Perangkat](iot-sdks.md)

1. Perangkat memperoleh sertifikat permanen dan kunci pribadi dengan menggunakan salah satu opsi ini dalam waktu lima menit setelah terhubung AWS IoT dengan sertifikat klaim penyediaan sementara. Perangkat akan menggunakan sertifikat dan memasukkan opsi ini kembali untuk semua otentikasi future. AWS IoT

   1. Panggilan [`CreateKeysAndCertificate`](fleet-provision-api.md#create-keys-cert)untuk membuat sertifikat baru dan kunci pribadi menggunakan otoritas AWS sertifikat.

      Atau

   1. Panggilan [`CreateCertificateFromCsr`](fleet-provision-api.md#create-cert-csr)untuk menghasilkan sertifikat dari permintaan penandatanganan sertifikat yang menjaga kunci pribadinya tetap aman.
**catatan**  
Ingat [`CreateKeysAndCertificate`](fleet-provision-api.md#create-keys-cert)atau [`CreateCertificateFromCsr`](fleet-provision-api.md#create-cert-csr)harus mengembalikan sertifikat yang valid dalam waktu lima menit setelah terhubung AWS IoT dengan sertifikat klaim penyediaan sementara.

1. Perangkat memanggil [`RegisterThing`](fleet-provision-api.md#register-thing)untuk mendaftarkan perangkat dengan AWS IoT dan membuat sumber daya cloud. 

   Layanan Fleet Provisioning menggunakan template penyediaan untuk menentukan dan membuat sumber daya cloud seperti IoT. Template dapat menentukan atribut dan grup yang menjadi milik benda itu. Kelompok benda harus ada sebelum hal baru dapat ditambahkan ke mereka.

1. Setelah menyimpan sertifikat permanen pada perangkat, perangkat harus memutuskan sambungan dari sesi yang dimulai dengan sertifikat klaim penyediaan sementara dan menyambung kembali menggunakan sertifikat permanen. 

Perangkat sekarang siap untuk berkomunikasi secara normal AWS IoT.

## Menggunakan kait pra-penyediaan dengan CLI AWS


Prosedur berikut membuat template penyediaan dengan kait pra-penyediaan. Fungsi Lambda yang digunakan di sini adalah contoh yang dapat dimodifikasi. 

**Untuk membuat dan menerapkan hook pra-penyediaan ke template penyediaan**

1. Buat fungsi Lambda yang memiliki input dan output yang ditentukan. Fungsi Lambda sangat dapat disesuaikan. `allowProvisioning`dan `parameterOverrides` diperlukan untuk membuat kait pra-penyediaan. Untuk informasi selengkapnya tentang membuat fungsi Lambda, lihat [Menggunakan AWS Lambda dengan Antarmuka Baris AWS Perintah](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html).

   Berikut ini adalah contoh output fungsi Lambda:

   ```
   {
     "allowProvisioning": True,
     "parameterOverrides": {
       "incomingKey0": "incomingValue0",
       "incomingKey1": "incomingValue1"
     }
   }
   ```

1. AWS IoT menggunakan kebijakan berbasis sumber daya untuk memanggil Lambda, jadi Anda harus memberikan izin AWS IoT untuk memanggil fungsi Lambda Anda.
**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](cross-service-confused-deputy-prevention.md).

   Berikut ini adalah contoh menggunakan [izin tambahan memberikan izin](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) IoT ke Lambda Anda.

   ```
   aws lambda add-permission \
       --function-name myLambdaFunction \
       --statement-id iot-permission \
       --action lambda:InvokeFunction \
       --principal iot.amazonaws.com
   ```

1. Tambahkan hook pra-penyediaan ke template menggunakan perintah atau. [create-provisioning-template[update-provisioning-template](https://docs.aws.amazon.com/cli/latest/reference/iot/update-provisioning-template.html)](https://docs.aws.amazon.com/cli/latest/reference/iot/create-provisioning-template.html)

   Contoh CLI berikut menggunakan [create-provisioning-template](https://docs.aws.amazon.com/cli/latest/reference/iot/create-provisioning-template.html)untuk membuat template penyediaan yang memiliki kait pra-penyediaan:

   ```
   aws iot create-provisioning-template \
       --template-name myTemplate \
       --provisioning-role-arn arn:aws:iam:us-east-1:1234564789012:role/myRole \
       --template-body file://template.json \
       --pre-provisioning-hook file://hooks.json
   ```

   Output dari perintah ini terlihat seperti berikut:

   ```
   {
       "templateArn": "arn:aws:iot:us-east-1:1234564789012:provisioningtemplate/myTemplate",
       "defaultVersionId": 1,
       "templateName": myTemplate
   }
   ```

   Anda juga dapat memuat parameter dari file alih-alih mengetik semuanya sebagai nilai parameter baris perintah untuk menghemat waktu. Untuk informasi selengkapnya, lihat [Memuat AWS CLI Parameter dari File](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html). Berikut ini menunjukkan `template` parameter dalam format JSON diperluas:

   ```
   {
       "Parameters" : {
           "DeviceLocation": {
               "Type": "String"
           }
       },
       "Mappings": {
           "LocationTable": {
               "Seattle": {
                   "LocationUrl": "https://example.aws"
               }
           }
       },
       "Resources" : {
           "thing" : {
               "Type" : "AWS::IoT::Thing",
               "Properties" : {
                   "AttributePayload" : {
                       "version" : "v1",
                       "serialNumber" : "serialNumber"
                   },
                   "ThingName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]},
                   "ThingTypeName" : {"Fn::Join":["",["ThingTypePrefix_",{"Ref":"SerialNumber"}]]},
                   "ThingGroups" : ["widgets", "WA"],
                   "BillingGroup": "BillingGroup"
               },
               "OverrideSettings" : {
                   "AttributePayload" : "MERGE",
                   "ThingTypeName" : "REPLACE",
                   "ThingGroups" : "DO_NOTHING"
               }
           },
           "certificate" : {
               "Type" : "AWS::IoT::Certificate",
               "Properties" : {
                   "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"},
                   "Status" : "Active",
                   "ThingPrincipalType" : "EXCLUSIVE_THING"
               }
           },
           "policy" : {
               "Type" : "AWS::IoT::Policy",
               "Properties" : {
                   "PolicyDocument" : {
                       "Version": "2012-10-17",		 	 	 
                       "Statement": [{
                           "Effect": "Allow",
                           "Action":["iot:Publish"],
                           "Resource": ["arn:aws:iot:us-east-1:504350838278:topic/foo/bar"]
                       }]
                   }
               }
           }
       },
       "DeviceConfiguration": {
           "FallbackUrl": "https://www.example.com/test-site",
           "LocationUrl": {
               "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]}
       }
   }
   ```

   Berikut ini menunjukkan `pre-provisioning-hook` parameter dalam format JSON diperluas:

   ```
   {
        "targetArn" : "arn:aws:lambda:us-east-1:765219403047:function:pre_provisioning_test",
        "payloadVersion" : "2020-04-01"
   }
   ```

# Penyediaan perangkat yang memiliki sertifikat perangkat


AWS IoT menyediakan tiga cara untuk menyediakan perangkat ketika mereka sudah memiliki sertifikat perangkat (dan kunci pribadi terkait) pada mereka:
+ Penyediaan satu hal dengan templat penyediaan. Ini adalah opsi yang baik jika Anda hanya perlu menyediakan perangkat satu per satu.
+ Just-in-time provisioning (JITP) dengan template yang menyediakan perangkat saat pertama kali terhubung ke. AWS IoT Ini adalah pilihan yang baik jika Anda perlu mendaftarkan sejumlah besar perangkat, tetapi Anda tidak memiliki informasi tentang mereka yang dapat Anda kumpulkan ke dalam daftar penyediaan massal.
+ Pendaftaran massal. Opsi ini memungkinkan Anda untuk menentukan daftar nilai template penyediaan satu hal yang disimpan dalam file dalam bucket S3. Pendekatan ini bekerja dengan baik jika Anda memiliki sejumlah besar perangkat yang dikenal yang karakteristik yang diinginkan dapat Anda kumpulkan ke dalam daftar. 

**Topics**
+ [

# Penyediaan satu hal
](single-thing-provisioning.md)
+ [

# Just-in-time penyediaan
](jit-provisioning.md)
+ [

# Pendaftaran massal
](bulk-provisioning.md)

# Penyediaan satu hal


Untuk menyediakan sesuatu, gunakan [RegisterThing](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterThing.html)API atau perintah `register-thing` CLI. Perintah `register-thing` CLI mengambil argumen berikut:

--templat-tubuh  
Template penyediaan.

--parameter  
Daftar pasangan nama-nilai untuk parameter yang digunakan dalam template penyediaan, dalam format JSON (misalnya,). `{"ThingName" : "MyProvisionedThing", "CSR" : "csr-text"}`

Lihat [Templat penyediaan](provision-template.md).

[RegisterThing](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterThing.html)atau `register-thing` mengembalikan ARNs sumber daya dan teks sertifikat yang dibuatnya:

```
{
    "certificatePem": "certificate-text",
    "resourceArns": {
    "PolicyLogicalName": "arn:aws:iot:us-west-2:123456789012:policy/2A6577675B7CD1823E271C7AAD8184F44630FFD7",
    "certificate": "arn:aws:iot:us-west-2:123456789012:cert/cd82bb924d4c6ccbb14986dcb4f40f30d892cc6b3ce7ad5008ed6542eea2b049",
    "thing": "arn:aws:iot:us-west-2:123456789012:thing/MyProvisionedThing"
    }
}
```

Jika parameter dihilangkan dari kamus, nilai default digunakan. Jika tidak ada nilai default yang ditentukan, parameter tidak diganti dengan nilai.

# Just-in-time penyediaan


Anda dapat menggunakan just-in-time provisioning (JITP) untuk menyediakan perangkat Anda ketika mereka pertama kali mencoba untuk terhubung. AWS IoT Untuk menyediakan perangkat, Anda harus mengaktifkan pendaftaran otomatis dan mengaitkan templat penyediaan dengan sertifikat CA yang digunakan untuk menandatangani sertifikat perangkat. Keberhasilan dan kesalahan penyediaan dicatat seperti di [Metrik penyediaan perangkat](metrics_dimensions.md#provisioning-metrics) Amazon. CloudWatch

**Topics**
+ [

## Ikhtisar JITP
](#jit-provisioning-overview)
+ [

## Daftarkan CA menggunakan templat penyediaan
](#jit-provisioning-registerCA-template)
+ [

## Daftarkan CA menggunakan nama templat penyediaan
](#jit-provisioning-registerCA-templateName)

## Ikhtisar JITP


Ketika perangkat mencoba untuk terhubung AWS IoT dengan menggunakan sertifikat yang ditandatangani oleh sertifikat CA terdaftar, AWS IoT memuat template dari sertifikat CA dan menggunakannya untuk memanggil [RegisterThing](fleet-provision-api.md#register-thing). Alur kerja JITP pertama-tama mendaftarkan sertifikat dengan nilai status. `PENDING_ACTIVATION` Ketika alur penyediaan perangkat selesai, status sertifikat diubah menjadi. `ACTIVE`

AWS IoT mendefinisikan parameter berikut yang dapat Anda deklarasikan dan referensi dalam templat penyediaan:
+ `AWS::IoT::Certificate::Country`
+ `AWS::IoT::Certificate::Organization`
+ `AWS::IoT::Certificate::OrganizationalUnit`
+ `AWS::IoT::Certificate::DistinguishedNameQualifier`
+ `AWS::IoT::Certificate::StateName`
+ `AWS::IoT::Certificate::CommonName`
+ `AWS::IoT::Certificate::SerialNumber`
+ `AWS::IoT::Certificate::Id`

Nilai untuk parameter template penyediaan ini terbatas pada apa yang dapat diekstrak JITP dari bidang subjek sertifikat perangkat yang sedang disediakan. Sertifikat harus berisi nilai untuk semua parameter dalam badan template. `AWS::IoT::Certificate::Id`Parameter mengacu pada ID yang dihasilkan secara internal, bukan ID yang terkandung dalam sertifikat. Anda bisa mendapatkan nilai ID ini menggunakan `principal()` fungsi di dalam AWS IoT aturan. 

**catatan**  
Anda dapat menyediakan perangkat menggunakan fitur AWS IoT Core just-in-time provisioning (JITP) tanpa harus mengirim seluruh rantai kepercayaan pada koneksi pertama perangkat ke. AWS IoT Core Menyajikan sertifikat CA adalah opsional, tetapi perangkat diperlukan untuk mengirim ekstensi [Server Name Indication (SNI)](https://datatracker.ietf.org/doc/html/rfc3546#section-3.1) ketika terhubung ke. AWS IoT Core

### Contoh badan template


File JSON berikut adalah contoh badan template dari template JITP lengkap. 

```
{
   "Parameters":{
      "AWS::IoT::Certificate::CommonName":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::SerialNumber":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Country":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Id":{
         "Type":"String"
      }
   },
   "Resources":{
      "thing":{
         "Type":"AWS::IoT::Thing",
         "Properties":{
            "ThingName":{
               "Ref":"AWS::IoT::Certificate::CommonName"
            },
            "AttributePayload":{
               "version":"v1",
               "serialNumber":{
                  "Ref":"AWS::IoT::Certificate::SerialNumber"
               }
            },
            "ThingTypeName":"lightBulb-versionA",
            "ThingGroups":[
               "v1-lightbulbs",
               {
                  "Ref":"AWS::IoT::Certificate::Country"
               }
            ]
         },
         "OverrideSettings":{
            "AttributePayload":"MERGE",
            "ThingTypeName":"REPLACE",
            "ThingGroups":"DO_NOTHING"
         }
      },
      "certificate":{
         "Type":"AWS::IoT::Certificate",
         "Properties":{
            "CertificateId":{
               "Ref":"AWS::IoT::Certificate::Id"
            },
            "Status":"ACTIVE"
         }
      },
      "policy":{
         "Type":"AWS::IoT::Policy",
         "Properties":{
            "PolicyDocument":"{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
         }
      }
   }
}
```

Templat sampel ini mendeklarasikan nilai untuk parameter `AWS::IoT::Certificate::CommonName``AWS::IoT::Certificate::SerialNumber`,`AWS::IoT::Certificate::Country`,, dan `AWS::IoT::Certificate::Id` penyediaan yang diekstraksi dari sertifikat dan digunakan di bagian tersebut. `Resources` Alur kerja JITP kemudian menggunakan template ini untuk melakukan tindakan berikut:
+ Daftarkan sertifikat dan atur statusnya ke PENDING\$1ACTIVE.
+ Buat sumber daya satu hal.
+ Buat satu sumber kebijakan.
+ Lampirkan kebijakan ke sertifikat.
+ Lampirkan sertifikat pada objek .
+ Perbarui status sertifikat ke AKTIF.

Penyediaan perangkat gagal jika sertifikat tidak memiliki semua properti yang disebutkan di `Parameters` bagian. `templateBody` Misalnya, jika `AWS::IoT::Certificate::Country` disertakan dalam templat, tetapi sertifikat tidak memiliki `Country` properti, penyediaan perangkat akan gagal.

Anda juga dapat menggunakan CloudTrail untuk memecahkan masalah dengan template JITP Anda. Untuk informasi tentang metrik yang dicatat di Amazon CloudWatch, lihat[Metrik penyediaan perangkat](metrics_dimensions.md#provisioning-metrics). Untuk informasi selengkapnya tentang penyediaan templat, lihat Templat [penyediaan](provision-template.md).

**catatan**  
Selama proses penyediaan, just-in-time provisioning (JITP) memanggil operasi API bidang kontrol lainnya. AWS IoT Panggilan ini mungkin melebihi [Kuota AWS IoT Pelambatan](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#throttling-limits) yang ditetapkan untuk akun Anda dan mengakibatkan panggilan terhambat. Hubungi [AWS Customer Support](https://console.aws.amazon.com/support/home) untuk menaikkan kuota throttling Anda jika perlu.

## Daftarkan CA menggunakan templat penyediaan


Untuk mendaftarkan CA dengan menggunakan templat penyediaan lengkap, ikuti langkah-langkah berikut: 

1. Simpan template penyediaan Anda dan informasi ARN peran seperti contoh berikut sebagai file JSON:

   ```
   { 
        "templateBody" : "{\r\n    \"Parameters\" : {\r\n        \"AWS::IoT::Certificate::CommonName\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::SerialNumber\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::Country\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::Id\": {\r\n            \"Type\": \"String\"\r\n        }\r\n    },\r\n    \"Resources\": {\r\n        \"thing\": {\r\n            \"Type\": \"AWS::IoT::Thing\",\r\n            \"Properties\": {\r\n                \"ThingName\": {\r\n                    \"Ref\": \"AWS::IoT::Certificate::CommonName\"\r\n                },\r\n                \"AttributePayload\": {\r\n                    \"version\": \"v1\",\r\n                    \"serialNumber\": {\r\n                        \"Ref\": \"AWS::IoT::Certificate::SerialNumber\"\r\n                    }\r\n                },\r\n                \"ThingTypeName\": \"lightBulb-versionA\",\r\n                \"ThingGroups\": [\r\n                    \"v1-lightbulbs\",\r\n                    {\r\n                        \"Ref\": \"AWS::IoT::Certificate::Country\"\r\n                    }\r\n                ]\r\n            },\r\n            \"OverrideSettings\": {\r\n                \"AttributePayload\": \"MERGE\",\r\n                \"ThingTypeName\": \"REPLACE\",\r\n                \"ThingGroups\": \"DO_NOTHING\"\r\n            }\r\n        },\r\n        \"certificate\": {\r\n            \"Type\": \"AWS::IoT::Certificate\",\r\n            \"Properties\": {\r\n                \"CertificateId\": {\r\n                    \"Ref\": \"AWS::IoT::Certificate::Id\"\r\n                },\r\n                \"Status\": \"ACTIVE\"\r\n            },\r\n            \"OverrideSettings\": {\r\n                \"Status\": \"DO_NOTHING\"\r\n            }\r\n        },\r\n        \"policy\": {\r\n            \"Type\": \"AWS::IoT::Policy\",\r\n            \"Properties\": {\r\n                \"PolicyDocument\": \"{ \\\"Version\\\": \\\"2012-10-17		 	 	 \\\", \\\"Statement\\\": [{ \\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\":[\\\"iot:Publish\\\"], \\\"Resource\\\": [\\\"arn:aws:iot:us-east-1:123456789012:topic\/foo\/bar\\\"] }] }\"\r\n            }\r\n        }\r\n    }\r\n}",
        "roleArn" : "arn:aws:iam::123456789012:role/JITPRole"
   }
   ```

   Dalam contoh ini, nilai `templateBody` bidang harus berupa objek JSON yang ditentukan sebagai string yang lolos dan hanya dapat menggunakan nilai-nilai dalam daftar [sebelumnya](#jit-provisioning-overview). Anda dapat menggunakan berbagai alat untuk membuat output JSON yang diperlukan, seperti `json.dumps` (Python) `JSON.stringify` atau (Node). Nilai `roleARN` bidang harus ARN dari peran yang `AWSIoTThingsRegistration` melekat padanya. Selain itu, template Anda dapat menggunakan yang sudah ada `PolicyName` alih-alih inline `PolicyDocument` dalam contoh. 

1. Daftarkan sertifikat CA dengan operasi [Register CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) API atau perintah [https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html)CLI. Anda akan menentukan direktori template penyediaan dan peran informasi ARN yang Anda simpan di langkah sebelumnya:

   Berikut ini menunjukkan contoh cara mendaftarkan sertifikat CA dalam `DEFAULT` mode menggunakan AWS CLI:

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --verification-cert file://your-verification-cert 
                   --set-as-active --allow-auto-registration --registration-config file://your-template
   ```

   Berikut ini menunjukkan contoh cara mendaftarkan sertifikat CA dalam `SNI_ONLY` mode menggunakan AWS CLI:

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --certificate-mode SNI_ONLY
                    --set-as-active --allow-auto-registration --registration-config file://your-template
   ```

   Untuk informasi selengkapnya, lihat [Mendaftarkan Sertifikat CA Anda](https://docs.aws.amazon.com//iot/latest/developerguide/register-CA-cert.html).

1.  (Opsional) Perbarui pengaturan untuk sertifikat CA dengan menggunakan operasi [Update CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) API atau perintah [https://docs.aws.amazon.com//cli/latest/reference/iot/update-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-ca-certificate.html)CLI. 

   Berikut ini menunjukkan contoh cara memperbarui sertifikat CA menggunakan AWS CLI:

   ```
   aws iot update-ca-certificate --certificate-id caCertificateId
                   --new-auto-registration-status ENABLE --registration-config file://your-template
   ```

## Daftarkan CA menggunakan nama templat penyediaan


Untuk mendaftarkan CA menggunakan nama templat penyediaan, ikuti langkah-langkah berikut:

1. Simpan badan template penyediaan Anda sebagai file JSON. Anda dapat menemukan contoh badan template dalam [contoh badan template](#jit-provisioning-example-templatebody).

1. Untuk membuat template penyediaan, gunakan [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)API atau perintah CLI [https://docs.aws.amazon.com//cli/latest/reference/iot/create-provisioning-template.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-provisioning-template.html):

   ```
   aws iot create-provisioning-template --template-name your-template-name \
           --template-body file://your-template-body.json --type JITP \
           --provisioning-role-arn arn:aws:iam::123456789012:role/test
   ```
**catatan**  
Untuk just-in-time penyediaan (JITP), Anda harus menentukan jenis templat `JITP` saat membuat templat penyediaan. Untuk informasi selengkapnya tentang jenis templat, lihat [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)di *Referensi AWS API*.

1. Untuk mendaftarkan CA dengan nama template, gunakan [Register CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) API atau perintah [https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html)CLI:

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --verification-cert file://your-verification-cert \
           --set-as-active --allow-auto-registration --registration-config templateName=your-template-name
   ```

# Pendaftaran massal


Anda dapat menggunakan [https://docs.aws.amazon.com/iot/latest/apireference/API_StartThingRegistrationTask.html](https://docs.aws.amazon.com/iot/latest/apireference/API_StartThingRegistrationTask.html)perintah untuk mendaftarkan hal-hal dalam jumlah besar. Perintah ini mengambil template penyediaan, nama bucket S3, nama kunci, dan ARN peran yang memungkinkan akses ke file di bucket S3. File di bucket S3 berisi nilai yang digunakan untuk mengganti parameter dalam template. File harus berupa file JSON yang dibatasi baris baru. Setiap baris berisi semua nilai parameter untuk mendaftarkan satu perangkat. Contoh:

```
{"ThingName": "foo", "SerialNumber": "123", "CSR": "csr1"}
{"ThingName": "bar", "SerialNumber": "456", "CSR": "csr2"}
```

Operasi API terkait registrasi massal berikut mungkin berguna:
+ [ListThingRegistrationTasks](https://docs.aws.amazon.com/iot/latest/apireference/API_ListThingRegistrationTasks.html): Daftar tugas penyediaan barang massal saat ini. 
+ [ DescribeThingRegistrationTask](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeThingRegistrationTask.html): Memberikan informasi tentang tugas pendaftaran barang massal tertentu.
+ [StopThingRegistrationTask](https://docs.aws.amazon.com/iot/latest/apireference/API_StopThingRegistrationTask.html): Menghentikan tugas pendaftaran barang massal.
+ [ListThingRegistrationTaskReports](https://docs.aws.amazon.com/iot/latest/apireference/API_ListThingRegistrationTaskReports.html): Digunakan untuk memeriksa hasil dan kegagalan untuk tugas pendaftaran barang massal.

**catatan**  
Hanya satu tugas operasi pendaftaran massal yang dapat berjalan pada satu waktu (per akun).
Operasi registrasi massal memanggil operasi API bidang AWS IoT kontrol lainnya. Panggilan ini mungkin melebihi [Kuota AWS IoT Pelambatan di akun Anda dan menyebabkan kesalahan throttle](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#throttling-limits). Hubungi [AWS Customer Support](https://console.aws.amazon.com/support/home) untuk meningkatkan kuota AWS IoT pembatasan Anda, jika perlu.

# Templat penyediaan


Template penyediaan adalah dokumen JSON yang menggunakan parameter untuk menjelaskan sumber daya yang harus digunakan perangkat Anda untuk berinteraksi. AWS IoT Template penyediaan berisi dua bagian: `Parameters` dan. `Resources` Ada dua jenis template penyediaan di. AWS IoT Satu digunakan untuk just-in-time penyediaan (JITP) dan registrasi massal, dan yang kedua digunakan untuk penyediaan armada.

**Topics**
+ [

## Bagian parameter
](#parameters-section)
+ [

## Bagian sumber daya
](#resources-section)
+ [

## Contoh template untuk pendaftaran massal
](#bulk-template-example)
+ [

## Contoh template untuk just-in-time penyediaan (JITP)
](#JITP-template-example)
+ [

## Penyediaan armada
](#fleet-provision-template)

## Bagian parameter


`Parameters`Bagian ini menyatakan parameter yang digunakan di `Resources` bagian. Setiap parameter mendeklarasikan nama, tipe, dan nilai default opsional. Nilai default digunakan ketika kamus diteruskan dengan template tidak berisi nilai untuk parameter. `Parameters`Bagian dari dokumen template terlihat seperti berikut:

```
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber" : {
            "Type" : "String"
        },
        "Location" : {
            "Type" : "String",
            "Default" : "WA"
        },
        "CSR" : {
            "Type" : "String"    
        }
    }
}
```

Cuplikan isi template ini mendeklarasikan empat parameter:`ThingName`,,`SerialNumber`, `Location` dan. `CSR` Semua parameter ini bertipe`String`. `Location`Parameter mendeklarasikan nilai default dari. `"WA"`

## Bagian sumber daya


`Resources`Bagian badan templat menyatakan sumber daya yang diperlukan untuk berkomunikasi dengan perangkat Anda AWS IoT: sesuatu, sertifikat, dan satu atau beberapa kebijakan IoT. Setiap sumber daya menentukan nama logis, tipe, dan satu set properti.

Nama logis memungkinkan Anda untuk merujuk ke sumber daya di tempat lain dalam template.

Jenis menentukan jenis sumber daya yang Anda deklarasikan. Jenis yang valid adalah:
+ `AWS::IoT::Thing`
+ `AWS::IoT::Certificate`
+ `AWS::IoT::Policy`

Properti yang Anda tentukan bergantung pada jenis sumber daya yang Anda deklarasikan.

### Sumber daya benda


Sumber daya benda dideklarasikan menggunakan properti berikut:
+ `ThingName`: Tali.
+ `AttributePayload`: Opsional. Daftar pasangan nama-nilai.
+ `ThingTypeName`: Opsional. String untuk jenis hal terkait untuk benda tersebut.
+ `ThingGroups`: Opsional. Daftar kelompok tempat benda itu berada.
+ `BillingGroup`: Opsional. String untuk nama grup penagihan terkait.
+ `PackageVersions`: Opsional. String untuk paket terkait dan nama versi.

### Sumber daya sertifikat


Anda dapat menentukan sertifikat dengan salah satu cara berikut:
+ Permintaan penandatanganan sertifikat (CSR).
+ ID sertifikat sertifikat perangkat yang ada. (Hanya sertifikat yang IDs dapat digunakan dengan templat penyediaan armada.)
+ Sertifikat perangkat yang dibuat dengan sertifikat CA terdaftar AWS IoT. Jika Anda memiliki lebih dari satu sertifikat CA yang terdaftar dengan bidang subjek yang sama, Anda juga harus lulus dalam sertifikat CA yang digunakan untuk menandatangani sertifikat perangkat.

**catatan**  
Saat Anda mendeklarasikan sertifikat dalam templat, gunakan hanya salah satu metode ini. Misalnya, jika Anda menggunakan CSR, Anda juga tidak dapat menentukan ID sertifikat atau sertifikat perangkat. Untuk informasi selengkapnya, lihat [Sertifikat klien X.509](x509-client-certs.md). 

Untuk informasi selengkapnya, lihat [Ikhtisar Sertifikat X.509](authentication.md#x509-certificate-overview). 

Sumber daya sertifikat dideklarasikan menggunakan properti berikut:
+ `CertificateSigningRequest`: Tali.
+ `CertificateId`: Tali.
+ `CertificatePem`: Tali.
+ `CACertificatePem`: Tali.
+ `Status`: Opsional. String yang bisa `ACTIVE` atau`INACTIVE`. Default ke ACTIVE.
+ `ThingPrincipalType`: Opsional. String yang menentukan jenis hubungan antara hal dan prinsipal (sertifikat).
  + `EXCLUSIVE_THING`: Membangun hubungan eksklusif. Kepala sekolah hanya dapat dilampirkan pada Hal khusus ini dan tidak ada yang lain.
  + `NON_EXCLUSIVE_THING`: Melampirkan prinsip yang ditentukan untuk hal-hal. Anda dapat melampirkan beberapa Hal ke kepala sekolah. Ini adalah nilai default jika tidak ditentukan.
**catatan**  
Anda juga dapat menyediakan perangkat tanpa sertifikat perangkat. Untuk informasi selengkapnya, lihat [Penyediaan perangkat yang tidak memiliki sertifikat perangkat menggunakan penyediaan armada](provision-wo-cert.md).

Contoh:
+ Sertifikat yang ditentukan dengan CSR:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "CertificateSigningRequest": {"Ref" : "CSR"},
              "Status" : "ACTIVE"      
          }
      }
  }
  ```
+ Sertifikat yang ditentukan dengan ID sertifikat yang ada:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "CertificateId": {"Ref" : "CertificateId"}
          }
      }
  }
  ```
+ Sertifikat yang ditentukan dengan sertifikat yang ada .pem dan sertifikat CA.pem:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "CACertificatePem": {"Ref" : "CACertificatePem"},
              "CertificatePem": {"Ref" : "CertificatePem"}
          }
      }
  }
  ```
+ Secara eksklusif melampirkan satu hal ke kepala sekolah:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "ThingPrincipalType" : "EXCLUSIVE_THING"
          }
      }
  }
  ```

### Sumber daya kebijakan


Sumber daya kebijakan dideklarasikan menggunakan salah satu properti berikut:
+ `PolicyName`: Opsional. String. Default ke hash dokumen kebijakan. Hanya `PolicyName` dapat merujuk AWS IoT kebijakan tetapi tidak kebijakan IAM. Jika Anda menggunakan AWS IoT kebijakan yang ada, untuk `PolicyName` properti, masukkan nama kebijakan. Jangan sertakan `PolicyDocument` properti.
+ `PolicyDocument`: Opsional. Sebuah objek JSON ditentukan sebagai string lolos. Jika tidak `PolicyDocument` disediakan, kebijakan harus sudah dibuat.

**catatan**  
Jika ada `Policy` bagian, `PolicyName` atau`PolicyDocument`, tetapi tidak keduanya, harus ditentukan.

### Ganti pengaturan


Jika template menentukan sumber daya yang sudah ada, `OverrideSettings` bagian ini memungkinkan Anda menentukan tindakan yang akan diambil:

`DO_NOTHING`  
Tinggalkan sumber daya apa adanya.

`REPLACE`  
Ganti sumber daya dengan sumber daya yang ditentukan dalam template.

`FAIL`  
Menyebabkan permintaan gagal dengan a`ResourceConflictsException`.

`MERGE`  
Hanya berlaku untuk `ThingGroups` dan `AttributePayload` properti a`thing`. Gabungkan atribut yang ada atau keanggotaan grup dari benda tersebut dengan yang ditentukan dalam template.

Ketika Anda mendeklarasikan sumber daya sesuatu, Anda dapat menentukan `OverrideSettings` untuk properti berikut:
+ `ATTRIBUTE_PAYLOAD`
+ `THING_TYPE_NAME`
+ `THING_GROUPS`

Ketika Anda mendeklarasikan sumber daya sertifikat, Anda dapat menentukan `OverrideSettings` untuk properti. `Status`

`OverrideSettings`tidak tersedia untuk sumber daya kebijakan.

### Contoh sumber daya


Cuplikan template berikut mendeklarasikan sesuatu, sertifikat, dan kebijakan:

```
{ 
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "ThingName" : {"Ref" : "ThingName"},
                "AttributePayload" : { "version" : "v1", "serialNumber" :  {"Ref" : "SerialNumber"}}, 
                "ThingTypeName" :  "lightBulb-versionA",
                "ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}]
            },
            "OverrideSettings" : {
                "AttributePayload" : "MERGE",
                "ThingTypeName" : "REPLACE",
                "ThingGroups" : "DO_NOTHING"
            }
        },  
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateSigningRequest": {"Ref" : "CSR"},
                "Status" : "ACTIVE"      
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyDocument" : "{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
            }
        }
    }
}
```

Hal itu dinyatakan dengan:
+ Nama logisnya`"thing"`.
+ Tipe`AWS::IoT::Thing`.
+  Satu set properti benda.

  Properti benda termasuk nama benda, satu set atribut, nama tipe benda opsional, dan daftar opsional grup benda yang menjadi milik benda itu.

Parameter direferensikan oleh`{"Ref":"parameter-name"}`. Ketika template dievaluasi, parameter diganti dengan nilai parameter dari kamus yang diteruskan dengan template.

Sertifikat dinyatakan dengan:
+ Nama logisnya`"certificate"`.
+ Tipe`AWS::IoT::Certificate`.
+ Satu set properti.

  Properti termasuk CSR untuk sertifikat, dan pengaturan status ke`ACTIVE`. Teks CSR diteruskan sebagai parameter dalam kamus yang diteruskan dengan template.

Kebijakan ini dinyatakan dengan:
+ Nama logisnya`"policy"`.
+ Tipe`AWS::IoT::Policy`.
+ Baik nama kebijakan yang ada atau dokumen kebijakan.

## Contoh template untuk pendaftaran massal


File JSON berikut adalah contoh template penyediaan lengkap yang menentukan sertifikat dengan CSR:

(Nilai `PolicyDocument` bidang harus berupa objek JSON yang ditentukan sebagai string yang lolos.)

```
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber" : {
            "Type" : "String"
        },
        "Location" : {
            "Type" : "String",
            "Default" : "WA"
        },
        "CSR" : {
            "Type" : "String"    
        }
    },
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "ThingName" : {"Ref" : "ThingName"},
                "AttributePayload" : { "version" : "v1", "serialNumber" :  {"Ref" : "SerialNumber"}}, 
                "ThingTypeName" :  "lightBulb-versionA",
                "ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}]
            }
        },
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateSigningRequest": {"Ref" : "CSR"},
                "Status" : "ACTIVE",
                "ThingPrincipalType" : "EXCLUSIVE_THING"
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyDocument" : "{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
            }
        }
    }
}
```

## Contoh template untuk just-in-time penyediaan (JITP)


File JSON berikut adalah contoh template penyediaan lengkap yang menentukan sertifikat yang ada dengan ID sertifikat:

```
{
   "Parameters":{
      "AWS::IoT::Certificate::CommonName":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::SerialNumber":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Country":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Id":{
         "Type":"String"
      }
   },
   "Resources":{
      "thing":{
         "Type":"AWS::IoT::Thing",
         "Properties":{
            "ThingName":{
               "Ref":"AWS::IoT::Certificate::CommonName"
            },
            "AttributePayload":{
               "version":"v1",
               "serialNumber":{
                  "Ref":"AWS::IoT::Certificate::SerialNumber"
               }
            },
            "ThingTypeName":"lightBulb-versionA",
            "ThingGroups":[
               "v1-lightbulbs",
               {
                  "Ref":"AWS::IoT::Certificate::Country"
               }
            ]
         },
         "OverrideSettings":{
            "AttributePayload":"MERGE",
            "ThingTypeName":"REPLACE",
            "ThingGroups":"DO_NOTHING"
         }
      },
      "certificate":{
         "Type":"AWS::IoT::Certificate",
         "Properties":{
            "CertificateId":{
               "Ref":"AWS::IoT::Certificate::Id"
            },
            "Status":"ACTIVE",
            "ThingPrincipalType" : "EXCLUSIVE_THING"
         }
      },
      "policy":{
         "Type":"AWS::IoT::Policy",
         "Properties":{
            "PolicyDocument":"{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
         }
      }
   }
}
```

**penting**  
Anda harus menggunakan `CertificateId` dalam template yang digunakan untuk penyediaan JIT.

Untuk informasi selengkapnya tentang jenis templat penyediaan, lihat [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type)di referensi AWS API.

Untuk informasi selengkapnya tentang cara menggunakan templat ini untuk just-in-time penyediaan, lihat: Penyediaan [J ust-in-time](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html).

## Penyediaan armada


Templat penyediaan armada digunakan oleh AWS IoT untuk mengatur konfigurasi cloud dan perangkat. Template ini menggunakan parameter dan sumber daya yang sama dengan JITP dan templat pendaftaran massal. Untuk informasi selengkapnya, lihat [Templat penyediaan](#provision-template). Templat penyediaan armada dapat berisi `Mapping` bagian dan bagian. `DeviceConfiguration` Anda dapat menggunakan fungsi intrinsik di dalam templat penyediaan armada untuk menghasilkan konfigurasi khusus perangkat. Templat penyediaan armada diberi nama sumber daya dan diidentifikasi oleh ARNs (misalnya,`arn:aws:iot:us-west-2:1234568788:provisioningtemplate/templateName`).

### Pemetaan


Bagian `Mappings` opsional cocok dengan kunci untuk satu set nilai yang sesuai. Misalnya, jika Anda ingin menetapkan nilai berdasarkan AWS Wilayah, Anda dapat membuat pemetaan yang menggunakan AWS Region nama sebagai kunci dan berisi nilai yang ingin Anda tentukan untuk setiap Wilayah tertentu. Anda menggunakan fungsi intrinsik `Fn::FindInMap` untuk mengambil nilai-nilai dalam peta.

Anda tidak dapat menyertakan parameter, parameter semu, atau memanggil fungsi intrinsik di bagian tersebut. `Mappings`

### Konfigurasi perangkat


Bagian konfigurasi perangkat berisi data arbitrer yang ingin Anda kirim ke perangkat saat penyediaan. Contoh: 

```
{
    "DeviceConfiguration": {
        "Foo":"Bar"
    }
}
```

Jika Anda mengirim pesan ke perangkat menggunakan format payload JavaScript Object Notation (JSON), AWS IoT Core format data ini sebagai JSON. Jika Anda menggunakan format payload Concise Binary Object Representation (CBOR), AWS IoT Core format data ini sebagai CBOR. `DeviceConfiguration`Bagian ini tidak mendukung objek JSON bersarang.

### Fungsi intrinsik


Fungsi intrinsik digunakan di bagian mana pun dari template penyediaan kecuali bagian. `Mappings`

`Fn::Join`  
Menambahkan satu set nilai ke dalam nilai tunggal, dipisahkan oleh pembatas yang ditentukan. Jika pembatas adalah string kosong, nilainya digabungkan tanpa pembatas.  
`Fn::Join`tidak didukung untuk[Sumber daya kebijakan](#policy-resources).

`Fn::Select`  
Mengembalikan objek tunggal dari daftar objek dengan indeks.  
`Fn::Select`tidak memeriksa `null` nilai atau jika indeks berada di luar batas array. Kedua kondisi menghasilkan kesalahan penyediaan, jadi pastikan Anda memilih nilai indeks yang valid dan daftar berisi nilai non-null.

`Fn::FindInMap`  
Mengembalikan nilai yang sesuai dengan kunci dalam peta dua tingkat yang dinyatakan di `Mappings` bagian.

`Fn::Split`  
Membagi string ke dalam daftar nilai string sehingga Anda dapat memilih elemen dari daftar string. Anda menentukan pembatas yang menentukan di mana string dibagi (misalnya, koma). Setelah Anda membagi string, gunakan `Fn::Select` untuk memilih elemen.  
Misalnya, jika string subnet yang dibatasi koma IDs diimpor ke template tumpukan Anda, Anda dapat membagi string pada setiap koma. Dari daftar subnet IDs, gunakan `Fn::Select` untuk menentukan ID subnet untuk sumber daya.

`Fn::Sub`  
Mengganti variabel dalam string input dengan nilai yang Anda tentukan. Anda dapat menggunakan fungsi ini untuk membuat perintah atau output yang menyertakan nilai yang tidak tersedia sampai Anda membuat atau memperbarui tumpukan.

### Contoh template untuk penyediaan armada


```
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber": {
            "Type": "String"
        },
        "DeviceLocation": {
            "Type": "String"
        }
    },
    "Mappings": {
        "LocationTable": {
            "Seattle": {
                "LocationUrl": "https://example.aws"
            }
        }
    },
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "AttributePayload" : { 
                    "version" : "v1",
                    "serialNumber" : "serialNumber"
                },
                "ThingName" : {"Ref" : "ThingName"},
                "ThingTypeName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]},
                "ThingGroups" : ["v1-lightbulbs", "WA"],
                "BillingGroup": "LightBulbBillingGroup"
            },
            "OverrideSettings" : {
                "AttributePayload" : "MERGE",
                "ThingTypeName" : "REPLACE",
                "ThingGroups" : "DO_NOTHING"
            }
        },
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"},
                "Status" : "Active",
                "ThingPrincipalType" : "EXCLUSIVE_THING"
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyDocument" : {
                    "Version": "2012-10-17",		 	 	 
                    "Statement": [{
                        "Effect": "Allow",
                        "Action":["iot:Publish"],
                        "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/foo/bar"]
                    }]
                }
            }
        }
    },
    "DeviceConfiguration": {
        "FallbackUrl": "https://www.example.com/test-site",
        "LocationUrl": {
            "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]}
        }
}
```

**catatan**  
Template penyediaan yang ada dapat diperbarui untuk menambahkan kait [pra-penyediaan](pre-provisioning-hook.md).

# 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. Hook pra-penyediaan adalah fungsi Lambda yang memvalidasi parameter yang diteruskan dari perangkat sebelum perangkat tersebut dapat disediakan. Fungsi Lambda ini harus ada di akun Anda sebelum Anda menyediakan perangkat karena dipanggil setiap kali perangkat mengirimkan permintaan melalui. [RegisterThing](fleet-provision-api.md#register-thing)

**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](cross-service-confused-deputy-prevention.md).

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

`parameters`Objek yang diteruskan ke fungsi Lambda berisi properti dalam `parameters` argumen yang diteruskan dalam payload [RegisterThing](fleet-provision-api.md#register-thing) 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](fleet-provision-api.md#register-thing) 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;
    }

}
```

Kelas permintaan:

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

------

# Penandatanganan sertifikat yang dikelola sendiri menggunakan penyedia AWS IoT Core sertifikat


Anda dapat membuat penyedia AWS IoT Core sertifikat untuk menandatangani permintaan penandatanganan sertifikat (CSRs) dalam penyediaan AWS IoT armada. Penyedia sertifikat mereferensikan fungsi Lambda dan API [`CreateCertificateFromCsr`MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) untuk penyediaan armada. Fungsi Lambda menerima CSR dan mengembalikan sertifikat klien yang ditandatangani.

Bila Anda tidak memiliki penyedia sertifikat dengan Anda Akun AWS, [CreateCertificateFromCsr MQTT API](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) dipanggil dalam penyediaan armada untuk menghasilkan sertifikat dari CSR. Setelah Anda membuat penyedia sertifikat, perilaku API [CreateCertificateFromCsr MQTT akan berubah dan semua panggilan ke API](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) MQTT ini akan memanggil penyedia sertifikat untuk mengeluarkan sertifikat.

Dengan penyedia AWS IoT Core sertifikat, Anda dapat menerapkan solusi yang memanfaatkan otoritas sertifikat swasta (CAs) seperti [AWS Private CA](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html), kepercayaan publik lainnya CAs, atau Infrastruktur Kunci Publik (PKI) Anda sendiri untuk menandatangani CSR. Selain itu, Anda dapat menggunakan penyedia sertifikat untuk menyesuaikan bidang sertifikat klien Anda seperti periode validitas, algoritma penandatanganan, penerbit, dan ekstensi.

**penting**  
Anda hanya dapat membuat satu penyedia sertifikat per Akun AWS. Perubahan perilaku penandatanganan berlaku untuk seluruh armada yang memanggil [API CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) hingga Anda menghapus penyedia sertifikat dari penyedia sertifikat. Akun AWS

**Topics**
+ [

## Cara kerja penandatanganan sertifikat yang dikelola sendiri dalam penyediaan armada
](#provisioning-cert-provider-how-it-works)
+ [

## Input fungsi Lambda penyedia sertifikat
](#provisioning-cert-provider-lambda-input)
+ [

## Nilai pengembalian fungsi Lambda penyedia sertifikat
](#provisioning-cert-provider-lambda-return)
+ [

## Contoh fungsi Lambda
](#provisioning-cert-provider-lambda)
+ [

## Penandatanganan sertifikat yang dikelola sendiri untuk penyediaan armada
](#provisioning-self-certificate-signing)
+ [

## AWS CLI perintah untuk penyedia sertifikat
](#provisioning-cert-provider-cli)

## Cara kerja penandatanganan sertifikat yang dikelola sendiri dalam penyediaan armada


### Konsep utama


Konsep berikut memberikan detail yang dapat membantu Anda memahami cara kerja penandatanganan sertifikat yang dikelola sendiri dalam penyediaan AWS IoT armada. Untuk informasi selengkapnya, lihat [Menyediakan perangkat yang tidak memiliki sertifikat perangkat menggunakan penyediaan armada](https://docs.aws.amazon.com//iot/latest/developerguide/provision-wo-cert.html).

**AWS IoT penyediaan armada**  
Dengan penyediaan AWS IoT armada (kependekan dari penyediaan armada), AWS IoT Core menghasilkan dan mengirimkan sertifikat perangkat dengan aman ke perangkat Anda saat mereka terhubung untuk pertama kalinya. AWS IoT Core Anda dapat menggunakan penyediaan armada untuk menghubungkan perangkat yang tidak memiliki sertifikat perangkat. AWS IoT Core

**Permintaan penandatanganan sertifikat (CSR)**  
Dalam proses penyediaan armada, perangkat membuat permintaan AWS IoT Core melalui [penyediaan armada](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html) MQTT. APIs Permintaan ini mencakup permintaan penandatanganan sertifikat (CSR), yang akan ditandatangani untuk membuat sertifikat klien. 

**AWS penandatanganan sertifikat terkelola dalam penyediaan armada**  
AWS managed adalah pengaturan default untuk penandatanganan sertifikat dalam penyediaan armada. Dengan penandatanganan sertifikat AWS terkelola, AWS IoT Core akan menandatangani CSRs menggunakan sendiri CAs.

**Penandatanganan sertifikat yang dikelola sendiri dalam penyediaan armada**  
Self-managed adalah opsi lain untuk penandatanganan sertifikat dalam penyediaan armada. Dengan penandatanganan sertifikat yang dikelola sendiri, Anda membuat penyedia AWS IoT Core sertifikat untuk ditandatangani CSRs. Anda dapat menggunakan penandatanganan sertifikat yang dikelola sendiri untuk menandatangani CSRs dengan CA yang dihasilkan oleh AWS Private CA, CA tepercaya publik lainnya, atau Infrastruktur Kunci Publik (PKI) Anda sendiri.

**AWS IoT Core penyedia sertifikat**  
AWS IoT Core penyedia sertifikat (kependekan dari penyedia sertifikat) adalah sumber daya yang dikelola pelanggan yang digunakan untuk penandatanganan sertifikat yang dikelola sendiri dalam penyediaan armada.

### Diagram


Diagram berikut adalah ilustrasi yang disederhanakan tentang cara kerja penandatanganan sertifikat mandiri dalam penyediaan AWS IoT armada.

![\[AWS IoT Core penyedia sertifikat untuk penyediaan armada\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/provisioning-cert-provider.png)

+ Ketika perangkat IoT baru diproduksi atau diperkenalkan ke armada, diperlukan sertifikat klien untuk mengautentikasi dirinya sendiri. AWS IoT Core
+ Sebagai bagian dari proses penyediaan armada, perangkat membuat permintaan AWS IoT Core untuk sertifikat klien melalui [penyediaan armada](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html) MQTT. APIs Permintaan ini mencakup permintaan penandatanganan sertifikat (CSR).
+ AWS IoT Core memanggil penyedia sertifikat dan meneruskan CSR sebagai masukan ke penyedia.
+ Penyedia sertifikat mengambil CSR sebagai masukan dan mengeluarkan sertifikat klien.

  Untuk penandatanganan sertifikat AWS terkelola, AWS IoT Core tandatangani CSR menggunakan CA-nya sendiri dan mengeluarkan sertifikat klien.
+ Dengan sertifikat klien yang dikeluarkan, perangkat akan melanjutkan penyediaan armada dan membuat koneksi yang aman dengannya. AWS IoT Core

## Input fungsi Lambda penyedia sertifikat


AWS IoT Core mengirimkan objek berikut ke fungsi Lambda saat perangkat mendaftar dengannya. Nilai CSR dalam [format Privacy-Enhanced Mail (PEM)](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-format.html) yang disediakan dalam permintaan. `certificateSigningRequest` `CreateCertificateFromCsr` `principalId`Ini adalah ID dari prinsipal yang digunakan untuk terhubung AWS IoT Core saat membuat `CreateCertificateFromCsr` permintaan. `clientId`adalah ID klien yang disetel untuk koneksi MQTT.

```
{
	"certificateSigningRequest": "string",
	"principalId": "string",
	"clientId": "string"
}
```

## Nilai pengembalian fungsi Lambda penyedia sertifikat


Fungsi Lambda harus mengembalikan respons yang berisi nilai. `certificatePem` Berikut ini adalah contoh respon yang sukses. AWS IoT Core akan menggunakan nilai pengembalian (`certificatePem`) untuk membuat sertifikat.

```
{
	"certificatePem": "string"
}
```

Jika pendaftaran berhasil, `CreateCertificateFromCsr` akan mengembalikan yang sama `certificatePem` dalam `CreateCertificateFromCsr` tanggapan. Untuk informasi selengkapnya, lihat contoh payload respons dari. [CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr)

## Contoh fungsi Lambda


Sebelum membuat penyedia sertifikat, Anda harus membuat fungsi Lambda untuk menandatangani CSR. Berikut ini adalah contoh fungsi Lambda di Python. Fungsi ini memanggil AWS Private CA untuk menandatangani input CSR, menggunakan CA pribadi dan algoritma `SHA256WITHRSA` penandatanganan. Sertifikat klien yang dikembalikan akan berlaku selama satu tahun. Untuk informasi selengkapnya tentang AWS Private CA dan cara membuat CA pribadi, lihat [Apa itu CA AWS Pribadi?](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) dan [Membuat CA pribadi](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html).

```
import os
import time
import uuid
import boto3

def lambda_handler(event, context):
    ca_arn = os.environ['CA_ARN']
    csr = (event['certificateSigningRequest']).encode('utf-8')

    acmpca = boto3.client('acm-pca')
    cert_arn = acmpca.issue_certificate(
        CertificateAuthorityArn=ca_arn, 
        Csr=csr,
        Validity={"Type": "DAYS", "Value": 365}, 
        SigningAlgorithm='SHA256WITHRSA',
        IdempotencyToken=str(uuid.uuid4())
    )['CertificateArn']
    
    # Wait for certificate to be issued
    time.sleep(1)    
    cert_pem = acmpca.get_certificate(
        CertificateAuthorityArn=ca_arn,
        CertificateArn=cert_arn
    )['Certificate']
    
    return {
        'certificatePem': cert_pem
    }
```

**penting**  
Sertifikat yang dikembalikan oleh fungsi Lambda harus memiliki nama subjek dan kunci publik yang sama dengan Permintaan Penandatanganan Sertifikat (CSR).
Fungsi Lambda harus selesai berjalan dalam 5 detik.
Fungsi Lambda harus sama Akun AWS dan Wilayah sebagai sumber daya penyedia sertifikat.
Kepala AWS IoT layanan harus diberikan izin pemanggilan ke fungsi Lambda. Untuk menghindari [masalah deputi yang membingungkan](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html), kami sarankan Anda mengatur `sourceArn` dan `sourceAccount` untuk izin pemanggilan. Untuk informasi lebih lanjut, lihat [Pencegahan Deputi Bingung Lintas Layanan](https://docs.aws.amazon.com//iot/latest/developerguide/cross-service-confused-deputy-prevention.html).

Contoh kebijakan berbasis sumber daya berikut untuk Lambda memberikan AWS IoT izin untuk [menjalankan fungsi Lambda](https://docs.aws.amazon.com//lambda/latest/dg/access-control-resource-based.html):

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Id": "InvokePermission",
	"Statement": [
		{
			"Sid": "LambdaAllowIotProvider",
			"Effect": "Allow",
			"Principal": {
				"Service": "iot.amazonaws.com"
			},
			"Action": "lambda:InvokeFunction",
			"Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
			"Condition": {
				"StringEquals": {
					"AWS:SourceAccount": "123456789012"
				},
				"ArnLike": {
				"AWS:SourceArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider/my-certificate-provider"
				}
			}
		}
	]
}
```

## Penandatanganan sertifikat yang dikelola sendiri untuk penyediaan armada


Anda dapat memilih penandatanganan sertifikat yang dikelola sendiri untuk penyediaan armada menggunakan atau. AWS CLI Konsol Manajemen AWS

### AWS CLI


Untuk memilih penandatanganan sertifikat yang dikelola sendiri, Anda harus membuat penyedia AWS IoT Core sertifikat untuk CSRs masuk penyediaan armada. AWS IoT Core memanggil penyedia sertifikat, yang mengambil CSR sebagai input dan mengembalikan sertifikat klien. Untuk membuat penyedia sertifikat, gunakan operasi `CreateCertificateProvider` API atau perintah `create-certificate-provider` CLI.

**catatan**  
Setelah Anda membuat penyedia sertifikat, perilaku [`CreateCertificateFromCsr`API untuk penyediaan armada](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) akan berubah sehingga semua panggilan ke `CreateCertificateFromCsr` akan memanggil penyedia sertifikat untuk membuat sertifikat. Diperlukan beberapa menit agar perilaku ini berubah setelah penyedia sertifikat dibuat.

```
aws iot create-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \
                --accountDefaultForOperations CreateCertificateFromCsr
```

Berikut ini menunjukkan contoh output untuk perintah ini:

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Untuk informasi selengkapnya, lihat `[CreateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` dari *Referensi *AWS IoT*API*.

### Konsol Manajemen AWS


Untuk memilih penandatanganan sertifikat yang dikelola sendiri menggunakan Konsol Manajemen AWS, ikuti langkah-langkahnya:

1. Pergi ke [AWS IoT konsol](https://console.aws.amazon.com//iot/home).

1. Di navigasi kiri, di bawah **Keamanan**, pilih **Penandatanganan sertifikat**.

1. Pada halaman **Penandatanganan sertifikat**, di bawah **Detail penandatanganan sertifikat**, pilih **Edit metode penandatanganan sertifikat**.

1. Pada halaman **Edit metode penandatanganan sertifikat, di bawah Metode** **penandatanganan sertifikat**, pilih **Dikelola sendiri**.

1. Di bagian **Pengaturan yang dikelola sendiri**, masukkan nama untuk penyedia sertifikat, lalu buat atau pilih fungsi Lambda.

1. Pilih **Perbarui penandatanganan sertifikat**.

## AWS CLI perintah untuk penyedia sertifikat


### Buat penyedia sertifikat


Untuk membuat penyedia sertifikat, gunakan operasi `CreateCertificateProvider` API atau perintah `create-certificate-provider` CLI. 

**catatan**  
Setelah Anda membuat penyedia sertifikat, perilaku [`CreateCertificateFromCsr`API untuk penyediaan armada](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) akan berubah sehingga semua panggilan ke `CreateCertificateFromCsr` akan memanggil penyedia sertifikat untuk membuat sertifikat. Diperlukan beberapa menit agar perilaku ini berubah setelah penyedia sertifikat dibuat.

```
aws iot create-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \
                --accountDefaultForOperations CreateCertificateFromCsr
```

Berikut ini menunjukkan contoh output untuk perintah ini:

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Untuk informasi selengkapnya, lihat `[CreateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` dari *Referensi *AWS IoT*API*.

### Perbarui penyedia sertifikat


Untuk memperbarui penyedia sertifikat, gunakan operasi `UpdateCertificateProvider` API atau perintah `update-certificate-provider` CLI.

```
aws iot update-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-2 \
                --accountDefaultForOperations CreateCertificateFromCsr
```

Berikut ini menunjukkan contoh output untuk perintah ini:

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Untuk informasi selengkapnya, lihat `[UpdateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateCertificateProvider.html)` dari *Referensi *AWS IoT*API*.

### Jelaskan penyedia sertifikat


Untuk mendeskripsikan penyedia sertifikat, gunakan operasi `DescribeCertificateProvider` API atau perintah `describe-certificate-provider` CLI.

```
aws iot describe-certificate-provider --certificateProviderName my-certificate-provider
```

Berikut ini menunjukkan contoh output untuk perintah ini:

```
{
	"certificateProviderName": "my-certificate-provider",
	"lambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
	"accountDefaultForOperations": [
		"CreateCertificateFromCsr"
	],
	"creationDate": "2022-11-03T00:15",
	"lastModifiedDate": "2022-11-18T00:15"
}
```

Untuk informasi selengkapnya, lihat `[DescribeCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeCertificateProvider.html)` dari *Referensi *AWS IoT*API*.

### Hapus penyedia sertifikat


Untuk menghapus penyedia sertifikat, gunakan operasi `DeleteCertificateProvider` API atau perintah `delete-certificate-provider` CLI. Jika Anda menghapus sumber daya penyedia sertifikat, perilaku `CreateCertificateFromCsr` akan dilanjutkan, dan AWS IoT akan membuat sertifikat yang ditandatangani oleh AWS IoT dari CSR.

```
aws iot delete-certificate-provider --certificateProviderName my-certificate-provider
```

Perintah ini tidak menghasilkan output apa pun. 

Untuk informasi selengkapnya, lihat `[DeleteCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DeleteCertificateProvider.html)` dari *Referensi *AWS IoT*API*.

### Daftar penyedia sertifikat


Untuk membuat daftar penyedia sertifikat di dalam Anda Akun AWS, gunakan operasi `ListCertificateProviders` API atau perintah `list-certificate-providers` CLI.

```
aws iot list-certificate-providers
```

Berikut ini menunjukkan contoh output untuk perintah ini:

```
{
	"certificateProviders": [
		{
			"certificateProviderName": "my-certificate-provider",
			"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
		}
	]
}
```

Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html](https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html)dari *Referensi *AWS IoT*API*.

# Membuat kebijakan dan peran IAM untuk pengguna yang menginstal perangkat


**catatan**  
Prosedur ini hanya untuk digunakan jika diarahkan oleh AWS IoT konsol.  
Untuk membuka halaman ini dari konsol, buka [buat templat penyediaan baru](https://console.aws.amazon.com//iot/home#/provisioningtemplate/create/provisioningmethods/trustedUser).

## Mengapa ini tidak bisa dilakukan di AWS IoT konsol?


Untuk pengalaman yang paling aman, tindakan IAM dilakukan di konsol IAM. Prosedur di bagian ini memandu Anda melalui langkah-langkah untuk membuat peran dan kebijakan IAM yang diperlukan untuk menggunakan templat penyediaan.

## Membuat kebijakan IAM untuk pengguna yang akan menginstal perangkat


Prosedur ini menjelaskan cara membuat kebijakan IAM yang mengizinkan pengguna untuk menginstal perangkat menggunakan templat penyediaan.

Saat melakukan prosedur ini, Anda akan beralih antara konsol IAM dan AWS IoT konsol. Sebaiknya buka kedua konsol secara bersamaan saat Anda menyelesaikan prosedur ini.

**Untuk membuat kebijakan IAM bagi pengguna yang akan menginstal perangkat**

1. Buka [hub Kebijakan di konsol IAM](https://console.aws.amazon.com//iamv2/home#/policies).

1. Pilih **Buat Kebijakan**.

1. Di halaman **Buat kebijakan**, pilih tab **JSON**.

1. Beralih ke halaman di AWS IoT konsol tempat Anda memilih **Konfigurasi kebijakan dan peran pengguna**.

1. **Dalam **kebijakan penyediaan sampel**, pilih Salin.**

1. Beralih kembali ke konsol IAM.

1. Di editor **JSON**, tempel kebijakan yang Anda salin dari konsol. AWS IoT Kebijakan ini khusus untuk template yang Anda buat di AWS IoT konsol.

1. Untuk melanjutkan, pilih **Selanjutnya: Tanda**.

1. Pada halaman **Tambah tag (Opsional)**, pilih **Tambah tag** untuk setiap tag yang ingin Anda tambahkan ke kebijakan ini. Anda dapat melewati langkah ini jika Anda tidak memiliki tag untuk ditambahkan.

1. Untuk melanjutkan, pilih **Selanjutnya: Tinjauan**.

1. Pada halaman **Kebijakan Tinjauan**, lakukan hal berikut:

   1. Untuk **Nama\$1**, masukkan nama untuk kebijakan yang akan membantu Anda mengingat tujuan kebijakan tersebut.

      Perhatikan nama yang Anda berikan pada kebijakan ini karena Anda akan menggunakannya dalam prosedur berikutnya.

   1. Anda dapat memilih untuk memasukkan deskripsi opsional untuk kebijakan yang Anda buat.

   1. Tinjau sisa kebijakan ini dan tag-nya.

1. Untuk menyelesaikan pembuatan kebijakan baru, pilih **Buat kebijakan**.

Setelah membuat kebijakan baru, lanjutkan [Membuat peran IAM untuk pengguna yang akan menginstal perangkat](#provision-create-role-role) untuk membuat entri peran pengguna yang akan dilampirkan kebijakan ini.

## Membuat peran IAM untuk pengguna yang akan menginstal perangkat


Langkah-langkah ini menjelaskan cara membuat peran IAM yang mengautentikasi pengguna yang akan menginstal perangkat menggunakan templat penyediaan.

**Untuk membuat kebijakan IAM bagi pengguna yang akan menginstal perangkat**

1. Buka [hub Peran di konsol IAM](https://console.aws.amazon.com//iamv2/home#/roles).

1. Pilih **Buat peran**.

1. Di **Pilih entitas tepercaya**, pilih jenis entitas tepercaya yang ingin Anda berikan akses ke templat yang Anda buat.

1. Pilih atau masukkan identifikasi entitas tepercaya yang ingin Anda berikan akses, lalu pilih **Berikutnya**.

1. Di halaman **Tambahkan izin**, di **Kebijakan izin**, di kotak pencarian, masukkan nama kebijakan yang Anda buat di [prosedur sebelumnya](#provision-create-role-policy).

1. Untuk daftar kebijakan, pilih kebijakan yang Anda buat di prosedur sebelumnya, lalu pilih **Berikutnya**.

1. Di bagian **Nama, tinjau, dan buat**, lakukan hal berikut:

   1. Untuk **nama Peran**, masukkan nama peran yang akan membantu Anda mengingat tujuan peran tersebut.

   1. Untuk **Deskripsi**, Anda dapat memilih untuk memasukkan deskripsi opsional Peran. Ini tidak diperlukan untuk melanjutkan.

   1. Tinjau nilai-nilai di **Langkah 1** dan **Langkah 2**.

   1. Untuk **Tambahkan tag (Opsional)**, Anda dapat memilih untuk menambahkan tag ke peran ini. Ini tidak diperlukan untuk melanjutkan.

   1. Verifikasi informasi di halaman ini lengkap dan benar, lalu pilih **Buat peran**. 

Setelah Anda membuat peran baru, kembali ke AWS IoT konsol untuk terus membuat template.

## Memperbarui kebijakan yang ada untuk mengotorisasi templat baru


Langkah-langkah berikut menjelaskan cara menambahkan templat baru ke kebijakan IAM yang mengizinkan pengguna untuk menginstal perangkat menggunakan templat penyediaan.

**Untuk menambahkan template baru ke kebijakan IAM yang ada**

1. Buka [hub Kebijakan di konsol IAM](https://console.aws.amazon.com//iamv2/home#/policies).

1. Di kotak pencarian, masukkan nama kebijakan yang akan diperbarui.

1. Untuk daftar di bawah kotak pencarian, temukan kebijakan yang ingin Anda perbarui dan pilih nama kebijakan.

1. Untuk **ringkasan Kebijakan**, pilih tab **JSON**, jika panel tersebut belum terlihat.

1. Untuk mengubah dokumen kebijakan, pilih **Edit kebijakan**.

1. Di editor, pilih tab **JSON**, jika panel itu belum terlihat.

1. Dalam dokumen kebijakan, temukan pernyataan kebijakan yang berisi `iot:CreateProvisioningClaim` tindakan.

   Jika dokumen kebijakan tidak berisi pernyataan kebijakan dengan `iot:CreateProvisioningClaim` tindakan, salin cuplikan pernyataan berikut dan tempel sebagai entri tambahan dalam `Statement` larik dalam dokumen kebijakan. 
**catatan**  
Cuplikan ini harus ditempatkan sebelum `]` karakter penutup dalam array. `Statement` Anda mungkin perlu menambahkan koma sebelum atau sesudah cuplikan ini untuk memperbaiki kesalahan sintaks apa pun.

   ```
   {
       "Effect": "Allow",
       "Action": [
           "iot:CreateProvisioningClaim"
       ],
       "Resource": [
           "--PUT YOUR NEW TEMPLATE ARN HERE--"
       ]
   }
   ```

1. Beralih ke halaman di AWS IoT konsol tempat Anda memilih **Ubah izin peran pengguna**.

1. **Temukan **ARN Sumber Daya** dari templat dan pilih Salin.**

1. Beralih kembali ke konsol IAM.

1. Rekatkan Nama Sumber Daya Amazon (ARN) yang disalin di bagian atas daftar ARNs templat dalam array sehingga `Statement` ini adalah entri pertama.

   Jika ini adalah satu-satunya ARN dalam array, hapus koma di akhir nilai yang baru saja Anda tempelkan.

1. Tinjau pernyataan kebijakan yang diperbarui dan perbaiki kesalahan yang ditunjukkan oleh editor.

1. Untuk menyimpan dokumen kebijakan yang diperbarui, pilih **Kebijakan tinjauan**.

1. Tinjau kebijakan, lalu pilih **Simpan perubahan**.

1. Kembali ke AWS IoT konsol.

# Penyediaan perangkat MQTT API
<a name="provision-mqtt-api"></a>

Layanan Penyediaan Armada mendukung operasi API MQTT berikut:
+ `CreateCertificateFromCsr`
+ `CreateKeysAndCertificate`
+ `RegisterThing`

API ini mendukung buffer respons dalam format Concise Binary Object Representation (CBOR) dan JavaScript Object Notation (JSON), tergantung pada topiknya. *payload-format* Untuk kejelasan, contoh respons dan permintaan di bagian ini ditampilkan dalam format JSON.


| *payload-format* | Jenis data format respons | 
| --- | --- | 
| cbor | Representasi Objek Biner Ringkas (CBOR) | 
| json | JavaScript Notasi Objek (JSON) | 

**penting**  
Sebelum memublikasikan topik pesan permintaan, berlangganan topik respons untuk menerima respons. Pesan yang digunakan oleh API ini menggunakan protokol publish/subscribe MQTT untuk menyediakan interaksi permintaan dan respons.   
Jika Anda tidak berlangganan topik respons *sebelum* memublikasikan permintaan, Anda mungkin tidak menerima hasil permintaan tersebut.  
IoT Core Fleet Provisioning mengembalikan perangkat yang menyediakan hasil API MQTT melalui koneksi MQTT yang sama yang digunakan untuk mempublikasikan permintaan API.

## CreateCertificateFromCsr


Membuat sertifikat dari permintaan penandatanganan sertifikat (CSR). AWS IoT menyediakan sertifikat klien yang ditandatangani oleh otoritas sertifikat Amazon Root (CA). Sertifikat baru memiliki `PENDING_ACTIVATION` status. Saat Anda menelepon `RegisterThing` untuk menyediakan sesuatu dengan sertifikat ini, status sertifikat berubah menjadi `ACTIVE` atau `INACTIVE` seperti yang dijelaskan dalam templat.

Untuk informasi selengkapnya tentang membuat sertifikat klien menggunakan sertifikat Otoritas Sertifikat Anda dan permintaan penandatanganan sertifikat, lihat[Buat sertifikat klien menggunakan sertifikat CA Anda](create-device-cert.md).

**catatan**  
Untuk keamanan, yang `certificateOwnershipToken` dikembalikan `CreateCertificateFromCsr` kedaluwarsa setelah satu jam. `RegisterThing`harus dipanggil sebelum `certificateOwnershipToken` kedaluwarsa. Jika sertifikat yang dibuat oleh `CreateCertificateFromCsr` belum diaktifkan dan dilampirkan pada kebijakan atau sesuatu pada saat token kedaluwarsa, sertifikat akan dihapus. Jika token kedaluwarsa, perangkat dapat menelepon `CreateCertificateFromCsr` untuk menghasilkan sertifikat baru.

### CreateCertificateFromCsr permintaan


Publikasikan pesan dengan `$aws/certificates/create-from-csr/payload-format` topik.

`payload-format`  
Format payload pesan sebagai `cbor` atau`json`.

#### CreateCertificateFromCsr minta muatan


```
{
    "certificateSigningRequest": "string"
}
```

`certificateSigningRequest`  
CSR, dalam format PEM.

### CreateCertificateFromCsr respon


Berlangganan`$aws/certificates/create-from-csr/payload-format/accepted`.

`payload-format`  
Format payload pesan sebagai `cbor` atau`json`.

#### CreateCertificateFromCsr muatan respons


```
{
    "certificateOwnershipToken": "string",
    "certificateId": "string",
    "certificatePem": "string"
}
```

`certificateOwnershipToken`  
Token untuk membuktikan kepemilikan sertifikat selama penyediaan. 

`certificateId`  
ID sertifikat. Operasi manajemen sertifikat hanya mengambil CertificateID. 

`certificatePem`  
Data sertifikat, dalam format PEM.

### CreateCertificateFromCsr kesalahan


Untuk menerima tanggapan kesalahan, berlangganan`$aws/certificates/create-from-csr/payload-format/rejected`.

`payload-format`  
Format payload pesan sebagai `cbor` atau`json`.

#### CreateCertificateFromCsr kesalahan muatan


```
{
    "statusCode": int,
    "errorCode": "string",
    "errorMessage": "string"
}
```

`statusCode`  
Kode status.

`errorCode`  
Kode kesalahan.

`errorMessage`  
Pesan kesalahan.

## CreateKeysAndCertificate


Membuat kunci baru dan sertifikat. AWS IoT menyediakan sertifikat klien yang ditandatangani oleh otoritas sertifikat Amazon Root (CA). Sertifikat baru memiliki `PENDING_ACTIVATION` status. Saat Anda menelepon `RegisterThing` untuk menyediakan sesuatu dengan sertifikat ini, status sertifikat berubah menjadi `ACTIVE` atau `INACTIVE` seperti yang dijelaskan dalam templat.

**catatan**  
Untuk keamanan, yang `certificateOwnershipToken` dikembalikan `CreateKeysAndCertificate` kedaluwarsa setelah satu jam. `RegisterThing`harus dipanggil sebelum `certificateOwnershipToken` kedaluwarsa. Jika sertifikat yang dibuat oleh `CreateKeysAndCertificate` belum diaktifkan dan dilampirkan pada kebijakan atau sesuatu pada saat token kedaluwarsa, sertifikat akan dihapus. Jika token kedaluwarsa, perangkat dapat menelepon `CreateKeysAndCertificate` untuk menghasilkan sertifikat baru.

### CreateKeysAndCertificate permintaan


Publikasikan pesan `$aws/certificates/create/payload-format` dengan muatan pesan kosong.

`payload-format`  
Format payload pesan sebagai `cbor` atau`json`.

### CreateKeysAndCertificate respon


Berlangganan`$aws/certificates/create/payload-format/accepted`.

`payload-format`  
Format payload pesan sebagai `cbor` atau`json`.

#### CreateKeysAndCertificate respon


```
{
    "certificateId": "string",
    "certificatePem": "string",
    "privateKey": "string",
    "certificateOwnershipToken": "string"
}
```

`certificateId`  
ID sertifikat.

`certificatePem`  
Data sertifikat, dalam format PEM.

`privateKey`  
Kunci privat.

`certificateOwnershipToken`  
Token untuk membuktikan kepemilikan sertifikat selama penyediaan.

### CreateKeysAndCertificate kesalahan


Untuk menerima tanggapan kesalahan, berlangganan`$aws/certificates/create/payload-format/rejected`.

`payload-format`  
Format payload pesan sebagai `cbor` atau`json`.

#### CreateKeysAndCertificate kesalahan muatan


```
{
    "statusCode": int,
    "errorCode": "string",
    "errorMessage": "string"
}
```

`statusCode`  
Kode status.

`errorCode`  
Kode kesalahan.

`errorMessage`  
Pesan kesalahan.

## RegisterThing


Ketentuan sesuatu menggunakan template yang telah ditentukan sebelumnya.

### RegisterThing permintaan


Publikasikan pesan di`$aws/provisioning-templates/templateName/provision/payload-format`.

`payload-format`  
Format payload pesan sebagai `cbor` atau`json`.

`templateName`  
Nama template penyediaan.

#### RegisterThing minta muatan


```
{
    "certificateOwnershipToken": "string",
    "parameters": {
        "string": "string",
        ...
    }
}
```

`certificateOwnershipToken`  
Token untuk membuktikan kepemilikan sertifikat. AWS IoT menghasilkan token saat Anda membuat sertifikat melalui MQTT.

`parameters`  
Tidak wajib. Pasangan nilai kunci dari perangkat yang digunakan oleh [kait pra-penyediaan untuk mengevaluasi permintaan](pre-provisioning-hook.md) pendaftaran.

### RegisterThing respon


Berlangganan`$aws/provisioning-templates/templateName/provision/payload-format/accepted`.

`payload-format`  
Format payload pesan sebagai `cbor` atau`json`.

`templateName`  
Nama template penyediaan.

#### RegisterThing muatan respons


```
{
    "deviceConfiguration": {
        "string": "string",
        ...
    },
    "thingName": "string"
}
```

`deviceConfiguration`  
Konfigurasi perangkat didefinisikan dalam template.

`thingName`  
Nama hal IoT yang dibuat selama penyediaan.

### RegisterThing respon kesalahan


Untuk menerima tanggapan kesalahan, berlangganan`$aws/provisioning-templates/templateName/provision/payload-format/rejected`.

`payload-format`  
Format payload pesan sebagai `cbor` atau`json`.

`templateName`  
Nama template penyediaan.

#### RegisterThing muatan respons kesalahan


```
{
    "statusCode": int,
    "errorCode": "string",
    "errorMessage": "string"
}
```

`statusCode`  
Kode status.

`errorCode`  
Kode kesalahan.

`errorMessage`  
Pesan kesalahan.