

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

# Keamanan di AWS IoT
<a name="security"></a>

Keamanan cloud di AWS adalah prioritas tertinggi. Sebagai AWS pelanggan, Anda mendapat manfaat dari pusat data dan arsitektur jaringan yang dibangun untuk memenuhi persyaratan organisasi yang paling sensitif terhadap keamanan.

Keamanan adalah tanggung jawab bersama antara Anda AWS dan Anda. [Model tanggung jawab bersama](https://aws.amazon.com/compliance/shared-responsibility-model/) menggambarkan hal ini sebagai keamanan *dari* cloud dan keamanan *di* cloud:
+ **Keamanan cloud** — AWS bertanggung jawab untuk melindungi infrastruktur yang menjalankan AWS layanan di AWS Cloud. AWS juga memberi Anda layanan yang dapat Anda gunakan dengan aman. Auditor pihak ketiga secara berkala menguji dan memverifikasi efektivitas keamanan kami sebagai bagian dari [Program kepatuhan AWS](https://aws.amazon.com/compliance/programs/). Untuk mempelajari tentang program kepatuhan yang berlaku AWS IoT, lihat [AWS Layanan dalam Lingkup berdasarkan Program Kepatuhan](https://aws.amazon.com/compliance/services-in-scope/).
+ **Keamanan di cloud** — Tanggung jawab Anda ditentukan oleh AWS layanan yang Anda gunakan. Anda juga bertanggung jawab atas faktor lain, termasuk sensitivitas data Anda, persyaratan perusahaan Anda, serta undang-undang dan peraturan yang berlaku. 

Dokumentasi ini membantu Anda memahami cara menerapkan model tanggung jawab bersama saat menggunakan AWS IoT. Topik berikut menunjukkan cara mengonfigurasi AWS IoT untuk memenuhi tujuan keamanan dan kepatuhan Anda. Anda juga belajar cara menggunakan AWS layanan lain yang membantu Anda memantau dan mengamankan AWS IoT sumber daya Anda. 

**Topics**
+ [AWS IoT keamanan](iot-security.md)
+ [Autentikasi](authentication.md)
+ [Otorisasi](iot-authorization.md)
+ [Perlindungan data di AWS IoT Core](data-protection.md)
+ [Identitas dan manajemen akses untuk AWS IoT](security-iam.md)
+ [Pembuatan Log dan Pemantauan](security-logging.md)
+ [Validasi kepatuhan untuk Core AWS IoT](compliance.md)
+ [Ketahanan dalam IoT Core AWS](disaster-recovery-resiliency.md)
+ [Menggunakan AWS IoT Core dengan antarmuka VPC endpoint](IoTCore-VPC.md)
+ [Keamanan infrastruktur di AWS IoT](infrastructure-security.md)
+ [Pemantauan keamanan armada produksi atau perangkat dengan Core AWS IoT](security-monitoring.md)
+ [Praktik terbaik keamanan di AWS IoT Core](security-best-practices.md)
+ [AWS pelatihan dan sertifikasi](#iot-security-training)

# AWS IoT keamanan
<a name="iot-security"></a>

Setiap perangkat atau klien yang terhubung harus memiliki kredensi untuk berinteraksi AWS IoT. Semua lalu lintas ke dan dari AWS IoT dikirim dengan aman melalui Transport Layer Security (TLS). AWS Mekanisme keamanan cloud melindungi data saat bergerak antara AWS IoT dan AWS layanan lainnya.

![\[AWS IoT alur kerja keamanan termasuk kredensyal untuk berinteraksi AWS IoT, Transport Layer Security untuk mengamankan koneksi, dan mekanisme keamanan AWS Cloud untuk melindungi data.\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/thunderball-overview.png)

+ Anda bertanggung jawab untuk mengelola kredensyal perangkat (sertifikat X.509, kredensyal AWS , identitas Amazon Cognito, identitas federasi, atau token otentikasi kustom) dan kebijakan di. AWS IoT Anda juga bertanggung jawab untuk menetapkan identitas unik untuk setiap perangkat dan mengelola izin untuk setiap perangkat atau grup perangkat.
+ Perangkat Anda terhubung AWS IoT menggunakan sertifikat X.509 atau identitas Amazon Cognito melalui koneksi TLS yang aman. Selama penelitian dan pengembangan, dan untuk beberapa aplikasi yang melakukan panggilan atau penggunaan API WebSockets, Anda juga dapat mengautentikasi menggunakan pengguna dan grup IAM atau token otentikasi khusus. Untuk informasi selengkapnya, lihat [Pengguna IAM, grup IAM, dan IAM role](iam-users-groups-roles.md).
+ Saat menggunakan AWS IoT otentikasi, broker pesan bertanggung jawab untuk mengautentikasi perangkat Anda, menyerap data perangkat dengan aman, dan memberikan atau menolak izin akses yang Anda tentukan untuk perangkat Anda menggunakan kebijakan. AWS IoT 
+ Saat menggunakan autentikasi kustom, otorisasi khusus bertanggung jawab untuk mengautentikasi perangkat Anda dan memberikan atau menolak izin akses yang Anda tentukan untuk perangkat yang Anda gunakan atau kebijakan IAM. AWS IoT 
+ Mesin AWS IoT aturan meneruskan data perangkat ke perangkat lain atau AWS layanan lain sesuai dengan aturan yang Anda tetapkan. Ini digunakan AWS Identity and Access Management untuk mentransfer data dengan aman ke tujuan akhirnya. Untuk informasi selengkapnya, lihat [Identitas dan manajemen akses untuk AWS IoT](security-iam.md).

# Autentikasi
<a name="authentication"></a>

Otentikasi adalah mekanisme di mana Anda memverifikasi identitas klien atau server. Otentikasi server adalah proses di mana perangkat atau klien lain memastikan mereka berkomunikasi dengan titik akhir yang sebenarnya AWS IoT . Otentikasi klien adalah proses di mana perangkat atau klien lain mengautentikasi diri mereka sendiri. AWS IoT

## Ikhtisar Sertifikat X.509
<a name="x509-certificate-overview"></a>

Sertifikat X.509 adalah sertifikat digital yang menggunakan [standar infrastruktur kunci publik X.509 untuk mengaitkan kunci](https://en.wikipedia.org/wiki/X.509) publik dengan identitas yang terkandung dalam sertifikat. Sertifikat X.509 dikeluarkan oleh entitas tepercaya yang disebut otoritas sertifikasi (CA). CA mempertahankan satu atau lebih sertifikat khusus yang disebut sertifikat CA yang digunakannya untuk mengeluarkan sertifikat X.509. Hanya otoritas sertifikasi yang memiliki akses ke sertifikat CA. Rantai sertifikat X.509 digunakan baik untuk otentikasi server oleh klien dan otentikasi klien oleh server.

# Otentikasi server
<a name="server-authentication"></a>

Ketika perangkat Anda atau klien lain mencoba untuk terhubung AWS IoT Core, AWS IoT Core server akan mengirimkan sertifikat X.509 yang digunakan perangkat Anda untuk mengautentikasi server. Otentikasi berlangsung di lapisan TLS melalui validasi rantai sertifikat [X.509](x509-client-certs.md). Ini adalah metode yang sama yang digunakan oleh browser Anda ketika Anda mengunjungi URL HTTPS. Jika Anda ingin menggunakan sertifikat dari otoritas sertifikat Anda sendiri, lihat[Kelola sertifikat CA Anda](manage-your-CA-certs.md).

Saat perangkat Anda atau klien lain membuat koneksi TLS ke AWS IoT Core titik akhir, AWS IoT Core tunjukkan rantai sertifikat yang digunakan perangkat untuk memverifikasi bahwa mereka berkomunikasi AWS IoT Core dan bukan meniru server lain. AWS IoT Core Rantai yang disajikan tergantung pada kombinasi dari jenis titik akhir yang terhubung ke perangkat dan [cipher suite](transport-security.md) yang klien dan AWS IoT Core dinegosiasikan selama jabat tangan TLS.

## Jenis titik akhir
<a name="endpoint-types"></a>

AWS IoT Core mendukung`iot:Data-ATS`. `iot:Data-ATS`endpoint menyajikan sertifikat server yang ditandatangani oleh [Amazon Trust Services](https://www.amazontrust.com/repository/) CA.

Sertifikat yang diberikan oleh titik akhir ATS ditandatangani silang oleh Starfield. Beberapa implementasi klien TLS memerlukan validasi akar kepercayaan dan mengharuskan sertifikat Starfield CA dipasang di toko kepercayaan klien.

**Awas**  
Menggunakan metode penyematan sertifikat yang melakukan hash seluruh sertifikat (termasuk nama penerbit, dan sebagainya) tidak disarankan karena ini akan menyebabkan verifikasi sertifikat gagal karena sertifikat ATS yang kami berikan ditandatangani silang oleh Starfield dan memiliki nama penerbit yang berbeda.

**penting**  
Gunakan `iot:Data-ATS` titik akhir. Sertifikat Symantec dan Verisign telah usang dan tidak lagi didukung oleh. AWS IoT Core

Anda dapat menggunakan `describe-endpoint` perintah untuk membuat titik akhir ATS Anda.

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

`describe-endpoint`Perintah mengembalikan endpoint dalam format berikut.

```
account-specific-prefix.iot.your-region.amazonaws.com
```

**catatan**  
Pertama kali `describe-endpoint` dipanggil, titik akhir dibuat. Semua panggilan berikutnya untuk `describe-endpoint` mengembalikan titik akhir yang sama.

**catatan**  
Untuk melihat `iot:Data-ATS` titik akhir Anda di AWS IoT Core konsol, pilih **Pengaturan**. Konsol hanya menampilkan `iot:Data-ATS` titik akhir.

### Membuat `IotDataPlaneClient` dengan AWS SDK for Java
<a name="java-client"></a>

Untuk membuat `IotDataPlaneClient` yang menggunakan `iot:Data-ATS` endpoint, Anda harus melakukan hal berikut. 
+ Buat `iot:Data-ATS` titik akhir dengan menggunakan [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html)API.
+ Tentukan titik akhir itu saat Anda membuat. `IotDataPlaneClient`

Contoh berikut melakukan kedua operasi ini.

```
public void setup() throws Exception {
        IotClient client = IotClient.builder().credentialsProvider(CREDENTIALS_PROVIDER_CHAIN).region(Region.US_EAST_1).build();
        String endpoint = client.describeEndpoint(r -> r.endpointType("iot:Data-ATS")).endpointAddress();
        iot = IotDataPlaneClient.builder()
                                .credentialsProvider(CREDENTIALS_PROVIDER_CHAIN)
                                .endpointOverride(URI.create("https://" + endpoint))
                                .region(Region.US_EAST_1)
                                .build();
}
```

## Sertifikat CA untuk otentikasi server
<a name="server-authentication-certs"></a>

Bergantung pada jenis titik akhir data yang Anda gunakan dan rangkaian sandi mana yang telah Anda negosiasikan, sertifikat otentikasi AWS IoT Core server ditandatangani oleh salah satu sertifikat CA root berikut:

**Titik Akhir Amazon Trust Services (lebih disukai)**

**catatan**  
Anda mungkin perlu mengklik kanan tautan ini dan memilih **Simpan tautan sebagai...** untuk menyimpan sertifikat ini sebagai file.
+ Kunci RSA 2048 bit:. [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem)
+ Kunci RSA 4096 bit:. Amazon Root CA 2 Terpesan untuk digunakan di masa mendatang.
+ Kunci ECC 256 bit: [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem).
+ Kunci ECC 384 bit:. Amazon Root CA 4 Terpesan untuk digunakan di masa mendatang.

Semua sertifikat ini ditandatangani silang oleh [Starfield Root CA](https://www.amazontrust.com/repository/SFSRootCAG2.pem) Certificate. Semua AWS IoT Core wilayah baru, dimulai dengan peluncuran 9 Mei 2018 AWS IoT Core di Wilayah Asia Pasifik (Mumbai), hanya melayani sertifikat ATS.

**VeriSign Titik akhir (warisan)**
+ Kunci RSA 2048 bit: Sertifikat CA root [G5 Primer Publik VeriSign Kelas 3](https://www.digicert.com/kb/digicert-root-certificates.htm)

## Pedoman otentikasi server
<a name="server-authentication-guidelines"></a>

Ada banyak variabel yang dapat mempengaruhi kemampuan perangkat untuk memvalidasi sertifikat otentikasi AWS IoT Core server. Misalnya, perangkat mungkin terlalu dibatasi memori untuk menyimpan semua sertifikat CA root yang mungkin, atau perangkat dapat menerapkan metode validasi sertifikat non-standar. Untuk alasan ini kami sarankan mengikuti pedoman ini:
+ Kami menyarankan Anda menggunakan titik akhir ATS dan menginstal semua Amazon Root CA sertifikat yang didukung.
+ Jika Anda tidak dapat menyimpan semua sertifikat ini di perangkat Anda dan jika perangkat Anda tidak menggunakan validasi berbasis ECC, Anda dapat menghilangkan sertifikat dan ECC. [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem) Jika perangkat Anda tidak menerapkan validasi sertifikat berbasis RSA, Anda dapat menghilangkan sertifikat dan RSA. [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem) Anda mungkin perlu mengklik kanan tautan ini dan memilih **Simpan tautan sebagai...** untuk menyimpan sertifikat ini sebagai file.
+ Jika Anda mengalami masalah validasi sertifikat server saat menyambung ke titik akhir ATS, coba tambahkan sertifikat Amazon Root CA yang ditandatangani silang ke toko kepercayaan Anda. Anda mungkin perlu mengklik kanan tautan ini dan memilih **Simpan tautan sebagai...** untuk menyimpan sertifikat ini sebagai file.
  + [Tanda tangan silang Amazon Root CA 1](https://www.amazontrust.com/repository/G2-RootCA1.pem)
  + [Tanda tangan silang Amazon Root CA 2](https://www.amazontrust.com/repository/G2-RootCA2.pem) - Dicadangkan untuk penggunaan di masa mendatang.
  + [Tanda tangan silang Amazon Root CA 3](https://www.amazontrust.com/repository/G2-RootCA3.pem)
  + [Tanda tangan silang Amazon Root CA 4 - Dicadangkan untuk penggunaan di masa mendatang.](https://www.amazontrust.com/repository/G2-RootCA4.pem)
+ Jika Anda mengalami masalah validasi sertifikat server, perangkat Anda mungkin perlu mempercayai root CA secara eksplisit. Coba tambahkan [https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem)ke toko kepercayaan Anda.
+ Jika Anda masih mengalami masalah setelah menjalankan langkah-langkah di atas, silakan hubungi [Dukungan AWS Pengembang](https://aws.amazon.com/premiumsupport/plans/developers/). 

**catatan**  
Sertifikat CA memiliki tanggal kedaluwarsa setelah itu mereka tidak dapat digunakan untuk memvalidasi sertifikat server. Sertifikat CA mungkin harus diganti sebelum tanggal kedaluwarsa. Pastikan Anda dapat memperbarui sertifikat root CA di semua perangkat atau klien Anda untuk membantu memastikan konektivitas yang berkelanjutan dan mengikuti perkembangan praktik terbaik keamanan.

**catatan**  
Saat menghubungkan ke AWS IoT Core dalam kode perangkat Anda, teruskan sertifikat ke API yang Anda gunakan untuk menyambungkan. API yang Anda gunakan akan bervariasi menurut SDK. Untuk informasi selengkapnya, lihat [AWS IoT Core Perangkat SDKs](iot-sdks.md).

# Autentikasi Klien
<a name="client-authentication"></a>

AWS IoT mendukung tiga jenis prinsip identitas untuk otentikasi perangkat atau klien:
+ [Sertifikat klien X.509](x509-client-certs.md)
+ [Pengguna IAM, grup IAM, dan IAM role](iam-users-groups-roles.md)
+ [Identitas Amazon Cognito](cognito-identities.md)

Identitas ini dapat digunakan dengan perangkat, seluler, web, atau aplikasi desktop. Mereka bahkan dapat digunakan oleh perintah user typing AWS IoT command line interface (CLI). Biasanya, AWS IoT perangkat menggunakan sertifikat X.509, sedangkan aplikasi seluler menggunakan identitas Amazon Cognito. Aplikasi web dan desktop menggunakan IAM atau identitas federasi. AWS CLI perintah menggunakan IAM. Untuk informasi lebih lanjut tentang identitas IAM, lihat. [Identitas dan manajemen akses untuk AWS IoT](security-iam.md)

# Sertifikat klien X.509
<a name="x509-client-certs"></a>

Sertifikat X.509 menyediakan AWS IoT kemampuan untuk mengautentikasi koneksi klien dan perangkat. Sertifikat klien harus terdaftar AWS IoT sebelum klien dapat berkomunikasi dengan AWS IoT. Sertifikat klien dapat didaftarkan dalam beberapa Akun AWS detik yang sama Wilayah AWS untuk memfasilitasi pemindahan perangkat antara Akun AWS s Anda di wilayah yang sama. Untuk informasi selengkapnya, lihat [Menggunakan sertifikat klien X.509 dalam beberapa Akun AWS detik dengan pendaftaran multi-akun](#multiple-account-cert). 

Kami menyarankan agar setiap perangkat atau klien diberikan sertifikat unik untuk mengaktifkan tindakan manajemen klien yang berbutir halus, termasuk pencabutan sertifikat. Perangkat dan klien juga harus mendukung rotasi dan penggantian sertifikat untuk membantu memastikan kelancaran pengoperasian saat sertifikat kedaluwarsa.

Untuk informasi tentang penggunaan sertifikat X.509 untuk mendukung lebih dari beberapa perangkat, lihat [Penyediaan perangkat](iot-provision.md) untuk meninjau berbagai opsi manajemen dan penyediaan sertifikat yang mendukung. AWS IoT 

**AWS IoT mendukung jenis sertifikat klien X.509 ini:**
+  Sertifikat X.509 yang dihasilkan oleh AWS IoT
+  Sertifikat X.509 ditandatangani oleh CA yang terdaftar dengan. AWS IoT
+  Sertifikat X.509 ditandatangani oleh CA yang tidak terdaftar. AWS IoT

Bagian ini menjelaskan cara mengelola sertifikat X.509 di. AWS IoT Anda dapat menggunakan AWS IoT konsol atau AWS CLI untuk melakukan operasi sertifikat ini:
+ [Buat sertifikat AWS IoT klien](device-certs-create.md)
+ [Buat sertifikat klien Anda sendiri](device-certs-your-own.md)
+ [Mendaftarkan sertifikat klien](register-device-cert.md)
+ [Mengaktifkan atau menonaktifkan sertifikat klien](activate-or-deactivate-device-cert.md)
+ [Mencabut sertifikat klien](revoke-ca-cert.md)

Untuk informasi selengkapnya tentang AWS CLI perintah yang melakukan operasi ini, lihat [AWS IoT Referensi CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/index.html).

## Menggunakan sertifikat klien X.509
<a name="x509-client-cert-basics"></a>

Sertifikat X.509 mengautentikasi koneksi klien dan perangkat ke. AWS IoT Sertifikat X.509 memberikan beberapa manfaat dibandingkan mekanisme identifikasi dan otentikasi lainnya. Sertifikat X.509 memungkinkan kunci asimetris untuk digunakan dengan perangkat. Misalnya, Anda dapat membakar kunci pribadi ke dalam penyimpanan aman pada perangkat sehingga materi kriptografi sensitif tidak pernah meninggalkan perangkat. Sertifikat X.509 memberikan otentikasi klien yang lebih kuat atas skema lain, seperti nama pengguna dan kata sandi atau token pembawa, karena kunci pribadi tidak pernah meninggalkan perangkat.

AWS IoT mengotentikasi sertifikat klien menggunakan modus otentikasi klien protokol TLS. Dukungan TLS tersedia dalam banyak bahasa pemrograman dan sistem operasi dan umumnya digunakan untuk mengenkripsi data. Dalam otentikasi klien TLS, AWS IoT meminta sertifikat klien X.509 dan memvalidasi status sertifikat dan Akun AWS terhadap registri sertifikat. Ini kemudian menantang klien untuk bukti kepemilikan kunci pribadi yang sesuai dengan kunci publik yang terkandung dalam sertifikat. AWS IoT mengharuskan klien untuk mengirim [ekstensi Server Name Indication (SNI) ke protokol](https://tools.ietf.org/html/rfc3546#section-3.1) Transport Layer Security (TLS). Untuk informasi selengkapnya tentang mengonfigurasi ekstensi SNI, lihat. [Keamanan transportasi di AWS IoT Core](transport-security.md)

Untuk memfasilitasi koneksi klien yang aman dan konsisten ke AWS IoT inti, sertifikat klien X.509 harus memiliki yang berikut:
+ Terdaftar di AWS IoT Core. Untuk informasi selengkapnya, lihat [Mendaftarkan sertifikat klien](register-device-cert.md).
+ Memiliki status status`ACTIVE`. Untuk informasi selengkapnya, lihat [Mengaktifkan atau menonaktifkan sertifikat klien](activate-or-deactivate-device-cert.md).
+ Belum mencapai tanggal kedaluwarsa sertifikat.

Anda dapat membuat sertifikat klien yang menggunakan Amazon Root CA dan Anda dapat menggunakan sertifikat klien Anda sendiri yang ditandatangani oleh otoritas sertifikat (CA) lain. Untuk informasi selengkapnya tentang penggunaan AWS IoT konsol untuk membuat sertifikat yang menggunakan Amazon Root CA, lihat[Buat sertifikat AWS IoT klien](device-certs-create.md). Untuk informasi selengkapnya tentang menggunakan sertifikat X.509 Anda sendiri, lihat. [Buat sertifikat klien Anda sendiri](device-certs-your-own.md)

Tanggal dan waktu ketika sertifikat yang ditandatangani oleh sertifikat CA kedaluwarsa ditetapkan saat sertifikat dibuat. Sertifikat X.509 yang dihasilkan dengan AWS IoT kedaluwarsa pada tengah malam UTC pada tanggal 31 Desember 2049 (2049-12-31T 23:59:59 Z).

AWS IoT Device Defender dapat melakukan audit pada perangkat Anda Akun AWS dan perangkat yang mendukung praktik terbaik keamanan IoT umum. Ini termasuk mengelola tanggal kedaluwarsa sertifikat X.509 yang ditandatangani oleh CA Anda atau Amazon Root CA. Untuk informasi selengkapnya tentang mengelola tanggal kedaluwarsa sertifikat, lihat Sertifikat [perangkat kedaluwarsa dan sertifikat [CA](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-ca-cert-approaching-expiration.html) kedaluwarsa](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-approaching-expiration.html).

Di AWS IoT blog resmi, penyelaman lebih dalam tentang pengelolaan rotasi sertifikat perangkat dan praktik terbaik keamanan dieksplorasi di [Cara mengelola rotasi sertifikat perangkat IoT](https://aws.amazon.com/blogs/iot/how-to-manage-iot-device-certificate-rotation-using-aws-iot/) menggunakan. AWS IoT

## Menggunakan sertifikat klien X.509 dalam beberapa Akun AWS detik dengan pendaftaran multi-akun
<a name="multiple-account-cert"></a>

Pendaftaran multi-akun memungkinkan untuk memindahkan perangkat antara Akun AWS s Anda di Wilayah yang sama atau di Wilayah yang berbeda. Anda dapat mendaftar, menguji, dan mengonfigurasi perangkat di akun pra-produksi, lalu mendaftar dan menggunakan perangkat dan sertifikat perangkat yang sama di akun produksi. Anda juga dapat mendaftarkan sertifikat klien pada perangkat atau sertifikat perangkat tanpa CA yang terdaftar AWS IoT. Untuk informasi selengkapnya, lihat [Mendaftarkan sertifikat klien yang ditandatangani oleh CA (CLI) yang tidak terdaftar](manual-cert-registration.md#manual-cert-registration-noca-cli).

**catatan**  
Sertifikat yang digunakan untuk pendaftaran multi-akun didukung pada jenis`iot:Data-ATS`, `iot:Data` (warisan),`iot:Jobs`, dan titik `iot:CredentialProvider` akhir. Untuk informasi selengkapnya tentang titik akhir AWS IoT perangkat, lihat[AWS IoT data perangkat dan titik akhir layanan](iot-connect-devices.md#iot-connect-device-endpoints).

Perangkat yang menggunakan registrasi multi-akun harus mengirimkan [ekstensi Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) ke protokol Transport Layer Security (TLS) dan memberikan alamat endpoint lengkap di `host_name` lapangan, ketika mereka terhubung ke. AWS IoT AWS IoT menggunakan alamat titik akhir `host_name` untuk merutekan koneksi ke AWS IoT akun yang benar. Perangkat yang ada yang tidak mengirim alamat titik akhir yang valid `host_name` akan terus berfungsi, tetapi mereka tidak akan dapat menggunakan fitur yang memerlukan informasi ini. Untuk informasi lebih lanjut tentang ekstensi SNI dan untuk mempelajari cara mengidentifikasi alamat titik akhir untuk `host_name` bidang tersebut, lihat. [Keamanan transportasi di AWS IoT Core](transport-security.md) 

**Untuk menggunakan pendaftaran multi-akun**

1. Anda dapat mendaftarkan sertifikat perangkat dengan CA. Anda dapat mendaftarkan CA penandatanganan dalam beberapa akun dalam `SNI_ONLY` mode dan menggunakan CA tersebut untuk mendaftarkan sertifikat klien yang sama ke beberapa akun. Untuk informasi selengkapnya, lihat [Daftarkan sertifikat CA dalam mode SNI\$1ONLY (CLI) - Direkomendasikan](manage-your-CA-certs.md#register-CA-cert-SNI-cli).

1. Anda dapat mendaftarkan sertifikat perangkat tanpa CA. Lihat [Daftarkan sertifikat klien yang ditandatangani oleh CA (CLI) yang tidak terdaftar](manual-cert-registration.md#manual-cert-registration-noca-cli). Mendaftarkan CA adalah opsional. Anda tidak diharuskan mendaftarkan CA yang menandatangani sertifikat perangkat AWS IoT.

## Algoritma penandatanganan sertifikat didukung oleh AWS IoT
<a name="x509-cert-algorithms"></a>

AWS IoT mendukung algoritma penandatanganan sertifikat berikut:
+ SHA256WITHRSA
+ SHA384WITHRSA
+ SHA512WITHRSA
+ SHA256WITHRSAANDMGF1 (RSASSA-PSS)
+ SHA384WITHRSAANDMGF1 (RSASSA-PSS)
+ SHA512WITHRSAANDMGF1 (RSASSA-PSS)
+ DSA\$1DENGAN\$1 SHA256
+ ECDSA-DENGAN- SHA256
+ ECDSA-DENGAN- SHA384
+ ECDSA-DENGAN- SHA512

Untuk informasi selengkapnya tentang otentikasi dan keamanan sertifikat, lihat [Kualitas kunci sertifikat perangkat](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-key-quality.html).

**catatan**  
Permintaan penandatanganan sertifikat (CSR) harus menyertakan kunci publik. Kunci dapat berupa kunci RSA dengan panjang setidaknya 2.048 bit atau kunci ECC dari kurva NIST P-256, NIST P-384, atau NIST P-521. Untuk informasi selengkapnya, lihat [CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCertificateFromCsr.html)di *Panduan Referensi AWS IoT API*.

## Algoritma kunci yang didukung oleh AWS IoT
<a name="x509-cert-key-algorithms"></a>

Tabel di bawah ini menunjukkan bagaimana algoritma kunci didukung:


****  

| Algoritma kunci | Algoritma penandatanganan sertifikat | Versi TLS | Didukung? Ya atau Tidak | 
| --- | --- | --- | --- | 
| RSA dengan ukuran kunci minimal 2048 bit | Semua | TLS 1.2 TLS 1.3 | Ya | 
| ECC NIST P-256/P-384/P-521 | Semua | TLS 1.2 TLS 1.3 | Ya | 
| RSA-PSS dengan ukuran kunci minimal 2048 bit | Semua | TLS 1.2 | Tidak | 
| RSA-PSS dengan ukuran kunci minimal 2048 bit | Semua | TLS 1.3 | Ya | 

Untuk membuat sertifikat menggunakan [CreateCertificateFromCSR](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateFromCsr.html), Anda dapat menggunakan algoritme kunci yang didukung untuk menghasilkan kunci publik untuk CSR Anda. Untuk mendaftarkan sertifikat Anda sendiri menggunakan [RegisterCertificate](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificate.html)atau [RegisterCertificateWithoutCA](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificateWithoutCA.html), Anda dapat menggunakan algoritma kunci yang didukung untuk menghasilkan kunci publik untuk sertifikat.

Untuk informasi selengkapnya, lihat [Kebijakan keamanan](https://docs.aws.amazon.com//iot/latest/developerguide/transport-security.html#tls-policy-table).

# Buat sertifikat AWS IoT klien
<a name="device-certs-create"></a>

AWS IoT menyediakan sertifikat klien yang ditandatangani oleh otoritas sertifikat Amazon Root (CA).

Topik ini menjelaskan cara membuat sertifikat klien yang ditandatangani oleh otoritas sertifikat Amazon Root dan mengunduh file sertifikat. Setelah Anda membuat file sertifikat klien, Anda harus menginstalnya pada klien.

**catatan**  
Setiap sertifikat klien X.509 yang disediakan oleh AWS IoT memiliki atribut penerbit dan subjek yang Anda tetapkan pada saat pembuatan sertifikat. Atribut sertifikat tidak dapat diubah hanya setelah sertifikat dibuat.

Anda dapat menggunakan AWS IoT konsol atau AWS CLI untuk membuat AWS IoT sertifikat yang ditandatangani oleh otoritas sertifikat Amazon Root.

## Buat AWS IoT sertifikat (konsol)
<a name="device-certs-create-console"></a>

**Untuk membuat AWS IoT sertifikat menggunakan AWS IoT konsol**

1. Masuk ke Konsol Manajemen AWS dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi, pilih **Keamanan**, lalu pilih **Sertifikat**, lalu pilih **Buat**.

1. Pilih **Pembuatan sertifikat sekali klik (disarankan)** - **Buat sertifikat**.

1. Dari halaman yang **dibuat Sertifikat**, unduh file sertifikat klien untuk benda tersebut, kunci publik, dan kunci pribadi ke lokasi yang aman. Sertifikat yang dihasilkan oleh ini hanya AWS IoT tersedia untuk digunakan dengan AWS IoT layanan.

   Jika Anda juga memerlukan file sertifikat Amazon Root CA, halaman ini juga memiliki tautan ke halaman tempat Anda dapat mengunduhnya.

1. Sertifikat klien sekarang telah dibuat dan didaftarkan AWS IoT. Anda harus mengaktifkan sertifikat sebelum menggunakannya di klien.

    Untuk mengaktifkan sertifikat klien sekarang, pilih **Aktifkan**. Jika Anda tidak ingin mengaktifkan sertifikat sekarang, lihat [Aktifkan sertifikat klien (konsol)](activate-or-deactivate-device-cert.md#activate-device-cert-console) untuk mempelajari cara mengaktifkan sertifikat nanti.

   

1. Jika Anda ingin melampirkan kebijakan ke sertifikat, pilih **Lampirkan kebijakan**.

   Jika Anda tidak ingin melampirkan kebijakan sekarang, pilih **Selesai** untuk menyelesaikan. Anda dapat melampirkan kebijakan nanti.

Setelah Anda menyelesaikan prosedur, instal file sertifikat pada klien.

## Buat AWS IoT sertifikat (CLI)
<a name="device-certs-create-cli"></a>

 AWS CLI Ini menyediakan **[create-keys-and-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/create-keys-and-certificate.html)** perintah untuk membuat sertifikat klien yang ditandatangani oleh otoritas sertifikat Amazon Root. Perintah ini, bagaimanapun, tidak mengunduh file sertifikat Amazon Root CA. Anda dapat mengunduh file sertifikat Amazon Root CA dari[Sertifikat CA untuk otentikasi server](server-authentication.md#server-authentication-certs). 

Perintah ini membuat kunci pribadi, kunci publik, dan file sertifikat X.509 dan mendaftar dan mengaktifkan sertifikat dengan. AWS IoT

```
aws iot create-keys-and-certificate \
    --set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```

Jika Anda tidak ingin mengaktifkan sertifikat saat Anda membuat dan mendaftarkannya, perintah ini membuat kunci pribadi, kunci publik, dan file sertifikat X.509 dan mendaftarkan sertifikat, tetapi tidak mengaktifkannya. [Aktifkan sertifikat klien (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli)menjelaskan cara mengaktifkan sertifikat nanti.

```
aws iot create-keys-and-certificate \
    --no-set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```



Instal file sertifikat pada klien.

# Buat sertifikat klien Anda sendiri
<a name="device-certs-your-own"></a>

AWS IoT mendukung sertifikat klien yang ditandatangani oleh otoritas sertifikat root atau menengah (CA). AWS IoT menggunakan sertifikat CA untuk memverifikasi kepemilikan sertifikat. Untuk menggunakan sertifikat perangkat yang ditandatangani oleh CA yang bukan CA Amazon, sertifikat CA harus terdaftar AWS IoT sehingga kami dapat memverifikasi kepemilikan sertifikat perangkat.

AWS IoT mendukung berbagai cara untuk membawa sertifikat Anda sendiri (BYOC): 
+ Pertama, daftarkan CA yang digunakan untuk menandatangani sertifikat klien dan kemudian mendaftarkan sertifikat klien individu. Jika Anda ingin mendaftarkan perangkat atau klien ke sertifikat kliennya saat pertama kali terhubung ke AWS IoT (juga dikenal sebagai [Penyediaan Just-in-Time](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html)), Anda harus mendaftarkan CA penandatanganan dan mengaktifkan pendaftaran otomatis. AWS IoT 
+ Jika Anda tidak dapat mendaftarkan CA penandatanganan, Anda dapat memilih untuk mendaftarkan sertifikat klien tanpa CA. Untuk perangkat yang terdaftar tanpa CA, Anda harus menunjukkan [Server Name Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) saat Anda AWS IoT menghubungkannya.

**catatan**  
Untuk mendaftarkan sertifikat klien menggunakan CA, Anda harus mendaftarkan CA penandatanganan dengan AWS IoT, bukan yang lain CAs dalam hierarki.

**catatan**  
Sertifikat CA dapat didaftarkan dalam `DEFAULT` mode hanya dengan satu akun di Wilayah. Sertifikat CA dapat didaftarkan dalam `SNI_ONLY` mode oleh beberapa akun di Wilayah. 

Untuk informasi selengkapnya tentang penggunaan sertifikat X.509 untuk mendukung lebih dari beberapa perangkat, lihat [Penyediaan perangkat](iot-provision.md) untuk meninjau berbagai opsi manajemen dan penyediaan sertifikat yang mendukung. AWS IoT 

**Topics**
+ [Kelola sertifikat CA Anda](manage-your-CA-certs.md)
+ [Buat sertifikat klien menggunakan sertifikat CA Anda](create-device-cert.md)

# Kelola sertifikat CA Anda
<a name="manage-your-CA-certs"></a>

Bagian ini menjelaskan tugas-tugas umum untuk mengelola sertifikat otoritas sertifikat (CA) Anda sendiri.

Anda dapat mendaftarkan otoritas sertifikat (CA) AWS IoT jika Anda menggunakan sertifikat klien yang ditandatangani oleh CA yang AWS IoT tidak mengenali.

Jika Anda ingin klien mendaftarkan sertifikat klien mereka secara otomatis AWS IoT ketika mereka pertama kali terhubung, CA yang menandatangani sertifikat klien harus terdaftar AWS IoT. Jika tidak, Anda tidak perlu mendaftarkan sertifikat CA yang menandatangani sertifikat klien.

**catatan**  
Sertifikat CA dapat didaftarkan dalam `DEFAULT` mode hanya dengan satu akun di Wilayah. Sertifikat CA dapat didaftarkan dalam `SNI_ONLY` mode oleh beberapa akun di Wilayah.

**Topics**
+ [Buat sertifikat CA](#create-your-CA-cert)
+ [Daftarkan sertifikat CA Anda](#register-CA-cert)
+ [Nonaktifkan sertifikat CA](#deactivate-ca-cert)

## Buat sertifikat CA
<a name="create-your-CA-cert"></a>

Jika Anda tidak memiliki sertifikat CA, Anda dapat menggunakan alat [OpenSSL](https://www.openssl.org/) v1.1.1i untuk membuatnya.

**catatan**  
Anda tidak dapat melakukan prosedur ini di AWS IoT konsol.

**Untuk membuat sertifikat CA menggunakan alat [OpenSSL v1.1.1i](https://www.openssl.org/)**

1. Hasilkan key pair.

   ```
   openssl genrsa -out root_CA_key_filename.key 2048
   ```

1. Gunakan kunci pribadi dari key pair untuk menghasilkan sertifikat CA.

   ```
   openssl req -x509 -new -nodes \
       -key root_CA_key_filename.key \
       -sha256 -days 1024 \
       -out root_CA_cert_filename.pem
   ```

## Daftarkan sertifikat CA Anda
<a name="register-CA-cert"></a>

Prosedur ini menjelaskan cara mendaftarkan sertifikat dari otoritas sertifikat (CA) yang bukan CA Amazon. AWS IoT Core menggunakan sertifikat CA untuk memverifikasi kepemilikan sertifikat. Untuk menggunakan sertifikat perangkat yang ditandatangani oleh CA yang bukan CA Amazon, Anda harus mendaftarkan sertifikat CA AWS IoT Core sehingga dapat memverifikasi kepemilikan sertifikat perangkat.

### Daftarkan sertifikat CA (konsol)
<a name="register-CA-cert-console"></a>

**catatan**  
Untuk mendaftarkan sertifikat CA di konsol, mulai di konsol di [Daftar sertifikat CA](https://console.aws.amazon.com//iot/home#/create/cacertificate). Anda dapat mendaftarkan CA Anda dalam mode Multi-akun dan tanpa perlu memberikan sertifikat verifikasi atau akses ke kunci pribadi. CA dapat didaftarkan dalam mode Multiakun dengan lebih dari satu Akun AWS dalam Wilayah AWS yang sama. Anda dapat mendaftarkan CA Anda dalam mode Single-account dengan memberikan sertifikat verifikasi dan bukti kepemilikan kunci pribadi CA.

### Daftarkan sertifikat CA (CLI)
<a name="register-CA-cert-cli"></a>

Anda dapat mendaftarkan sertifikat CA dalam `DEFAULT` mode atau `SNI_ONLY` mode. CA dapat didaftarkan dalam `DEFAULT` mode per Akun AWS satu Wilayah AWS. CA dapat didaftarkan dalam `SNI_ONLY` mode dengan beberapa Akun AWS dalam mode yang sama Wilayah AWS. Untuk informasi selengkapnya tentang mode sertifikat CA, lihat [CertificateMode](https://docs.aws.amazon.com//iot/latest/apireference/API_CACertificateDescription.html#iot-Type-CACertificateDescription-certificateMode).

**catatan**  
Kami menyarankan Anda mendaftarkan CA dalam `SNI_ONLY` mode. Anda tidak perlu memberikan sertifikat verifikasi atau akses ke kunci pribadi, dan Anda dapat mendaftarkan CA dengan beberapa Akun AWS di yang sama Wilayah AWS.

#### Daftarkan sertifikat CA dalam mode SNI\$1ONLY (CLI) - Direkomendasikan
<a name="register-CA-cert-SNI-cli"></a>

**Prasyarat**

Pastikan Anda memiliki yang berikut ini tersedia di komputer Anda sebelum melanjutkan:
+ File sertifikat root CA (direferensikan dalam contoh berikut sebagai`root_CA_cert_filename.pem`)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) atau yang lebih baru

**Untuk mendaftarkan sertifikat CA dalam `SNI_ONLY` mode menggunakan AWS CLI**

1. Daftarkan sertifikat CA dengan AWS IoT. Menggunakan **register-ca-certificate** perintah, masukkan nama file sertifikat CA. Untuk informasi selengkapnya, lihat [register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html) dalam *AWS CLI Referensi Perintah*.

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --certificate-mode SNI_ONLY
   ```

   Jika berhasil, perintah ini mengembalikan file*certificateId*.

1. Pada titik ini, sertifikat CA telah terdaftar AWS IoT tetapi tidak aktif. Sertifikat CA harus aktif sebelum Anda dapat mendaftarkan sertifikat klien apa pun yang telah ditandatangani.

   Langkah ini mengaktifkan sertifikat CA.

   Untuk mengaktifkan sertifikat CA, gunakan **update-certificate** perintah sebagai berikut. *Untuk informasi selengkapnya, lihat [sertifikat pembaruan di Referensi](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) Perintah.AWS CLI *

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

Untuk melihat status sertifikat CA, gunakan **describe-ca-certificate** perintah. Untuk informasi selengkapnya, lihat [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) dalam *AWS CLI Referensi Perintah*.

#### Daftarkan sertifikat CA dalam `DEFAULT` mode (CLI)
<a name="register-CA-cert-default-cli"></a>

**Prasyarat**

Pastikan Anda memiliki yang berikut ini tersedia di komputer Anda sebelum melanjutkan:
+ File sertifikat root CA (direferensikan dalam contoh berikut sebagai`root_CA_cert_filename.pem`)
+ File kunci pribadi sertifikat CA root (direferensikan dalam contoh berikut sebagai`root_CA_key_filename.key`)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) atau yang lebih baru

**Untuk mendaftarkan sertifikat CA dalam `DEFAULT` mode menggunakan AWS CLI**

1. Untuk mendapatkan kode registrasi dari AWS IoT, gunakan**get-registration-code**. Simpan yang dikembalikan `registrationCode` untuk digunakan sebagai sertifikat verifikasi kunci pribadi. `Common Name` Untuk informasi selengkapnya, lihat [get-registration-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/get-registration-code.html) dalam *AWS CLI Referensi Perintah*.

   ```
   aws iot get-registration-code
   ```

1. Buat key pair untuk sertifikat verifikasi kunci pribadi:

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. Buat permintaan penandatanganan sertifikat (CSR) untuk sertifikat verifikasi kunci pribadi. Atur `Common Name` bidang sertifikat ke yang `registrationCode` dikembalikan oleh**get-registration-code**.

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   Anda diminta untuk beberapa informasi, termasuk `Common Name` untuk sertifikat.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. Gunakan CSR untuk membuat sertifikat verifikasi kunci pribadi:

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. Daftarkan sertifikat CA dengan AWS IoT. Masukkan nama file sertifikat CA dan nama file sertifikat verifikasi kunci pribadi ke **register-ca-certificate** perintah, sebagai berikut. Untuk informasi selengkapnya, lihat [register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html) dalam *AWS CLI Referensi Perintah*.

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --verification-cert file://verification_cert_filename.pem
   ```

   Perintah ini mengembalikan*certificateId*, jika berhasil.

1. Pada titik ini, sertifikat CA telah terdaftar AWS IoT tetapi tidak aktif. Sertifikat CA harus aktif sebelum Anda dapat mendaftarkan sertifikat klien yang telah ditandatangani.

   Langkah ini mengaktifkan sertifikat CA.

   Untuk mengaktifkan sertifikat CA, gunakan **update-certificate** perintah sebagai berikut. *Untuk informasi selengkapnya, lihat [sertifikat pembaruan di Referensi](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) Perintah.AWS CLI *

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

Untuk melihat status sertifikat CA, gunakan **describe-ca-certificate** perintah. Untuk informasi selengkapnya, lihat [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) dalam *AWS CLI Referensi Perintah*.

### Membuat sertifikat verifikasi CA untuk mendaftarkan sertifikat CA di konsol
<a name="create-CA-verification-cert"></a>

**catatan**  
Prosedur ini hanya untuk digunakan jika Anda mendaftarkan sertifikat CA dari AWS IoT konsol.  
Jika Anda tidak datang ke prosedur ini dari AWS IoT konsol, mulai proses pendaftaran sertifikat CA di konsol di [Daftar sertifikat CA](https://console.aws.amazon.com//iot/home#/create/cacertificate). 

Pastikan Anda memiliki yang berikut ini tersedia di komputer yang sama sebelum melanjutkan:
+ File sertifikat root CA (direferensikan dalam contoh berikut sebagai`root_CA_cert_filename.pem`)
+ File kunci pribadi sertifikat CA root (direferensikan dalam contoh berikut sebagai`root_CA_key_filename.key`)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) atau yang lebih baru

**Untuk menggunakan antarmuka baris perintah untuk membuat sertifikat verifikasi CA untuk mendaftarkan sertifikat CA Anda di konsol**

1. Ganti `verification_cert_key_filename.key` dengan nama file kunci sertifikat verifikasi yang ingin Anda buat (misalnya,**verification\$1cert.key**). Kemudian jalankan perintah ini untuk menghasilkan key pair untuk sertifikat verifikasi kunci pribadi:

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. Ganti `verification_cert_key_filename.key` dengan nama file kunci yang Anda buat di langkah 1.

   Ganti `verification_cert_csr_filename.csr` dengan nama file permintaan penandatanganan sertifikat (CSR) yang ingin Anda buat. Misalnya, **verification\$1cert.csr**.

   Jalankan perintah ini untuk membuat file CSR.

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   Perintah meminta Anda untuk informasi tambahan yang dijelaskan nanti.

1. Di AWS IoT konsol, dalam wadah **sertifikat Verifikasi**, salin kode registrasi.

1. Informasi yang diminta oleh **openssl** perintah Anda ditampilkan dalam contoh berikut. Kecuali untuk `Common Name` bidang, Anda dapat memasukkan nilai Anda sendiri atau mengosongkannya.

   Di `Common Name` bidang, tempel kode registrasi yang Anda salin di langkah sebelumnya.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

   Setelah Anda selesai, perintah membuat file CSR.

1. Ganti `verification_cert_csr_filename.csr` dengan yang `verification_cert_csr_filename.csr` Anda gunakan pada langkah sebelumnya.

   Ganti `root_CA_cert_filename.pem` dengan nama file sertifikat CA yang ingin Anda daftarkan.

   Ganti `root_CA_key_filename.key` dengan nama file file kunci pribadi sertifikat CA.

   Ganti `verification_cert_filename.pem` dengan nama file sertifikat verifikasi yang ingin Anda buat. Misalnya, **verification\$1cert.pem**.

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. Setelah perintah OpenSSL selesai, Anda harus memiliki file-file ini siap digunakan ketika Anda kembali ke konsol.
   + File sertifikat CA Anda (`root_CA_cert_filename.pem`digunakan dalam perintah sebelumnya)
   + Sertifikat verifikasi yang Anda buat pada langkah sebelumnya (*verification\$1cert\$1filename.pem*digunakan dalam perintah sebelumnya)

## Nonaktifkan sertifikat CA
<a name="deactivate-ca-cert"></a>

Ketika sertifikat otoritas sertifikat (CA) diaktifkan untuk pendaftaran sertifikat klien otomatis, AWS IoT periksa sertifikat CA untuk memastikan CA tersebut`ACTIVE`. Jika sertifikat CA adalah`INACTIVE`, AWS IoT tidak mengizinkan sertifikat klien untuk didaftarkan.

Dengan menyetel sertifikat CA ke`INACTIVE`, Anda mencegah sertifikat klien baru yang dikeluarkan oleh CA agar tidak terdaftar secara otomatis.

**catatan**  
Setiap sertifikat klien terdaftar yang ditandatangani oleh sertifikat CA yang dikompromikan terus berfungsi sampai Anda secara eksplisit mencabut masing-masing sertifikat tersebut.

### Nonaktifkan sertifikat CA (konsol)
<a name="deactivate-ca-cert-console"></a>

**Untuk menonaktifkan sertifikat CA menggunakan konsol AWS IoT**

1. Masuk ke Konsol Manajemen AWS dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **CAs**.

1. Dalam daftar otoritas sertifikat, temukan yang ingin Anda nonaktifkan, dan pilih ikon elipsis untuk membuka menu opsi.

1. Pada menu opsi, pilih **Nonaktifkan**.

Otoritas sertifikat harus ditampilkan sebagai **Tidak Aktif** dalam daftar.

**catatan**  
 AWS IoT Konsol tidak menyediakan cara untuk mencantumkan sertifikat yang ditandatangani oleh CA yang Anda nonaktifkan. Untuk AWS CLI opsi untuk mencantumkan sertifikat tersebut, lihat[Nonaktifkan sertifikat CA (CLI)](#deactivate-ca-cert-cli).

### Nonaktifkan sertifikat CA (CLI)
<a name="deactivate-ca-cert-cli"></a>

 AWS CLI Ini menyediakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html)perintah untuk menonaktifkan sertifikat CA.

```
aws iot update-ca-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html)perintah untuk mendapatkan daftar semua sertifikat klien terdaftar yang ditandatangani oleh CA yang ditentukan. Untuk setiap sertifikat klien yang ditandatangani oleh sertifikat CA yang ditentukan, gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)perintah untuk mencabut sertifikat klien agar tidak digunakan.

Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html)perintah untuk melihat status sertifikat CA.

# Buat sertifikat klien menggunakan sertifikat CA Anda
<a name="create-device-cert"></a>

Anda dapat menggunakan otoritas sertifikat (CA) Anda sendiri untuk membuat sertifikat klien. Sertifikat klien harus terdaftar AWS IoT sebelum digunakan. Untuk informasi tentang opsi pendaftaran untuk sertifikat klien Anda, lihat[Mendaftarkan sertifikat klien](register-device-cert.md).

## Buat sertifikat klien (CLI)
<a name="create-device-cert-cli"></a>

**catatan**  
Anda tidak dapat melakukan prosedur ini di AWS IoT konsol.

**Untuk membuat sertifikat klien menggunakan AWS CLI**

1. Hasilkan key pair.

   ```
   openssl genrsa -out device_cert_key_filename.key 2048
   ```

1. Buat CSR untuk sertifikat klien.

   ```
   openssl req -new \
       -key device_cert_key_filename.key \
       -out device_cert_csr_filename.csr
   ```

   Anda diminta untuk beberapa informasi, seperti yang ditunjukkan di sini:

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. Buat sertifikat klien dari CSR.

   ```
   openssl x509 -req \
       -in device_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out device_cert_filename.pem \
       -days 500 -sha256
   ```

 Pada titik ini, sertifikat klien telah dibuat, tetapi belum terdaftar AWS IoT. Untuk informasi tentang bagaimana dan kapan mendaftarkan sertifikat klien, lihat[Mendaftarkan sertifikat klien](register-device-cert.md). 

# Mendaftarkan sertifikat klien
<a name="register-device-cert"></a>

Sertifikat klien harus terdaftar AWS IoT untuk memungkinkan komunikasi antara klien dan AWS IoT. Anda dapat mendaftarkan setiap sertifikat klien secara manual, atau Anda dapat mengonfigurasi sertifikat klien untuk mendaftar secara otomatis ketika klien terhubung AWS IoT untuk pertama kalinya.

 Jika Anda ingin klien dan perangkat Anda mendaftarkan sertifikat klien mereka ketika mereka pertama kali terhubung, Anda harus [Daftarkan sertifikat CA Anda](manage-your-CA-certs.md#register-CA-cert) menggunakan untuk menandatangani sertifikat klien dengan AWS IoT di Wilayah di mana Anda ingin menggunakannya. Amazon Root CA secara otomatis terdaftar AWS IoT. 

Sertifikat klien dapat dibagikan oleh Akun AWS dan Wilayah. Prosedur dalam topik ini harus dilakukan di setiap akun dan Wilayah di mana Anda ingin menggunakan sertifikat klien. Pendaftaran sertifikat klien di satu akun atau Wilayah tidak secara otomatis dikenali oleh yang lain.

**catatan**  
Klien yang menggunakan protokol Transport Layer Security (TLS) untuk terhubung AWS IoT harus mendukung [ekstensi Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) ke TLS. Untuk informasi selengkapnya, lihat [Keamanan transportasi di AWS IoT Core](transport-security.md).

**Topics**
+ [Daftarkan sertifikat klien secara manual](manual-cert-registration.md)
+ [Daftarkan sertifikat klien saat klien terhubung ke AWS IoT just-in-time registrasi (JITR)](auto-register-device-cert.md)

# Daftarkan sertifikat klien secara manual
<a name="manual-cert-registration"></a>

Anda dapat mendaftarkan sertifikat klien secara manual dengan menggunakan AWS IoT konsol dan AWS CLI.

Prosedur pendaftaran yang digunakan tergantung pada apakah sertifikat akan dibagikan oleh Akun AWS s dan Wilayah. Pendaftaran sertifikat klien di satu akun atau Wilayah tidak secara otomatis dikenali oleh yang lain.

Prosedur dalam topik ini harus dilakukan di setiap akun dan Wilayah di mana Anda ingin menggunakan sertifikat klien. Sertifikat klien dapat dibagikan oleh Akun AWS s dan Wilayah. 

## Daftarkan sertifikat klien yang ditandatangani oleh CA (konsol) terdaftar
<a name="manual-cert-registration-console"></a>

**catatan**  
Sebelum Anda melakukan prosedur ini, pastikan bahwa Anda memiliki file.pem sertifikat klien dan bahwa sertifikat klien ditandatangani oleh CA yang telah Anda [daftarkan](manage-your-CA-certs.md#register-CA-cert). AWS IoT

**Untuk mendaftarkan sertifikat yang ada dengan AWS IoT menggunakan konsol**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi, di bawah bagian **Kelola**, pilih **Keamanan**, lalu pilih **Sertifikat**.

1. Pada halaman **Sertifikat** di kotak dialog **Sertifikat**, pilih **Tambahkan sertifikat**, lalu pilih **Daftar sertifikat**.

1. Pada halaman **Daftar sertifikat** di kotak dialog **Sertifikat untuk diunggah**, lakukan hal berikut:
   + Pilih **CA terdaftar AWS IoT**.
   + Dari **Pilih sertifikat CA**, pilih **otoritas Sertifikasi** Anda. 
     + Pilih **Daftarkan CA baru** untuk mendaftarkan **otoritas Sertifikasi** baru yang tidak terdaftar AWS IoT.
     + Biarkan **Pilih sertifikat CA** kosong jika **otoritas sertifikat Amazon Root adalah otoritas** sertifikasi Anda.
   + Pilih hingga 10 sertifikat untuk diunggah dan didaftarkan AWS IoT.
     + Gunakan file sertifikat yang Anda buat [Buat sertifikat AWS IoT klien](device-certs-create.md) dan[Buat sertifikat klien menggunakan sertifikat CA Anda](create-device-cert.md).
   + Pilih **Aktifkan** atau **Nonaktifkan**. Jika Anda memilih **Deaktif**, [Mengaktifkan atau menonaktifkan sertifikat klien](activate-or-deactivate-device-cert.md) jelaskan cara mengaktifkan sertifikat Anda setelah pendaftaran sertifikat.
   + Pilih**Pendaftaran**.

Pada halaman **Sertifikat** di kotak dialog **Sertifikat**, sertifikat terdaftar Anda sekarang akan muncul.

## Daftarkan sertifikat klien yang ditandatangani oleh CA (konsol) yang tidak terdaftar
<a name="manual-cert-registration-console-noca"></a>

**catatan**  
Sebelum Anda melakukan prosedur ini, pastikan bahwa Anda memiliki file .pem sertifikat klien.

**Untuk mendaftarkan sertifikat yang ada dengan AWS IoT menggunakan konsol**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **Sertifikat**, lalu pilih **Buat**.

1. Pada **Buat sertifikat**, cari entri **Gunakan sertifikat saya**, dan pilih **Memulai**.

1. Pada **Pilih CA**, pilih **Berikutnya**.

1.  Pada **Daftarkan sertifikat perangkat yang ada**, **pilih Pilih sertifikat**, dan pilih hingga 10 file sertifikat untuk didaftarkan. 

1.  Setelah menutup kotak dialog file, pilih apakah Anda ingin mengaktifkan atau mencabut sertifikat klien saat Anda mendaftarkannya.

   Jika Anda tidak mengaktifkan sertifikat saat terdaftar, [Aktifkan sertifikat klien (konsol)](activate-or-deactivate-device-cert.md#activate-device-cert-console) jelaskan cara mengaktifkannya nanti. 

   Jika sertifikat dicabut saat terdaftar, sertifikat tersebut tidak dapat diaktifkan nanti.

   Setelah Anda memilih file sertifikat untuk didaftarkan, dan pilih tindakan yang akan diambil setelah pendaftaran, pilih **Daftar sertifikat**.

Sertifikat klien yang terdaftar berhasil muncul dalam daftar sertifikat.

## Daftarkan sertifikat klien yang ditandatangani oleh CA terdaftar (CLI)
<a name="manual-cert-registration-cli"></a>

**catatan**  
Sebelum Anda melakukan prosedur ini, pastikan bahwa Anda memiliki sertifikat otoritas (CA) .pem dan berkas .pem sertifikat klien. Sertifikat klien harus ditandatangani oleh otoritas sertifikat (CA) yang telah Anda [daftarkan AWS IoT](manage-your-CA-certs.md#register-CA-cert).

Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html)perintah untuk mendaftar, tetapi tidak mengaktifkan, sertifikat klien.

```
aws iot register-certificate \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

Sertifikat klien terdaftar AWS IoT, tetapi belum aktif. Lihat [Aktifkan sertifikat klien (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) untuk informasi tentang cara mengaktifkannya nanti.

Anda juga dapat mengaktifkan sertifikat klien ketika Anda mendaftarkannya dengan menggunakan perintah ini.

```
aws iot register-certificate \
    --set-as-active \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

Untuk informasi selengkapnya tentang mengaktifkan sertifikat sehingga dapat digunakan untuk terhubung AWS IoT, lihat [Mengaktifkan atau menonaktifkan sertifikat klien](activate-or-deactivate-device-cert.md)

## Daftarkan sertifikat klien yang ditandatangani oleh CA (CLI) yang tidak terdaftar
<a name="manual-cert-registration-noca-cli"></a>

**catatan**  
Sebelum Anda melakukan prosedur ini, pastikan Anda memiliki file.pem sertifikat.

Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html)perintah untuk mendaftar, tetapi tidak mengaktifkan, sertifikat klien.

```
aws iot register-certificate-without-ca \
    --certificate-pem file://device_cert_filename.pem
```

Sertifikat klien terdaftar AWS IoT, tetapi belum aktif. Lihat [Aktifkan sertifikat klien (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) untuk informasi tentang cara mengaktifkannya nanti.

Anda juga dapat mengaktifkan sertifikat klien ketika Anda mendaftarkannya dengan menggunakan perintah ini.

```
aws iot register-certificate-without-ca \
    --status ACTIVE \
    --certificate-pem file://device_cert_filename.pem
```

Untuk informasi selengkapnya tentang mengaktifkan sertifikat sehingga dapat digunakan untuk terhubung AWS IoT, lihat[Mengaktifkan atau menonaktifkan sertifikat klien](activate-or-deactivate-device-cert.md).

# Daftarkan sertifikat klien saat klien terhubung ke AWS IoT just-in-time registrasi (JITR)
<a name="auto-register-device-cert"></a>

Anda dapat mengonfigurasi sertifikat CA untuk mengaktifkan sertifikat klien yang telah ditandatangani untuk mendaftar AWS IoT secara otomatis saat pertama kali klien terhubung AWS IoT.

Untuk mendaftarkan sertifikat klien saat klien terhubung AWS IoT untuk pertama kalinya, Anda harus mengaktifkan sertifikat CA untuk pendaftaran otomatis dan mengonfigurasi koneksi pertama oleh klien untuk memberikan sertifikat yang diperlukan.

## Konfigurasikan sertifikat CA untuk mendukung pendaftaran otomatis (konsol)
<a name="enable-auto-registration-console"></a>

**Untuk mengonfigurasi sertifikat CA untuk mendukung pendaftaran sertifikat klien otomatis menggunakan AWS IoT konsol**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **CAs**.

1. Dalam daftar otoritas sertifikat, temukan yang ingin Anda aktifkan pendaftaran otomatis, dan buka menu opsi dengan menggunakan ikon elipsis.

1. Pada menu opsi, pilih **Aktifkan pendaftaran otomatis**.

**catatan**  
Status registrasi otomatis tidak ditampilkan dalam daftar otoritas sertifikat. Untuk melihat status registrasi otomatis otoritas sertifikat, Anda harus membuka halaman **Detail** otoritas sertifikat.

## Konfigurasikan sertifikat CA untuk mendukung pendaftaran otomatis (CLI)
<a name="enable-auto-registration-cli"></a>

Jika Anda telah mendaftarkan sertifikat CA Anda AWS IoT, gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html)perintah untuk mengatur `autoRegistrationStatus` sertifikat CA ke`ENABLE`.

```
aws iot update-ca-certificate \
--certificate-id caCertificateId \
--new-auto-registration-status ENABLE
```

Jika Anda ingin mengaktifkan `autoRegistrationStatus` ketika Anda mendaftarkan sertifikat CA, gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html)perintah.

```
aws iot register-ca-certificate \
--allow-auto-registration  \
--ca-certificate file://root_CA_cert_filename.pem \
--verification-cert file://verification_cert_filename.pem
```

Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html)perintah untuk melihat status sertifikat CA.

## Konfigurasikan koneksi pertama oleh klien untuk pendaftaran otomatis
<a name="configure-auto-reg-first-connect"></a>

Ketika klien mencoba untuk terhubung AWS IoT untuk pertama kalinya, sertifikat klien yang ditandatangani oleh sertifikat CA Anda harus ada pada klien selama jabat tangan Transport Layer Security (TLS).

Saat klien terhubung AWS IoT, gunakan sertifikat klien yang Anda buat di [Buat sertifikat AWS IoT klien](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-create.html) atau [Buat sertifikat klien Anda sendiri](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html). AWS IoT mengakui sertifikat CA sebagai sertifikat CA terdaftar, mendaftarkan sertifikat klien, dan menetapkan statusnya. `PENDING_ACTIVATION` Ini berarti bahwa sertifikat klien terdaftar secara otomatis dan sedang menunggu aktivasi. Status sertifikat klien harus `ACTIVE` sebelum dapat digunakan untuk terhubung AWS IoT. Lihat [Mengaktifkan atau menonaktifkan sertifikat klien](activate-or-deactivate-device-cert.md) untuk informasi tentang mengaktifkan sertifikat klien.

**catatan**  
Anda dapat menyediakan perangkat menggunakan fitur AWS IoT Core just-in-time registrasi (JITR) 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 mereka terhubung.

Ketika AWS IoT secara otomatis mendaftarkan sertifikat atau ketika klien menyajikan sertifikat dalam `PENDING_ACTIVATION` status, AWS IoT menerbitkan pesan ke topik MQTT berikut:

`$aws/events/certificates/registered/caCertificateId`

`caCertificateId`Dimana ID sertifikat CA yang mengeluarkan sertifikat klien.

Pesan yang dipublikasikan untuk topik ini memiliki struktur sebagai berikut:

```
{
        "certificateId": "certificateId",
        "caCertificateId": "caCertificateId",
        "timestamp": timestamp,
        "certificateStatus": "PENDING_ACTIVATION",
        "awsAccountId": "awsAccountId",
        "certificateRegistrationTimestamp": "certificateRegistrationTimestamp"
}
```

Anda dapat membuat aturan yang mendengarkan topik ini dan melakukan beberapa tindakan. Sebaiknya Anda membuat aturan Lambda yang memverifikasi sertifikat klien tidak ada dalam daftar pencabutan sertifikat (CRL), mengaktifkan sertifikat, dan membuat serta melampirkan kebijakan ke sertifikat. Kebijakan menentukan sumber daya mana yang dapat diakses klien. Jika kebijakan yang Anda buat memerlukan ID klien dari perangkat yang menghubungkan, Anda dapat menggunakan fungsi clientid () aturan untuk mengambil ID klien. Contoh definisi aturan dapat terlihat seperti berikut:

```
SELECT *,
   clientid() as clientid
from $aws/events/certificates/registered/caCertificateId
```

Dalam contoh ini, aturan berlangganan topik JITR `$aws/events/certificates/registered/caCertificateID` dan menggunakan fungsi clientid () untuk mengambil ID klien. Aturan kemudian menambahkan ID klien ke payload JITR. Untuk informasi selengkapnya tentang fungsi clientid () aturan, lihat [clientid](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-clientid) ().

Untuk informasi selengkapnya tentang cara membuat aturan Lambda yang mendengarkan `$aws/events/certificates/registered/caCertificateID` topik dan melakukan tindakan ini, lihat [just-in-time pendaftaran Sertifikat Klien di](https://aws.amazon.com/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/). AWS IoT

Jika terjadi kesalahan atau pengecualian selama registrasi otomatis sertifikat klien, AWS IoT kirimkan peristiwa atau pesan ke log Anda di CloudWatch Log. Untuk informasi selengkapnya tentang menyiapkan log untuk akun Anda, lihat [ CloudWatch dokumentasi Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/).

# Mengelola sertifikat klien
<a name="manage-device-cert"></a>

AWS IoT menyediakan kemampuan bagi Anda untuk mengelola sertifikat klien.

**Topics**
+ [Mengaktifkan atau menonaktifkan sertifikat klien](activate-or-deactivate-device-cert.md)
+ [Lampirkan sesuatu atau kebijakan ke sertifikat klien](attach-to-cert.md)
+ [Mencabut sertifikat klien](revoke-ca-cert.md)
+ [Mentransfer sertifikat ke akun lain](transfer-cert.md)

# Mengaktifkan atau menonaktifkan sertifikat klien
<a name="activate-or-deactivate-device-cert"></a>

AWS IoT memverifikasi bahwa sertifikat klien aktif saat mengautentikasi koneksi.

Anda dapat membuat dan mendaftarkan sertifikat klien tanpa mengaktifkannya sehingga tidak dapat digunakan sampai Anda ingin menggunakannya. Anda juga dapat menonaktifkan sertifikat klien aktif untuk menonaktifkannya sementara. Terakhir, Anda dapat mencabut sertifikat klien untuk mencegahnya dari penggunaan di masa mendatang. 

## Aktifkan sertifikat klien (konsol)
<a name="activate-device-cert-console"></a>

**Untuk mengaktifkan sertifikat klien menggunakan AWS IoT konsol**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **Sertifikat**.

1. Dalam daftar sertifikat, cari sertifikat yang ingin Anda aktifkan, dan buka menu opsi dengan menggunakan ikon elipsis.

1. Di menu opsi, pilih **Aktifkan**.

Sertifikat harus ditampilkan sebagai **Aktif** dalam daftar sertifikat.

## Nonaktifkan sertifikat klien (konsol)
<a name="deactivate-device-cert-console"></a>

**Untuk menonaktifkan sertifikat klien menggunakan konsol AWS IoT**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **Sertifikat**.

1. Dalam daftar sertifikat, cari sertifikat yang ingin Anda nonaktifkan, dan buka menu opsi dengan menggunakan ikon elipsis.

1. Di menu opsi, pilih **Nonaktifkan**.

Sertifikat harus ditampilkan sebagai **Tidak Aktif** dalam daftar sertifikat.

## Aktifkan sertifikat klien (CLI)
<a name="activate-device-cert-cli"></a>

 AWS CLI Ini menyediakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)perintah untuk mengaktifkan sertifikat.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status ACTIVE
```

Jika perintah berhasil, status sertifikat akan menjadi`ACTIVE`. Jalankan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html)untuk melihat status sertifikat.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

## Nonaktifkan sertifikat klien (CLI)
<a name="deactivate-device-cert-cli"></a>

 AWS CLI Ini menyediakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)perintah untuk menonaktifkan sertifikat.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

Jika perintah berhasil, status sertifikat akan menjadi`INACTIVE`. Jalankan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html)untuk melihat status sertifikat.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# Lampirkan sesuatu atau kebijakan ke sertifikat klien
<a name="attach-to-cert"></a>

Ketika Anda membuat dan mendaftarkan sertifikat terpisah dari AWS IoT sesuatu, itu tidak akan memiliki kebijakan yang mengotorisasi AWS IoT operasi apa pun, juga tidak akan dikaitkan dengan objek apa AWS IoT pun. Bagian ini menjelaskan cara menambahkan hubungan ini ke sertifikat terdaftar.

**penting**  
Untuk menyelesaikan prosedur ini, Anda harus sudah membuat hal atau kebijakan yang ingin Anda lampirkan ke sertifikat.

Sertifikat mengautentikasi perangkat AWS IoT sehingga dapat terhubung. Melampirkan sertifikat ke sumber daya sesuatu menetapkan hubungan antara perangkat (melalui sertifikat) dan sumber daya benda. Untuk mengizinkan perangkat melakukan AWS IoT tindakan, seperti mengizinkan perangkat terhubung dan mempublikasikan pesan, kebijakan yang sesuai harus dilampirkan ke sertifikat perangkat. 

## Lampirkan sesuatu ke sertifikat klien (konsol)
<a name="attach-to-cert-thing-console"></a>

Anda akan memerlukan nama objek benda untuk menyelesaikan prosedur ini.

**Untuk melampirkan objek benda ke sertifikat terdaftar**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **Sertifikat**.

1. Dalam daftar sertifikat, cari sertifikat yang ingin Anda lampirkan kebijakan, buka menu opsi sertifikat dengan memilih ikon elipsis, dan pilih **Lampirkan** hal.

1. Di pop-up, cari nama benda yang ingin Anda lampirkan ke sertifikat, pilih kotak centang, dan pilih **Lampirkan**.

Objek benda sekarang harus muncul dalam daftar hal-hal di halaman detail sertifikat.

## Lampirkan kebijakan ke sertifikat klien (konsol)
<a name="attach-to-cert-policy-console"></a>

Anda akan memerlukan nama objek kebijakan untuk menyelesaikan prosedur ini.

**Untuk melampirkan objek kebijakan ke sertifikat terdaftar**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **Sertifikat**.

1. Dalam daftar sertifikat, cari sertifikat yang ingin Anda lampirkan kebijakan, buka menu opsi sertifikat dengan memilih ikon elipsis, dan pilih **Lampirkan** kebijakan. 

1. Di pop-up, cari nama kebijakan yang ingin dilampirkan ke sertifikat, pilih kotak centang, dan pilih **Lampirkan**.

Objek kebijakan sekarang akan muncul dalam daftar kebijakan di halaman detail sertifikat.

## Lampirkan sesuatu ke sertifikat klien (CLI)
<a name="attach-to-cert-thing-cli"></a>

 AWS CLI Memberikan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html)perintah untuk melampirkan benda benda ke sertifikat.

```
aws iot attach-thing-principal \
    --principal certificateArn \
    --thing-name thingName
```

## Lampirkan kebijakan ke sertifikat klien (CLI)
<a name="attach-to-cert-policy-cli"></a>

 AWS CLI Memberikan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html)perintah untuk melampirkan objek kebijakan ke sertifikat.

```
aws iot attach-policy \
    --target certificateArn \
    --policy-name policyName
```

# Mencabut sertifikat klien
<a name="revoke-ca-cert"></a>

Jika Anda mendeteksi aktivitas mencurigakan pada sertifikat klien terdaftar, Anda dapat mencabutnya sehingga tidak dapat digunakan lagi.

**catatan**  
Setelah sertifikat dicabut, statusnya tidak dapat diubah. Artinya, status sertifikat tidak dapat diubah menjadi `Active` atau status lainnya.

## Mencabut sertifikat klien (konsol)
<a name="revoke-device-cert-console"></a>

**Untuk mencabut sertifikat klien menggunakan konsol AWS IoT**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **Sertifikat**.

1. Dalam daftar sertifikat, cari sertifikat yang ingin Anda cabut, dan buka menu opsi dengan menggunakan ikon elipsis.

1. Di menu opsi, pilih **Cabut**.

Jika sertifikat berhasil dicabut, itu akan ditampilkan sebagai **Dicabut** dalam daftar sertifikat.

## Mencabut sertifikat klien (CLI)
<a name="revoke-device-cert-cli"></a>

 AWS CLI Memberikan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)perintah untuk mencabut sertifikat.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status REVOKED
```

Jika perintah berhasil, status sertifikat akan menjadi`REVOKED`. Jalankan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html)untuk melihat status sertifikat.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# Mentransfer sertifikat ke akun lain
<a name="transfer-cert"></a>

Sertifikat X.509 milik satu Akun AWS dapat ditransfer ke yang lain. Akun AWS

**Untuk mentransfer sertifikat X.509 dari satu ke yang lain Akun AWS**

1. [Mulai transfer sertifikat](#transfer-cert-init)

   Sertifikat harus dinonaktifkan dan terlepas dari semua kebijakan dan hal-hal sebelum memulai transfer.

1. [Menerima atau menolak transfer sertifikat](#transfer-cert-accept)

   Akun penerima harus secara eksplisit menerima atau menolak sertifikat yang ditransfer. Setelah akun penerima menerima sertifikat, sertifikat harus diaktifkan sebelum digunakan.

1. [Batalkan transfer sertifikat](#transfer-cert-cancel)

   Akun asal dapat membatalkan transfer, jika sertifikat belum diterima.

## Mulai transfer sertifikat
<a name="transfer-cert-init"></a>

Anda dapat mulai mentransfer sertifikat ke yang lain Akun AWS dengan menggunakan [AWS IoT konsol](https://console.aws.amazon.com/iot/home) atau AWS CLI.

### Mulai transfer sertifikat (konsol)
<a name="transfer-cert-init-console"></a>

Untuk menyelesaikan prosedur ini, Anda memerlukan ID sertifikat yang ingin Anda transfer.

Lakukan prosedur ini dari akun dengan sertifikat untuk ditransfer.

**Untuk mulai mentransfer sertifikat ke yang lain Akun AWS**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **Sertifikat**.

   Pilih sertifikat dengan status **Aktif** atau **Tidak Aktif** yang ingin Anda transfer dan buka halaman detailnya.

1. Pada halaman **Detail** sertifikat, di menu **Tindakan**, jika opsi **Nonaktifkan** tersedia, pilih opsi **Nonaktifkan** untuk menonaktifkan sertifikat.

1. Pada halaman **Detail** sertifikat, di menu sebelah kiri, pilih **Kebijakan**.

1. Pada halaman **Kebijakan** sertifikat, jika ada kebijakan yang dilampirkan pada sertifikat, lepaskan masing-masing dengan membuka menu opsi kebijakan dan memilih **Lepaskan**.

   Sertifikat tidak boleh memiliki kebijakan terlampir sebelum Anda melanjutkan.

1. Pada halaman **Kebijakan** sertifikat, di menu sebelah kiri, pilih **Things**.

1. Pada halaman **Things** sertifikat, jika ada hal yang dilampirkan pada sertifikat, lepaskan masing-masing dengan membuka menu opsi benda dan memilih **Lepaskan**.

   Sertifikat tidak boleh memiliki hal-hal terlampir sebelum Anda melanjutkan.

1. Pada halaman **Things** sertifikat, di menu sebelah kiri, pilih **Detail**.

1. Pada halaman **Detail** sertifikat, di menu **Tindakan**, pilih **Mulai transfer** untuk membuka kotak dialog **Mulai transfer**.

1. Dalam kotak dialog **Mulai transfer**, masukkan Akun AWS nomor akun untuk menerima sertifikat dan pesan singkat opsional.

1. Pilih **Mulai transfer** untuk mentransfer sertifikat.

Konsol harus menampilkan pesan yang menunjukkan keberhasilan atau kegagalan transfer. Jika transfer dimulai, status sertifikat diperbarui ke **Transfer**.

### Mulai transfer sertifikat (CLI)
<a name="transfer-cert-init-cli"></a>

Untuk menyelesaikan prosedur ini, Anda memerlukan *certificateId* dan sertifikat yang ingin Anda transfer. *certificateArn*

Lakukan prosedur ini dari akun dengan sertifikat untuk ditransfer.

**Untuk mulai mentransfer sertifikat ke AWS akun lain**

1. Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)perintah untuk menonaktifkan sertifikat.

   ```
   aws iot update-certificate --certificate-id certificateId --new-status INACTIVE
   ```

1. Lepaskan semua kebijakan.

   1. Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html)perintah untuk membuat daftar kebijakan yang dilampirkan pada sertifikat.

      ```
      aws iot list-attached-policies --target certificateArn
      ```

   1. Untuk setiap kebijakan terlampir, gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html)perintah untuk melepaskan kebijakan.

      ```
      aws iot detach-policy --target certificateArn --policy-name policy-name
      ```

1. Lepaskan semua hal.

   1. Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html)perintah untuk membuat daftar hal-hal yang dilampirkan pada sertifikat.

      ```
      aws iot list-principal-things --principal certificateArn
      ```

   1. Untuk setiap hal yang terlampir, gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html)perintah untuk melepaskan benda itu.

      ```
      aws iot detach-thing-principal --principal certificateArn --thing-name thing-name
      ```

1. Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html)perintah untuk memulai transfer sertifikat.

   ```
   aws iot transfer-certificate --certificate-id certificateId --target-aws-account account-id
   ```

## Menerima atau menolak transfer sertifikat
<a name="transfer-cert-accept"></a>

Anda dapat menerima atau menolak sertifikat yang ditransfer kepada Anda Akun AWS dari orang lain Akun AWS dengan menggunakan [AWS IoT konsol](https://console.aws.amazon.com/iot/home) atau. AWS CLI

### Menerima atau menolak transfer sertifikat (konsol)
<a name="transfer-cert-accept-console"></a>

Untuk menyelesaikan prosedur ini, Anda memerlukan ID sertifikat yang ditransfer ke akun Anda.

Lakukan prosedur ini dari akun yang menerima sertifikat yang ditransfer.

**Untuk menerima atau menolak sertifikat yang ditransfer ke Akun AWS**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **Sertifikat**.

   Pilih sertifikat dengan status **Transfer tertunda** yang ingin Anda terima atau tolak dan buka halaman detailnya.

1. Pada halaman **Detail** sertifikat, di menu **Tindakan**,
   + Untuk menerima sertifikat, pilih **Terima transfer**.
   + Untuk tidak menerima sertifikat, pilih **Tolak transfer**.

### Menerima atau menolak transfer sertifikat (CLI)
<a name="transfer-cert-accept-cli"></a>

Untuk menyelesaikan prosedur ini, Anda memerlukan transfer sertifikat yang ingin Anda terima atau tolak. *certificateId*

Lakukan prosedur ini dari akun yang menerima sertifikat yang ditransfer.

**Untuk menerima atau menolak sertifikat yang ditransfer ke Akun AWS**

1. Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html)perintah untuk menerima sertifikat.

   ```
   aws iot accept-certificate-transfer --certificate-id certificateId
   ```

1. Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html)perintah untuk menolak sertifikat.

   ```
   aws iot reject-certificate-transfer --certificate-id certificateId
   ```

## Batalkan transfer sertifikat
<a name="transfer-cert-cancel"></a>

Anda dapat membatalkan transfer sertifikat sebelum diterima dengan menggunakan [AWS IoT konsol](https://console.aws.amazon.com/iot/home) atau AWS CLI.

### Membatalkan transfer sertifikat (konsol)
<a name="transfer-cert-cancel-console"></a>

Untuk menyelesaikan prosedur ini, Anda memerlukan ID transfer sertifikat yang ingin Anda batalkan.

Lakukan prosedur ini dari akun yang memulai transfer sertifikat.

**Untuk membatalkan transfer sertifikat**

1. Masuk ke Konsol AWS Manajemen dan buka [AWS IoT konsol](https://console.aws.amazon.com/iot/home).

1. Di panel navigasi kiri, pilih **Aman**, pilih **Sertifikat**.

   Pilih sertifikat dengan status **Transfer** yang transfernya ingin Anda batalkan dan buka menu opsinya.

1. Pada menu opsi sertifikat, pilih opsi **Batalkan transfer** untuk membatalkan transfer sertifikat.
**penting**  
Berhati-hatilah untuk tidak salah mengira opsi **Batalkan transfer** dengan opsi **Cabut**.  
Opsi Batalkan **transfer membatalkan transfer** sertifikat, sedangkan opsi **Cabut membuat sertifikat tidak dapat digunakan secara** permanen oleh. AWS IoT

### Membatalkan transfer sertifikat (CLI)
<a name="transfer-cert-cancel-cli"></a>

Untuk menyelesaikan prosedur ini, Anda memerlukan transfer sertifikat yang ingin Anda batalkan. *certificateId*

Lakukan prosedur ini dari akun yang memulai transfer sertifikat.

Gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html)perintah untuk membatalkan transfer sertifikat.

```
aws iot cancel-certificate-transfer --certificate-id certificateId
```

# Validasi sertifikat klien kustom
<a name="customize-client-auth"></a>

AWS IoT Core mendukung validasi sertifikat klien khusus untuk sertifikat klien X.509, yang meningkatkan manajemen otentikasi klien. Metode validasi sertifikat ini juga dikenal sebagai pemeriksaan sertifikat pra-otentikasi, di mana Anda mengevaluasi sertifikat klien berdasarkan kriteria Anda sendiri (didefinisikan dalam fungsi Lambda) dan mencabut sertifikat klien atau sertifikat penandatanganan sertifikat otoritas sertifikat (CA) sertifikat untuk mencegah klien terhubung. AWS IoT Core Misalnya, Anda dapat membuat pemeriksaan pencabutan sertifikat sendiri yang memvalidasi status sertifikat terhadap otoritas validasi yang mendukung titik akhir [Protokol Status Sertifikat Online (OCSP) atau Daftar Pencabutan Sertifikat (CRL)](https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol)[, dan mencegah koneksi untuk klien dengan sertifikat yang dicabut](https://en.wikipedia.org/wiki/Certificate_revocation_list). Kriteria yang digunakan untuk mengevaluasi sertifikat klien didefinisikan dalam fungsi Lambda (juga dikenal sebagai Lambda pra-otentikasi). Anda harus menggunakan titik akhir yang ditetapkan dalam konfigurasi domain dan [jenis otentikasi](protocols.md#connection-protocol-auth-mode) harus sertifikat X.509. Selain itu, klien harus memberikan ekstensi [Server Name Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) saat menghubungkan ke AWS IoT Core.

**catatan**  
Fitur ini tidak didukung di AWS GovCloud (US) Wilayah.

**Topics**
+ [Langkah 1: Daftarkan sertifikat klien X.509 Anda dengan AWS IoT Core](#client-auth-cert-verification)
+ [Langkah 2: Buat fungsi Lambda](#customize-client-auth-lambda)
+ [Langkah 3: Otorisasi AWS IoT untuk menjalankan fungsi Lambda Anda](#customize-client-configuration-grant-permission)
+ [Langkah 4: Tetapkan konfigurasi otentikasi untuk domain](#customize-client-configuration)

## Langkah 1: Daftarkan sertifikat klien X.509 Anda dengan AWS IoT Core
<a name="client-auth-cert-verification"></a>

Jika Anda belum melakukan ini, daftar dan aktifkan sertifikat [klien X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) Anda dengan. AWS IoT Core Jika tidak, lewati ke langkah berikutnya.

Untuk mendaftar dan mengaktifkan sertifikat klien Anda AWS IoT Core, ikuti langkah-langkahnya:

1. Jika Anda [membuat sertifikat klien secara langsung dengan AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html). Sertifikat klien ini akan didaftarkan secara otomatis AWS IoT Core.

1. Jika Anda [membuat sertifikat klien Anda sendiri](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html), ikuti [petunjuk ini untuk mendaftarkannya AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html).

1. Untuk mengaktifkan sertifikat klien Anda, ikuti [petunjuk ini](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html).

## Langkah 2: Buat fungsi Lambda
<a name="customize-client-auth-lambda"></a>

Anda perlu membuat fungsi Lambda yang akan melakukan verifikasi sertifikat dan dipanggil untuk setiap upaya koneksi klien untuk titik akhir yang dikonfigurasi. Saat membuat fungsi Lambda ini, ikuti panduan umum dari [Buat fungsi Lambda pertama Anda](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html). Selain itu, pastikan bahwa fungsi Lambda mematuhi format permintaan dan respons yang diharapkan sebagai berikut:

**Contoh acara fungsi Lambda**

```
{
	"connectionMetadata": {
		"id": "string"
	},
	"principalId": "string",
	"serverName": "string",
	"clientCertificateChain": [
		"string",
		"string"
	]
}
```

`connectionMetadata`  
Metadata atau informasi tambahan yang terkait dengan koneksi klien ke. AWS IoT Core

`principalId`  
Pengidentifikasi utama yang terkait dengan klien dalam koneksi TLS.

`serverName`  
String [nama host Indikasi Nama Server (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1). AWS IoT Core membutuhkan perangkat untuk mengirim [ekstensi SNI](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) ke protokol Transport Layer Security (TLS) dan memberikan alamat endpoint lengkap di lapangan. `host_name`

`clientCertificateChain`  
Array string yang mewakili rantai sertifikat X.509 klien. 

**Contoh respons fungsi Lambda**

```
{
	"isAuthenticated": "boolean"
}
```

`isAuthenticated`  
Nilai Boolean yang menunjukkan apakah permintaan diautentikasi.

**catatan**  
Dalam tanggapan Lambda, `isAuthenticated` harus melanjutkan `true` ke otentikasi dan otorisasi lebih lanjut. Jika tidak, sertifikat klien IoT dapat dinonaktifkan dan otentikasi khusus dengan sertifikat klien X.509 dapat diblokir untuk otentikasi dan otorisasi lebih lanjut.

## Langkah 3: Otorisasi AWS IoT untuk menjalankan fungsi Lambda Anda
<a name="customize-client-configuration-grant-permission"></a>

[Setelah membuat fungsi Lambda, Anda harus memberikan izin AWS IoT untuk memanggilnya, dengan menggunakan perintah CLI izin tambahan.](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html) Perhatikan bahwa fungsi Lambda ini akan dipanggil untuk setiap upaya koneksi ke titik akhir yang dikonfigurasi. Untuk informasi selengkapnya, lihat [Mengotorisasi AWS IoT untuk menjalankan fungsi Lambda](custom-auth-authorize.md) Anda.

## Langkah 4: Tetapkan konfigurasi otentikasi untuk domain
<a name="customize-client-configuration"></a>

Bagian berikut menjelaskan cara mengatur konfigurasi otentikasi untuk domain kustom menggunakan. AWS CLI

### Tetapkan konfigurasi sertifikat klien untuk domain (CLI)
<a name="customize-client-auth-cli"></a>

Jika Anda tidak memiliki konfigurasi domain, gunakan perintah [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html)CLI untuk membuatnya. Jika Anda sudah memiliki konfigurasi domain, gunakan perintah [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html)CLI untuk memperbarui konfigurasi sertifikat klien untuk domain. Anda harus menambahkan ARN dari fungsi Lambda yang telah Anda buat pada langkah sebelumnya.

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config 'clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config '{"clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

`domain-configuration-name`  
Nama konfigurasi domain.

`authentication-type`  
Jenis otentikasi konfigurasi domain. Untuk informasi selengkapnya, lihat [memilih jenis autentikasi](protocols.md#connection-protocol-auth-mode).

`application-protocol`  
Protokol aplikasi yang digunakan perangkat untuk berkomunikasi AWS IoT Core. Untuk informasi selengkapnya, lihat [memilih protokol aplikasi](protocols.md#protocol-selection).

`client-certificate-config`  
Objek yang menentukan konfigurasi otentikasi klien untuk domain.

`clientCertificateCallbackArn`  
Nama Sumber Daya Amazon (ARN) dari fungsi Lambda yang AWS IoT dipanggil di lapisan TLS saat koneksi baru dibuat. Untuk menyesuaikan otentikasi klien untuk melakukan validasi sertifikat klien kustom, Anda harus menambahkan ARN dari fungsi Lambda yang telah Anda buat pada langkah sebelumnya.

Untuk informasi selengkapnya, lihat [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)dan [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)dari *Referensi AWS IoT API*. Untuk informasi selengkapnya tentang konfigurasi domain, lihat [Konfigurasi domain](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html).

# Pengguna IAM, grup IAM, dan IAM role
<a name="iam-users-groups-roles"></a>

Pengguna, grup, dan peran IAM adalah mekanisme standar untuk mengelola identitas dan otentikasi di. AWS Anda dapat menggunakannya untuk terhubung ke antarmuka AWS IoT HTTP menggunakan AWS SDK dan. AWS CLI

Peran IAM juga memungkinkan AWS IoT untuk mengakses AWS sumber daya lain di akun Anda atas nama Anda. Misalnya, jika Anda ingin perangkat mempublikasikan statusnya ke tabel DynamoDB, peran IAM AWS IoT memungkinkan untuk berinteraksi dengan Amazon DynamoDB. Untuk informasi lebih lanjut, lihat [Peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html).

Untuk koneksi broker pesan melalui HTTP, AWS IoT mengautentikasi pengguna, grup, dan peran menggunakan proses penandatanganan Versi Tanda Tangan 4. Untuk selengkapnya, lihat [Menandatangani Permintaan AWS API](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html).

Saat menggunakan AWS Signature Version 4 dengan AWS IoT, klien harus mendukung yang berikut dalam implementasi TLS mereka:
+ TLS 1.2
+ Validasi tanda tangan sertifikat SHA-256 RSA
+ Salah satu cipher suite dari bagian dukungan cipher suite TLS

Untuk informasi, lihat [Identitas dan manajemen akses untuk AWS IoT](security-iam.md).

# Identitas Amazon Cognito
<a name="cognito-identities"></a>

Amazon Cognito Identity memungkinkan Anda membuat AWS kredensyal hak istimewa sementara dan terbatas untuk digunakan dalam aplikasi seluler dan web. Saat Anda menggunakan Identitas Amazon Cognito, buat kumpulan identitas yang membuat identitas unik untuk pengguna Anda dan autentikasi dengan penyedia identitas seperti Login with Amazon, Facebook, dan Google. Anda juga dapat menggunakan identitas Amazon Cognito dengan identitas otentikasi pengembang Anda sendiri. Untuk informasi selengkapnya, lihat [Identitas Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html).

Untuk menggunakan Identitas Amazon Cognito, tentukan kumpulan identitas Amazon Cognito yang dikaitkan dengan peran IAM. Peran IAM dikaitkan dengan kebijakan IAM yang memberikan izin identitas dari kumpulan identitas Anda untuk mengakses AWS sumber daya seperti layanan panggilan. AWS 

Identitas Amazon Cognito menciptakan identitas yang tidak diautentikasi dan diautentikasi. Identitas yang tidak diautentikasi digunakan untuk pengguna tamu di aplikasi seluler atau web yang ingin menggunakan aplikasi tanpa masuk. Pengguna yang tidak diautentikasi hanya diberikan izin yang ditentukan dalam kebijakan IAM yang terkait dengan kumpulan identitas.

Saat Anda menggunakan identitas yang diautentikasi, selain kebijakan IAM yang dilampirkan pada kumpulan identitas, Anda harus melampirkan AWS IoT kebijakan ke Identitas Amazon Cognito. Untuk melampirkan AWS IoT kebijakan, gunakan [ AttachPolicy](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachPolicy.html)API dan berikan izin kepada pengguna individual AWS IoT aplikasi Anda. Anda dapat menggunakan AWS IoT kebijakan ini untuk menetapkan izin berbutir halus bagi pelanggan tertentu dan perangkat mereka.

Pengguna yang diautentikasi dan tidak diautentikasi adalah jenis identitas yang berbeda. Jika Anda tidak melampirkan AWS IoT kebijakan ke Identitas Amazon Cognito, pengguna yang diautentikasi akan gagal melakukan otorisasi AWS IoT dan tidak memiliki akses ke AWS IoT sumber daya dan tindakan. Untuk informasi selengkapnya tentang membuat kebijakan untuk identitas Amazon Cognito, lihat dan. [Contoh kebijakan Publikasi/Berlangganan](pub-sub-policy.md) [Otorisasi dengan identitas Amazon Cognito](cog-iot-policies.md)

![\[Aplikasi mengakses perangkat dengan Amazon Cognito Identity.\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/device-cognito.png)


# Autentikasi dan otorisasi kustom
<a name="custom-authentication"></a>

 AWS IoT Core memungkinkan Anda menentukan otorisasi khusus sehingga Anda dapat mengelola otentikasi dan otorisasi klien Anda sendiri. Ini berguna ketika Anda perlu menggunakan mekanisme otentikasi selain yang mendukung AWS IoT Core secara asli. (Untuk informasi lebih lanjut tentang mekanisme yang didukung secara asli, lihat[Autentikasi Klien](client-authentication.md)).  

 Misalnya, jika Anda memigrasikan perangkat yang ada di bidang ke AWS IoT Core dan perangkat ini menggunakan token pembawa kustom atau nama pengguna dan kata sandi MQTT untuk mengautentikasi, Anda dapat memigrasikannya AWS IoT Core tanpa harus memberikan identitas baru untuknya. Anda dapat menggunakan otentikasi khusus dengan salah satu protokol komunikasi yang mendukung. AWS IoT Core Untuk informasi selengkapnya tentang protokol yang AWS IoT Core mendukung, lihat. [Protokol komunikasi perangkat](protocols.md) 

**Topics**
+ [Memahami alur kerja otentikasi kustom](custom-authorizer.md)
+ [Membuat dan mengelola otorisasi kustom (CLI)](config-custom-auth.md)
+ [Otentikasi khusus dengan sertifikat klien X.509](custom-auth-509cert.md)
+ [Menghubungkan ke AWS IoT Core dengan menggunakan otentikasi kustom](custom-auth.md)
+ [Memecahkan masalah otorisasi Anda](custom-auth-troubleshooting.md)

# Memahami alur kerja otentikasi kustom
<a name="custom-authorizer"></a>

[Otentikasi khusus memungkinkan Anda menentukan cara mengautentikasi dan mengotorisasi klien dengan menggunakan sumber daya otorisasi.](https://docs.aws.amazon.com/iot/latest/apireference/API_AuthorizerDescription.html)  Setiap authorizer berisi referensi ke fungsi Lambda yang dikelola pelanggan, kunci publik opsional untuk memvalidasi kredensi perangkat, dan informasi konfigurasi tambahan. Diagram berikut menggambarkan alur kerja otorisasi untuk otentikasi kustom di. AWS IoT Core

![\[Alur kerja otorisasi khusus untuk otentikasi khusus di. AWS IoT Core\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/custom-authentication.png)


## AWS IoT Core otentikasi kustom dan alur kerja otorisasi
<a name="custom-authentication-workflow"></a>

Daftar berikut menjelaskan setiap langkah dalam alur kerja autentikasi dan otorisasi kustom.

1. Perangkat terhubung ke titik akhir AWS IoT Core data pelanggan dengan menggunakan salah satu yang didukung[Protokol komunikasi perangkat](protocols.md). Perangkat meneruskan kredensyal baik di bidang header permintaan atau parameter kueri (untuk HTTP Publish atau MQTT melalui WebSockets protokol), atau di bidang nama pengguna dan kata sandi pesan MQTT CONNECT (untuk MQTT dan MQTT melalui protokol). WebSockets 

1. AWS IoT Core memeriksa salah satu dari dua kondisi:
   + Permintaan yang masuk menentukan otorisasi.
   + Titik akhir AWS IoT Core data yang menerima permintaan memiliki otorisasi default yang dikonfigurasi untuknya.

   Jika AWS IoT Core menemukan otorisasi dengan salah satu cara ini, AWS IoT Core memicu fungsi Lambda yang terkait dengan otorisasi.

1.  (Opsional) Jika Anda telah mengaktifkan penandatanganan token, AWS IoT Core validasi tanda tangan permintaan dengan menggunakan kunci publik yang disimpan di otorisasi sebelum memicu fungsi Lambda. Jika validasi gagal, AWS IoT Core hentikan permintaan tanpa menjalankan fungsi Lambda.  

1. Fungsi Lambda menerima kredensyal dan metadata koneksi dalam permintaan dan membuat keputusan otentikasi.

1. Fungsi Lambda mengembalikan hasil keputusan otentikasi dan dokumen AWS IoT Core kebijakan yang menentukan tindakan apa yang diizinkan dalam koneksi. Fungsi Lambda juga mengembalikan informasi yang menentukan seberapa sering AWS IoT Core memvalidasi ulang kredensyal dalam permintaan dengan menjalankan fungsi Lambda.

1. AWS IoT Core mengevaluasi aktivitas pada koneksi terhadap kebijakan yang diterimanya dari fungsi Lambda.

1. Setelah koneksi dibuat dan Lambda otorisasi kustom Anda awalnya dipanggil, pemanggilan berikutnya dapat ditunda hingga 5 menit pada koneksi idle tanpa operasi MQTT apa pun. Setelah itu, pemanggilan berikutnya akan mengikuti interval penyegaran di Lambda otorisasi khusus Anda. Pendekatan ini dapat mencegah pemanggilan berlebihan yang dapat melebihi batas konkurensi Lambda Anda. Akun AWS

## Pertimbangan penskalaan
<a name="custom-authentication-scaling"></a>

 Karena fungsi Lambda menangani otentikasi dan otorisasi untuk otorisasi Anda, fungsi tersebut tunduk pada harga Lambda dan batas layanan, seperti tingkat eksekusi bersamaan. [Untuk informasi selengkapnya tentang harga Lambda, lihat Harga Lambda.](https://aws.amazon.com/lambda/pricing/) Anda dapat mengelola beban pada fungsi Lambda Anda dengan menyesuaikan `refreshAfterInSeconds` dan `disconnectAfterInSeconds` parameter dalam respons fungsi Lambda Anda. Untuk informasi selengkapnya tentang isi respons fungsi Lambda Anda, lihat. [Mendefinisikan fungsi Lambda Anda](custom-auth-lambda.md)

**catatan**  
Jika Anda membiarkan penandatanganan diaktifkan, Anda dapat mencegah pemicu Lambda yang berlebihan oleh klien yang tidak dikenal. Pertimbangkan ini sebelum Anda menonaktifkan penandatanganan di otorisasi Anda.

**catatan**  
Batas waktu tunggu fungsi Lambda untuk otorisasi khusus adalah 5 detik.

# Membuat dan mengelola otorisasi kustom (CLI)
<a name="config-custom-auth"></a>

AWS IoT Core mengimplementasikan otentikasi kustom dan skema otorisasi dengan menggunakan otorisasi kustom. Authorizer kustom adalah AWS IoT Core sumber daya yang memberi Anda fleksibilitas untuk menentukan dan menerapkan aturan dan kebijakan berdasarkan persyaratan spesifik Anda. Untuk membuat otorisasi khusus dengan step-by-step instruksi, lihat [Tutorial: Membuat otorisasi khusus](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html) untuk. AWS IoT Core

Setiap authorizer terdiri dari komponen-komponen berikut: 
+  *Nama*: String unik yang ditentukan pengguna yang mengidentifikasi otorisasi.
+  Fungsi *Lambda ARN:* Nama Sumber Daya Amazon (ARN) dari fungsi Lambda yang mengimplementasikan logika otorisasi dan otentikasi.  
+  *Nama kunci token: Nama* kunci yang digunakan untuk mengekstrak token dari header HTTP, parameter kueri, atau nama pengguna MQTT CONNECT untuk melakukan validasi tanda tangan. Nilai ini diperlukan jika penandatanganan diaktifkan di otorisasi Anda. 
+  *Penandatanganan flag dinonaktifkan (opsional)*: Nilai Boolean yang menentukan apakah akan menonaktifkan persyaratan penandatanganan pada kredensyal. Ini berguna untuk skenario di mana penandatanganan kredensyal tidak masuk akal, seperti skema otentikasi yang menggunakan nama pengguna dan kata sandi MQTT. Nilai defaultnya adalah`false`, jadi penandatanganan diaktifkan secara default. 
+  *Kunci publik penandatanganan token*: Kunci publik yang AWS IoT Core digunakan untuk memvalidasi tanda tangan token. Panjang minimumnya adalah 2.048 bit. Nilai ini diperlukan jika penandatanganan diaktifkan di otorisasi Anda.  

Lambda menagih Anda untuk berapa kali fungsi Lambda Anda berjalan dan untuk jumlah waktu yang diperlukan untuk kode dalam fungsi Anda untuk mengeksekusi. [Untuk informasi selengkapnya tentang harga Lambda, lihat Harga Lambda.](https://aws.amazon.com/lambda/pricing/) Untuk informasi selengkapnya tentang membuat fungsi Lambda, lihat Panduan Pengembang [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/).

**catatan**  
Jika Anda membiarkan penandatanganan diaktifkan, Anda dapat mencegah pemicu Lambda yang berlebihan oleh klien yang tidak dikenal. Pertimbangkan ini sebelum Anda menonaktifkan penandatanganan di otorisasi Anda.

**catatan**  
Batas waktu tunggu fungsi Lambda untuk otorisasi khusus adalah 5 detik.

**Topics**
+ [Mendefinisikan fungsi Lambda Anda](custom-auth-lambda.md)
+ [Membuat Authorizer](custom-auth-create-authorizer.md)
+ [Otorisasi AWS IoT untuk menjalankan fungsi Lambda Anda](custom-auth-authorize.md)
+ [Menguji otorisasi Anda](custom-auth-testing.md)
+ [Mengelola otorisasi khusus](custom-auth-manage.md)

# Mendefinisikan fungsi Lambda Anda
<a name="custom-auth-lambda"></a>

 Saat AWS IoT Core memanggil otorisasi Anda, itu memicu Lambda terkait yang terkait dengan otorisasi dengan peristiwa yang berisi objek JSON berikut. Contoh objek JSON berisi semua bidang yang mungkin. Bidang apa pun yang tidak relevan dengan permintaan koneksi tidak disertakan.

```
{
    "token" :"aToken",
    "signatureVerified": Boolean, // Indicates whether the device gateway has validated the signature.
    "protocols": ["tls", "http", "mqtt"], // Indicates which protocols to expect for the request.
    "protocolData": {
        "tls" : {
            "serverName": "serverName" // The server name indication (SNI) host_name string.
        },
        "http": {
            "headers": {
                "#{name}": "#{value}"
            },
            "queryString": "?#{name}=#{value}"
        },
        "mqtt": {
            "username": "myUserName",
            "password": "myPassword", // A base64-encoded string.
            "clientId": "myClientId" // Included in the event only when the device sends the value.
        }
    },
    "connectionMetadata": {
        "id": UUID // The connection ID. You can use this for logging.
    },
}
```

 Fungsi Lambda harus menggunakan informasi ini untuk mengautentikasi koneksi yang masuk dan memutuskan tindakan apa yang diizinkan dalam koneksi. Fungsi harus mengirim respons yang berisi nilai-nilai berikut. 
+  `isAuthenticated`: Nilai Boolean yang menunjukkan apakah permintaan diautentikasi.
+  `principalId`: String alfanumerik yang bertindak sebagai pengidentifikasi untuk token yang dikirim oleh permintaan otorisasi kustom. Nilai harus berupa string alfanumerik dengan setidaknya satu, dan tidak lebih dari 128, karakter dan cocok dengan pola ekspresi reguler (regex) ini:. `([a-zA-Z0-9]){1,128}` Karakter khusus yang tidak alfanumerik tidak diizinkan untuk digunakan dengan in. `principalId` AWS IoT Core Lihat dokumentasi untuk AWS layanan lain jika karakter khusus non-alfanumerik diizinkan untuk. `principalId`
+  `policyDocuments`: Daftar dokumen AWS IoT Core kebijakan berformat JSON Untuk informasi selengkapnya tentang membuat AWS IoT Core kebijakan, lihat. [AWS IoT Core kebijakan](iot-policies.md) Jumlah maksimum dokumen kebijakan adalah 10 dokumen kebijakan. Setiap dokumen kebijakan dapat berisi maksimal 2.048 karakter.
+  `disconnectAfterInSeconds`: Sebuah integer yang menentukan durasi maksimum (dalam detik) dari koneksi ke gateway. AWS IoT Core Nilai minimum adalah 300 detik, dan nilai maksimumnya adalah 86.400 detik. Nilai defaultnya adalah 86.400.
**catatan**  
Nilai `disconnectAfterInSeconds` (dikembalikan oleh fungsi Lambda) diatur saat koneksi dibuat. Nilai ini tidak dapat diubah selama pemanggilan Lambda refresh kebijakan berikutnya.
+  `refreshAfterInSeconds`: Sebuah integer yang menentukan interval antara kebijakan refresh. Ketika interval ini berlalu, AWS IoT Core memanggil fungsi Lambda untuk mengizinkan refresh kebijakan. Nilai minimum adalah 300 detik, dan nilai maksimumnya adalah 86.400 detik. 

  Objek JSON berikut berisi contoh respons yang dapat dikirim oleh fungsi Lambda Anda. 

 **\$1 "isAuthenticated":true, //A Boolean that determines whether client can connect. "principalId": "xxxxxxxx",  //A string that identifies the connection in logs. "disconnectAfterInSeconds": 86400,  "refreshAfterInSeconds": 300,   "policyDocuments": [       \$1         "Version": "2012-10-17",         "Statement": [            \$1               "Action": "iot:Publish",               "Effect": "Allow",               "Resource": "arn:aws:iot:us-east-1:<your\$1aws\$1account\$1id>:topic/customauthtesting"             \$1          ]        \$1     ] \$1**

 `policyDocument`Nilai harus berisi dokumen AWS IoT Core kebijakan yang valid. Untuk informasi selengkapnya tentang AWS IoT Core kebijakan, lihat[AWS IoT Core kebijakan](iot-policies.md). Di MQTT melalui TLS dan MQTT melalui WebSockets koneksi, AWS IoT Core cache kebijakan ini untuk interval yang ditentukan dalam nilai bidang. `refreshAfterInSeconds` Dalam kasus koneksi HTTP, fungsi Lambda dipanggil untuk setiap permintaan otorisasi kecuali perangkat Anda menggunakan koneksi persisten HTTP (juga disebut HTTP keep-alive atau penggunaan kembali koneksi HTTP) Anda dapat memilih untuk mengaktifkan caching saat mengonfigurasi otorisasi. Selama interval ini, AWS IoT Core mengotorisasi tindakan dalam koneksi yang dibuat terhadap kebijakan cache ini tanpa memicu fungsi Lambda Anda lagi. Jika kegagalan terjadi selama otentikasi kustom, AWS IoT Core menghentikan koneksi. AWS IoT Core juga mengakhiri koneksi jika telah terbuka lebih lama dari nilai yang ditentukan dalam `disconnectAfterInSeconds` parameter. 

 Berikut ini JavaScript berisi contoh fungsi Lambda Node.js yang mencari kata sandi dalam pesan MQTT Connect dengan nilai `test` dan mengembalikan kebijakan yang memberikan izin untuk terhubung dengan klien `myClientName` bernama dan memublikasikan AWS IoT Core ke topik yang berisi nama klien yang sama. Jika tidak menemukan kata sandi yang diharapkan, ia mengembalikan kebijakan yang menyangkal kedua tindakan tersebut. 

```
// A simple Lambda function for an authorizer. It demonstrates 
// how to parse an MQTT password and generate a response.

exports.handler = function(event, context, callback) { 
    var uname = event.protocolData.mqtt.username;
    var pwd = event.protocolData.mqtt.password;
    var buff = new Buffer(pwd, 'base64');
    var passwd = buff.toString('ascii');
    switch (passwd) { 
        case 'test': 
            callback(null, generateAuthResponse(passwd, 'Allow')); 
            break;
        default: 
            callback(null, generateAuthResponse(passwd, 'Deny'));  
    }
};

// Helper function to generate the authorization response.
var generateAuthResponse = function(token, effect) { 
    var authResponse = {}; 
    authResponse.isAuthenticated = true; 
    authResponse.principalId = 'TEST123'; 
    
    var policyDocument = {}; 
    policyDocument.Version = '2012-10-17';		 	 	 
    policyDocument.Statement = []; 
    var publishStatement = {}; 
    var connectStatement = {};
    connectStatement.Action = ["iot:Connect"];
    connectStatement.Effect = effect;
    connectStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:client/myClientName"];
    publishStatement.Action = ["iot:Publish"]; 
    publishStatement.Effect = effect; 
    publishStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"]; 
    policyDocument.Statement[0] = connectStatement;
    policyDocument.Statement[1] = publishStatement; 
    authResponse.policyDocuments = [policyDocument]; 
    authResponse.disconnectAfterInSeconds = 3600; 
    authResponse.refreshAfterInSeconds = 300;
    
    return authResponse; 
}
```

 Fungsi Lambda sebelumnya mengembalikan JSON berikut ketika menerima kata sandi yang diharapkan dari dalam `test` pesan MQTT Connect. Nilai `password` dan `principalId` properti akan menjadi nilai dari pesan MQTT Connect.

```
{
  "password": "password",
  "isAuthenticated": true,
  "principalId": "principalId",
  "policyDocuments": [
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": "iot:Connect",
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Action": "iot:Publish",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Subscribe",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topicfilter/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Receive",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        }
      ]
    }
  ],
  "disconnectAfterInSeconds": 3600,
  "refreshAfterInSeconds": 300
}
```

# Membuat Authorizer
<a name="custom-auth-create-authorizer"></a>

 Anda dapat membuat authorizer dengan menggunakan [CreateAuthorizerAPI](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateAuthorizer.html). Contoh berikut menjelaskan perintah. 

```
aws iot create-authorizer
--authorizer-name MyAuthorizer
--authorizer-function-arn arn:aws:lambda:us-west-2:<account_id>:function:MyAuthorizerFunction  //The ARN of the Lambda function.
[--token-key-name MyAuthorizerToken //The key used to extract the token from headers.
[--token-signing-public-keys FirstKey=
 "-----BEGIN PUBLIC KEY-----
  [...insert your public key here...] 
  -----END PUBLIC KEY-----"
[--status ACTIVE]
[--tags <value>]
[--signing-disabled | --no-signing-disabled]
```

Anda dapat menggunakan `signing-disabled` parameter untuk memilih keluar dari validasi tanda tangan untuk setiap pemanggilan otorisasi Anda. Kami sangat menyarankan agar Anda tidak menonaktifkan penandatanganan kecuali Anda harus melakukannya. Validasi tanda tangan melindungi Anda dari pemanggilan berlebihan fungsi Lambda Anda dari perangkat yang tidak dikenal. Anda tidak dapat memperbarui `signing-disabled` status otorisasi setelah Anda membuatnya. Untuk mengubah perilaku ini, Anda harus membuat otorisasi khusus lain dengan nilai `signing-disabled` parameter yang berbeda. 

Nilai untuk `tokenSigningPublicKeys` parameter `tokenKeyName` dan bersifat opsional jika Anda menonaktifkan penandatanganan. Mereka adalah nilai yang diperlukan jika penandatanganan diaktifkan. 

Setelah Anda membuat fungsi Lambda dan otorisasi kustom, Anda harus secara eksplisit memberikan izin AWS IoT Core layanan untuk memanggil fungsi atas nama Anda. Anda dapat melakukan ini dengan perintah berikut. 

**catatan**  
Titik akhir IoT default mungkin tidak mendukung penggunaan otorisasi khusus dengan fungsi Lambda. Sebagai gantinya, Anda dapat menggunakan konfigurasi domain untuk menentukan titik akhir baru dan kemudian menentukan titik akhir tersebut untuk otorisasi kustom.

```
aws lambda add-permission --function-name <lambda_function_name>
--principal iot.amazonaws.com --source-arn <authorizer_arn>
--statement-id Id-123 --action "lambda:InvokeFunction"
```

# Otorisasi AWS IoT untuk menjalankan fungsi Lambda Anda
<a name="custom-auth-authorize"></a>

Di bagian ini, Anda akan memberikan izin dari sumber otorisasi kustom yang baru saja Anda buat untuk menjalankan fungsi Lambda. Untuk memberikan izin, Anda dapat menggunakan perintah CLI [izin tambahan](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html).

**Berikan izin ke fungsi Lambda Anda menggunakan AWS CLI**

1. Setelah memasukkan nilai Anda, masukkan perintah berikut. Perhatikan bahwa `statement-id` nilainya harus unik. Ganti `Id-1234` dengan nilai persis yang Anda miliki, jika tidak, Anda mungkin mendapatkan `ResourceConflictException` kesalahan.

   ```
   aws lambda add-permission  \
   --function-name "custom-auth-function" \
   --principal "iot.amazonaws.com" \
   --action "lambda:InvokeFunction" \
   --statement-id "Id-1234" \
   --source-arn authorizerArn
   ```

1. Jika perintah berhasil, ia mengembalikan pernyataan izin, seperti contoh ini. Anda dapat melanjutkan ke bagian berikutnya untuk menguji otorisasi khusus.

   ```
   {
       "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\"}}}"
   }
   ```

   Jika perintah tidak berhasil, ia mengembalikan kesalahan, seperti contoh ini. Anda harus meninjau dan memperbaiki kesalahan sebelum melanjutkan.

   ```
   An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer
   mission on resource: arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function
   ```

# Menguji otorisasi Anda
<a name="custom-auth-testing"></a>

 Anda dapat menggunakan [TestInvokeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_TestInvokeAuthorizer.html)API untuk menguji pemanggilan dan mengembalikan nilai otorisasi Anda. API ini memungkinkan Anda menentukan metadata protokol dan menguji validasi tanda tangan di otorisasi Anda.

Tab berikut menunjukkan cara menggunakan AWS CLI untuk menguji otorisasi Anda.

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER \
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER ^
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------
#### [ Windows PowerShell ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER `
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------

Nilai `token-signature` parameter adalah token yang ditandatangani. Untuk mempelajari cara mendapatkan nilai ini, lihat[Menandatangani token](custom-auth.md#custom-auth-token-signature).

Jika otorisasi Anda mengambil nama pengguna dan kata sandi, Anda dapat meneruskan informasi ini dengan menggunakan `--mqtt-context` parameter. Tab berikut menunjukkan cara menggunakan `TestInvokeAuthorizer` API untuk mengirim objek JSON yang berisi nama pengguna, kata sandi, dan nama klien ke otorisasi kustom Anda.

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  \
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  ^
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------
#### [ Windows PowerShell ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  `
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------

Kata sandi harus dikodekan base64. Contoh berikut menunjukkan cara menyandikan kata sandi di lingkungan mirip Unix.

```
echo -n PASSWORD | base64
```

# Mengelola otorisasi khusus
<a name="custom-auth-manage"></a>

 Anda dapat mengelola otorisasi Anda dengan menggunakan yang berikut APIs ini. 
+ [ListAuthorizers](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuthorizers.html): Tampilkan semua otorisasi di akun Anda.
+  [DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html): Menampilkan properti dari authorizer yang ditentukan. Nilai-nilai ini termasuk tanggal pembuatan, tanggal modifikasi terakhir, dan atribut lainnya.
+ [SetDefaultAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_SetDefaultAuthorizer.html): Menentukan authorizer default untuk endpoint AWS IoT Core data Anda. AWS IoT Core menggunakan otorisasi ini jika perangkat tidak meneruskan AWS IoT Core kredensyal dan tidak menentukan otorisasi. Untuk informasi selengkapnya tentang penggunaan AWS IoT Core kredensyal, lihat. [Autentikasi Klien](client-authentication.md)
+ [UpdateAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateAuthorizer.html): Mengubah status, nama kunci token, atau kunci publik untuk otorisasi yang ditentukan.
+  [DeleteAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteAuthorizer.html): Menghapus otorisasi yang ditentukan. 

**catatan**  
 Anda tidak dapat memperbarui persyaratan penandatanganan otorisasi. Ini berarti Anda tidak dapat menonaktifkan penandatanganan di otorisasi yang sudah ada yang memerlukannya. Anda juga tidak dapat meminta masuk ke otorisasi yang sudah ada yang tidak memerlukannya. 

# Otentikasi khusus dengan sertifikat klien X.509
<a name="custom-auth-509cert"></a>

Saat menghubungkan perangkat AWS IoT Core, Anda memiliki beberapa [jenis otentikasi](protocols.md#connection-protocol-auth-mode) yang tersedia. Anda dapat menggunakan [sertifikat klien X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) yang dapat digunakan untuk mengautentikasi koneksi klien dan perangkat, atau menentukan [otorisasi khusus untuk mengelola otentikasi klien dan logika otorisasi](https://docs.aws.amazon.com//iot/latest/developerguide/custom-authentication.html) Anda sendiri. Topik ini mencakup cara menggunakan otentikasi khusus dengan sertifikat klien X.509.

Menggunakan otentikasi kustom dengan sertifikat X.509 dapat membantu jika Anda telah mengautentikasi perangkat Anda menggunakan sertifikat X.509 dan ingin melakukan validasi tambahan dan otorisasi khusus. Misalnya, jika Anda menyimpan data perangkat Anda seperti nomor seri mereka dalam sertifikat klien X.509, setelah AWS IoT Core mengautentikasi sertifikat klien X.509, Anda dapat menggunakan otorisasi khusus untuk mengidentifikasi perangkat tertentu berdasarkan informasi yang disimpan di bidang sertifikat. CommonName Menggunakan otentikasi khusus dengan sertifikat X.509 dapat meningkatkan manajemen keamanan perangkat Anda saat menghubungkan perangkat ke AWS IoT Core dan memberikan lebih banyak fleksibilitas untuk mengelola logika otentikasi dan otorisasi. AWS IoT Core [https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html) [Untuk informasi selengkapnya tentang jenis autentikasi dan protokol aplikasi yang didukung titik akhir AWS IoT Core perangkat, lihat Protokol komunikasi perangkat.](https://docs.aws.amazon.com//iot/latest/developerguide/protocols.html)

**catatan**  
Otentikasi kustom dengan sertifikat klien X.509 tidak didukung di Wilayah. AWS GovCloud (US) 

**penting**  
Anda harus menggunakan endpoint yang dibuat menggunakan [konfigurasi domain](iot-custom-endpoints-configurable.md). Selain itu, klien harus memberikan ekstensi [Server Name Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) saat menghubungkan ke AWS IoT Core.

**Topics**
+ [Langkah 1: Daftarkan sertifikat klien X.509 Anda dengan AWS IoT Core](#custom-auth-509cert-client)
+ [Langkah 2: Buat fungsi Lambda](#custom-auth-509cert-lambda)
+ [Langkah 3: Buat otorisasi khusus](#custom-auth-509cert-authorizer)
+ [Langkah 4: Tetapkan jenis otentikasi dan protokol aplikasi dalam konfigurasi domain](#custom-auth-509cert-domainconfig)

## Langkah 1: Daftarkan sertifikat klien X.509 Anda dengan AWS IoT Core
<a name="custom-auth-509cert-client"></a>

Jika Anda belum melakukan ini, daftar dan aktifkan sertifikat [klien X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) Anda dengan. AWS IoT Core Jika tidak, lewati ke langkah berikutnya.

Untuk mendaftar dan mengaktifkan sertifikat klien Anda AWS IoT Core, ikuti langkah-langkahnya:

1. Jika Anda [membuat sertifikat klien secara langsung dengan AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html). Sertifikat klien ini akan didaftarkan secara otomatis AWS IoT Core.

1. Jika Anda [membuat sertifikat klien Anda sendiri](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html), ikuti [petunjuk ini untuk mendaftarkannya AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html).

1. Untuk mengaktifkan sertifikat klien Anda, ikuti [petunjuk ini](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html).

## Langkah 2: Buat fungsi Lambda
<a name="custom-auth-509cert-lambda"></a>

AWS IoT Core menggunakan otorisasi khusus untuk menerapkan otentikasi kustom dan skema otorisasi. Authorizer khusus dikaitkan dengan fungsi Lambda yang menentukan apakah perangkat diautentikasi dan operasi apa yang diizinkan untuk dilakukan perangkat. Saat perangkat terhubung AWS IoT Core, AWS IoT Core mengambil detail otorisasi termasuk nama otorisasi dan fungsi Lambda terkait, dan memanggil fungsi Lambda. Fungsi Lambda menerima peristiwa yang berisi objek JSON dengan data sertifikat klien X.509 perangkat. Fungsi Lambda Anda menggunakan objek JSON peristiwa ini untuk mengevaluasi permintaan otentikasi, memutuskan tindakan yang akan diambil, dan mengirim respons kembali.

### Contoh acara fungsi Lambda
<a name="custom-auth-509cert-event"></a>

Contoh objek JSON berikut berisi semua bidang yang mungkin yang dapat disertakan. Objek JSON yang sebenarnya hanya akan berisi bidang yang relevan dengan permintaan koneksi tertentu.

```
{
	"token": "aToken",
	"signatureVerified": true,
	"protocols": [
		"tls",
		"mqtt"
	],
	"protocolData": {
		"tls": {
			"serverName": "serverName",
			"x509CertificatePem": "x509CertificatePem",
			"principalId": "principalId"
		},
		"mqtt": {
			"clientId": "myClientId",
                     "username": "myUserName",
                     "password": "myPassword"
		}
	},
	"connectionMetadata": {
		"id": "UUID"
	}
}
```

`signatureVerified`  
Nilai Boolean yang menunjukkan apakah tanda tangan token yang dikonfigurasi di otorisasi diverifikasi atau tidak sebelum menjalankan fungsi Lambda otorisasi. Jika otorisasi dikonfigurasi untuk menonaktifkan penandatanganan token, bidang ini akan salah. 

`protocols`  
Array yang berisi protokol yang diharapkan untuk permintaan.

`protocolData`  
Objek yang berisi informasi protokol yang digunakan dalam koneksi. Ini memberikan rincian spesifik protokol yang dapat berguna untuk otentikasi, otorisasi, dan banyak lagi.  
`tls`- Objek ini menyimpan informasi yang terkait dengan protokol TLS (Transport Layer Security).   
+ `serverName`- String [nama host Indikasi Nama Server (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1). AWS IoT Core membutuhkan perangkat untuk mengirim [ekstensi SNI](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) ke protokol Transport Layer Security (TLS) dan memberikan alamat endpoint lengkap di lapangan. `host_name`
+ `x509CertificatePem`- Sertifikat X.509 dalam format PEM, yang digunakan untuk otentikasi klien dalam koneksi TLS.
+ `principalId`- Pengidentifikasi utama yang terkait dengan klien dalam koneksi TLS.
`mqtt`- Objek ini menyimpan informasi yang terkait dengan protokol MQTT.  
+ `clientId`- String hanya perlu disertakan jika perangkat mengirimkan nilai ini.
+ `username`- Nama pengguna yang disediakan dalam paket MQTT Connect.
+ `password`- Kata sandi yang disediakan dalam paket MQTT Connect.

`connectionMetadata`  
Metadata koneksi.  
`id`- ID koneksi, yang dapat Anda gunakan untuk logging dan pemecahan masalah.

**catatan**  
Dalam acara ini objek JSON, `x509CertificatePem` dan `principalId` dua bidang baru dalam permintaan. Nilai `principalId` adalah sama dengan nilai`certificateId`. Untuk informasi selengkapnya, lihat [Sertifikat](https://docs.aws.amazon.com//iot/latest/apireference/API_Certificate.html).

### Contoh respons fungsi Lambda
<a name="custom-auth-509cert-response"></a>

Fungsi Lambda harus menggunakan informasi dari objek JSON peristiwa untuk mengautentikasi koneksi yang masuk dan memutuskan tindakan apa yang diizinkan dalam koneksi.

Objek JSON berikut berisi contoh respons yang dapat dikirim oleh fungsi Lambda Anda.

```
{
	"isAuthenticated": true,
	"principalId": "xxxxxxxx",
	"disconnectAfterInSeconds": 86400,
	"refreshAfterInSeconds": 300,
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Effect": "Allow",
					"Action": "iot:Publish",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/customauthtesting"
				}
			]
		}
	]
}
```

Dalam contoh ini, fungsi ini harus mengirim respons yang berisi nilai-nilai berikut.

`isAuthenticated`  
Nilai Boolean yang menunjukkan apakah permintaan diautentikasi.

`principalId`  
String alfanumerik yang bertindak sebagai pengidentifikasi untuk token yang dikirim oleh permintaan otorisasi kustom. Nilai harus berupa string alfanumerik dengan setidaknya satu, dan tidak lebih dari 128 karakter. Ini mengidentifikasi koneksi di log. Nilai `principalId` harus sama dengan nilai `principalId` dalam objek JSON peristiwa (yaitu CertificateId dari sertifikat X.509).

`policyDocuments`  
Daftar dokumen kebijakan berformat JSON AWS IoT Core . Nilainya opsional dan mendukung [variabel kebijakan hal](https://docs.aws.amazon.com//iot/latest/developerguide/thing-policy-variables.html) dan [variabel kebijakan sertifikat](https://docs.aws.amazon.com//iot/latest/developerguide/cert-policy-variables.html). Jumlah maksimum dokumen kebijakan adalah 10. Setiap dokumen kebijakan dapat berisi maksimal 2.048 karakter. Jika Anda memiliki beberapa kebijakan yang dilampirkan pada sertifikat klien dan fungsi Lambda, izin tersebut merupakan kumpulan dari semua kebijakan. Untuk informasi selengkapnya tentang membuat AWS IoT Core kebijakan, lihat [Kebijakan](https://docs.aws.amazon.com//iot/latest/developerguide/iot-policies.html).

`disconnectAfterInSeconds`  
Sebuah integer yang menentukan durasi maksimum (dalam detik) dari koneksi ke gateway. AWS IoT Core Nilai minimum adalah 300 detik, dan nilai maksimumnya adalah 86.400 detik. `disconnectAfterInSeconds`adalah untuk seumur hidup koneksi dan tidak disegarkan pada penyegaran kebijakan berturut-turut.

`refreshAfterInSeconds`  
Sebuah integer yang menentukan interval antara kebijakan refresh. Ketika interval ini berlalu, AWS IoT Core memanggil fungsi Lambda untuk memungkinkan penyegaran kebijakan. Nilai minimum adalah 300 detik, dan nilai maksimumnya adalah 86.400 detik.

### Contoh fungsi Lambda
<a name="custom-auth-509cert-js-example"></a>

Berikut ini adalah contoh fungsi Node.js Lambda. Fungsi ini memeriksa sertifikat X.509 klien dan mengekstrak informasi yang relevan seperti nomor seri, sidik jari, dan nama subjek. Jika informasi yang diekstraksi sesuai dengan nilai yang diharapkan, klien diberikan akses untuk terhubung. Mekanisme ini memastikan bahwa hanya klien yang berwenang dengan sertifikat yang valid yang dapat membuat koneksi.

```
const crypto = require('crypto');

exports.handler = async (event) => {
    
    // Extract the certificate PEM from the event
    const certPem = event.protocolData.tls.x509CertificatePem;
    
    // Parse the certificate using Node's crypto module
    const cert = new crypto.X509Certificate(certPem);
    
    var effect = "Deny";
    // Allow permissions only for a particular certificate serial, fingerprint, and subject
    if (cert.serialNumber === "7F8D2E4B9C1A5036DE8F7C4B2A91E5D80463BC9A1257" // This is a random serial
       && cert.fingerprint === "F2:9A:C4:1D:B5:E7:08:3F:6B:D0:4E:92:A7:C1:5B:8D:16:0F:E3:7A" // This is a random fingerprint
       && cert.subject === "allow.example.com") {
      effect = "Allow";
    }
    
    return generateAuthResponse(event.protocolData.tls.principalId, effect);
};


// Helper function to generate the authorization response.
function generateAuthResponse(principalId, effect) {
    const authResponse = {
        isAuthenticated: true,
        principalId,
        disconnectAfterInSeconds: 3600,
        refreshAfterInSeconds: 300,
        policyDocuments: [
          {
            Version: "2012-10-17",		 	 	 
            Statement: [
              {
                Action: ["iot:Connect"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:client/myClientName"
                ]
              },
              {
                Action: ["iot:Publish"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Subscribe"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Receive"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              }
            ]
          }
        ]
      };

  return authResponse;
}
```

Fungsi Lambda sebelumnya mengembalikan JSON berikut ketika menerima sertifikat dengan serial, sidik jari, dan subjek yang diharapkan. Nilai `x509CertificatePem` akan menjadi sertifikat klien yang disediakan dalam jabat tangan TLS. Untuk informasi selengkapnya, lihat [Mendefinisikan fungsi Lambda Anda](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html#custom-auth-lambda).

```
{
	"isAuthenticated": true,
	"principalId": "principalId in the event JSON object",
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Action": "iot:Connect",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:client/myClientName"
				},
				{
					"Action": "iot:Publish",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				},
				{
					"Action": "iot:Subscribe",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
				},
				{
					"Action": "iot:Receive",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				}
			]
		}
	],
	"disconnectAfterInSeconds": 3600,
	"refreshAfterInSeconds": 300
}
```

## Langkah 3: Buat otorisasi khusus
<a name="custom-auth-509cert-authorizer"></a>

Setelah [Anda menentukan fungsi Lambda](#custom-auth-509cert-lambda), buat otorisasi khusus untuk mengelola otentikasi klien dan logika otorisasi Anda sendiri. Anda dapat mengikuti petunjuk terperinci di [Langkah 3: Buat sumber otorisasi pelanggan dan otorisasi](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html#custom-auth-tutorial-authorizer). Untuk informasi selengkapnya, lihat [Membuat otorisasi](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html). 

Dalam proses pembuatan otorisasi kustom, Anda harus memberikan AWS IoT izin untuk menjalankan fungsi Lambda setelah dibuat. Untuk petunjuk terperinci, lihat [Mengotorisasi AWS IoT untuk menjalankan fungsi Lambda](custom-auth-authorize.md) Anda.

## Langkah 4: Tetapkan jenis otentikasi dan protokol aplikasi dalam konfigurasi domain
<a name="custom-auth-509cert-domainconfig"></a>

Untuk mengautentikasi perangkat menggunakan otentikasi kustom dengan sertifikat klien X.509, Anda harus mengatur jenis otentikasi dan protokol aplikasi dalam konfigurasi domain, dan Anda harus mengirim ekstensi SNI. Nilai `authenticationType` harus`CUSTOM_AUTH_X509`, dan nilai `applicationProtocol` dapat menjadi `SECURE_MQTT` atau`HTTPS`.

### Mengatur jenis otentikasi dan protokol aplikasi dalam konfigurasi domain (CLI)
<a name="custom-auth-509cert-cli"></a>

Jika Anda tidak memiliki konfigurasi domain, gunakan [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html)perintah untuk membuatnya. Nilai `authenticationType` harus`CUSTOM_AUTH_X509`, dan nilai `applicationProtocol` dapat menjadi `SECURE_MQTT` atau`HTTPS`.

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \ 
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

Jika Anda sudah memiliki konfigurasi domain, gunakan [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html)perintah update `authenticationType` dan `applicationProtocol` jika diperlukan. Perhatikan bahwa Anda tidak dapat mengubah jenis otentikasi atau protokol pada endpoint default ()`iot:Data-ATS`.

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

`domain-configuration-name`  
Nama konfigurasi domain.

`authentication-type`  
Jenis otentikasi konfigurasi domain. Untuk informasi selengkapnya, lihat [memilih jenis autentikasi](protocols.md#connection-protocol-auth-mode).

`application-protocol`  
Protokol aplikasi yang digunakan perangkat untuk berkomunikasi AWS IoT Core. Untuk informasi selengkapnya, lihat [memilih protokol aplikasi](protocols.md#protocol-selection).

`--authorizer-config`  
Objek yang menentukan konfigurasi authorizer dalam konfigurasi domain.

`defaultAuthorizerName`  
Nama otorisasi untuk konfigurasi domain.

Untuk informasi selengkapnya, lihat [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)dan [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)dari *Referensi AWS IoT API*. Untuk informasi selengkapnya tentang konfigurasi domain, lihat [Konfigurasi domain](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html).

# Menghubungkan ke AWS IoT Core dengan menggunakan otentikasi kustom
<a name="custom-auth"></a>

 Perangkat dapat terhubung AWS IoT Core dengan menggunakan otentikasi khusus dengan protokol apa pun yang AWS IoT Core mendukung pesan perangkat. Untuk informasi selengkapnya tentang protokol komunikasi yang didukung, lihat. [Protokol komunikasi perangkat](protocols.md)  Data koneksi yang Anda berikan ke fungsi Lambda otorisasi Anda tergantung pada protokol yang Anda gunakan. Untuk informasi selengkapnya tentang membuat fungsi Lambda otorisasi Anda, lihat. [Mendefinisikan fungsi Lambda Anda](custom-auth-lambda.md) Bagian berikut menjelaskan cara menghubungkan untuk mengautentikasi dengan menggunakan setiap protokol yang didukung.

## HTTPS
<a name="custom-auth-http"></a>

Perangkat yang mengirim data AWS IoT Core dengan menggunakan [HTTP Publish API](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_Publish.html) dapat meneruskan kredensyal baik melalui header permintaan atau parameter kueri dalam permintaan HTTP POST mereka. Perangkat dapat menentukan otorisasi untuk dipanggil dengan menggunakan `x-amz-customauthorizer-name` header atau parameter kueri. Jika Anda mengaktifkan penandatanganan token di otorisasi, Anda harus meneruskan `token-key-name` dan `x-amz-customauthorizer-signature` dalam header permintaan atau parameter kueri. Perhatikan bahwa `token-signature` nilainya harus dikodekan URL saat menggunakan JavaScript dari dalam browser.

**catatan**  
Otorisasi pelanggan untuk protokol HTTPS hanya mendukung operasi publikasi. Untuk informasi selengkapnya tentang protokol HTTPS, lihat[Protokol komunikasi perangkat](protocols.md).

Contoh permintaan berikut menunjukkan bagaimana Anda meneruskan parameter ini di header permintaan dan parameter kueri. 

```
//Passing credentials via headers
POST /topics/topic?qos=qos HTTP/1.1
Host: your-endpoint 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
x-amz-customauthorizer-name: authorizer-name

//Passing credentials via query parameters
POST /topics/topic?qos=qos&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value HTTP/1.1
```

## MQTT
<a name="custom-auth-mqtt"></a>

 Perangkat yang terhubung AWS IoT Core dengan menggunakan koneksi MQTT dapat meneruskan kredensyal melalui `username` dan `password` bidang pesan MQTT. `username`Nilai juga dapat secara opsional berisi string kueri yang meneruskan nilai tambahan (termasuk token, tanda tangan, dan nama otorisasi) ke otorisasi Anda. Anda dapat menggunakan string kueri ini jika Anda ingin menggunakan skema otentikasi berbasis token, bukan dan nilai. `username` `password`  

**catatan**  
 Data di bidang kata sandi dikodekan oleh base64. AWS IoT Core Fungsi Lambda Anda harus memecahkan kode itu. 

 Contoh berikut berisi `username` string yang berisi parameter tambahan yang menentukan token dan tanda tangan.  

```
username?x-amz-customauthorizer-name=authorizer-name&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value
```

Untuk memanggil otorisasi, perangkat yang terhubung AWS IoT Core dengan menggunakan MQTT dan otentikasi khusus harus terhubung pada port 443. Mereka juga harus melewati ekstensi Application Layer Protocol Negotiation (ALPN) TLS dengan nilai `mqtt` dan ekstensi Server Name Indication (SNI) dengan nama host dari endpoint data mereka. AWS IoT Core Untuk menghindari potensi kesalahan, nilai untuk `x-amz-customauthorizer-signature` harus dikodekan URL. Kami juga sangat merekomendasikan bahwa nilai-nilai `x-amz-customauthorizer-name` dan URL `token-key-name` dikodekan. Untuk informasi lebih lanjut tentang nilai-nilai ini, lihat[Protokol komunikasi perangkat](protocols.md). V2 [AWS IoT Klien Perangkat SDKs SDKs, Seluler, dan AWS IoT Perangkat](iot-sdks.md) dapat mengkonfigurasi kedua ekstensi ini. 

## MQTT lebih WebSockets
<a name="custom-auth-websockets"></a>

 Perangkat yang terhubung AWS IoT Core dengan menggunakan MQTT over WebSockets dapat meneruskan kredensyal dengan salah satu dari dua cara berikut. 
+ Melalui header permintaan atau parameter kueri dalam permintaan HTTP UPGRADE untuk membuat WebSockets koneksi.
+ Melalui `username` dan `password` bidang dalam pesan MQTT CONNECT.

 Jika Anda meneruskan kredensyal melalui pesan koneksi MQTT, ekstensi ALPN dan SNI TLS diperlukan. Untuk informasi selengkapnya tentang ekstensi ini, lihat[MQTT](#custom-auth-mqtt). Contoh berikut menunjukkan bagaimana untuk meneruskan kredensyal melalui permintaan HTTP Upgrade. 

```
GET /mqtt HTTP/1.1
Host: your-endpoint 
Upgrade: WebSocket 
Connection: Upgrade 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
sec-WebSocket-Key: any random base64 value 
sec-websocket-protocol: mqtt 
sec-WebSocket-Version: websocket version
```

## Menandatangani token
<a name="custom-auth-token-signature"></a>

Anda harus menandatangani token dengan kunci pribadi dari public-private key pair yang Anda gunakan dalam panggilan. `create-authorizer` Contoh berikut menunjukkan cara membuat tanda tangan token dengan menggunakan perintah Unix-like dan. JavaScript Mereka menggunakan algoritma hash SHA-256 untuk menyandikan tanda tangan.

------
#### [ Command line ]

```
echo -n TOKEN_VALUE | openssl dgst -sha256 -sign PEM encoded RSA private key | openssl base64
```

------
#### [ JavaScript ]

```
const crypto = require('crypto')

const key = "PEM encoded RSA private key"

const k = crypto.createPrivateKey(key)
let sign = crypto.createSign('SHA256')
sign.write(t)
sign.end()
const s = sign.sign(k, 'base64')
```

------

# Memecahkan masalah otorisasi Anda
<a name="custom-auth-troubleshooting"></a>

 Topik ini membahas masalah umum yang dapat menyebabkan masalah dalam alur kerja otentikasi khusus dan langkah-langkah untuk menyelesaikannya. **Untuk memecahkan masalah dengan paling efektif, aktifkan CloudWatch log untuk AWS IoT Core dan atur level log ke DEBUG.** Anda dapat mengaktifkan CloudWatch log di AWS IoT Core konsol ([https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/)). Untuk informasi selengkapnya tentang mengaktifkan dan mengonfigurasi log AWS IoT Core, lihat. [Konfigurasikan AWS IoT logging](configure-logging.md) 

**catatan**  
Jika Anda meninggalkan tingkat log di **DEBUG** untuk jangka waktu yang lama, CloudWatch mungkin menyimpan data logging dalam jumlah besar. Hal ini dapat meningkatkan CloudWatch biaya Anda. Pertimbangkan untuk menggunakan logging berbasis sumber daya untuk meningkatkan verbositas hanya untuk perangkat dalam grup hal tertentu. Untuk informasi selengkapnya tentang logging berbasis sumber daya, lihat. [Konfigurasikan AWS IoT logging](configure-logging.md) Selain itu, setelah Anda selesai memecahkan masalah, kurangi level log ke level yang kurang bertele-tele.

Sebelum Anda memulai pemecahan masalah, tinjau [Memahami alur kerja otentikasi kustom](custom-authorizer.md) tampilan tingkat tinggi dari proses otentikasi kustom. Ini membantu Anda memahami di mana mencari sumber masalah.

Topik ini membahas dua bidang berikut untuk Anda selidiki.
+ Masalah yang terkait dengan fungsi Lambda otorisasi Anda.
+ Masalah yang terkait dengan perangkat Anda.

## Periksa masalah dalam fungsi Lambda otorisasi Anda
<a name="custom-auth-troubleshooting-lambda"></a>

Lakukan langkah-langkah berikut untuk memastikan bahwa upaya koneksi perangkat Anda menjalankan fungsi Lambda Anda.

1. Verifikasi fungsi Lambda mana yang terkait dengan otorisasi Anda.

   Anda dapat melakukan ini dengan memanggil [DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html)API atau dengan mengklik otorisasi yang diinginkan di bagian **Aman** AWS IoT Core konsol.

1. Periksa metrik pemanggilan untuk fungsi Lambda. Lakukan langkah-langkah berikut untuk melakukan ini.

   1. Buka AWS Lambda konsol ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) dan pilih fungsi yang terkait dengan otorisasi Anda.

   1. Pilih tab **Monitor** dan lihat metrik untuk kerangka waktu yang relevan dengan masalah Anda.

1. Jika Anda tidak melihat pemanggilan, verifikasi bahwa AWS IoT Core memiliki izin untuk menjalankan fungsi Lambda Anda. Jika Anda melihat pemanggilan, lewati ke langkah berikutnya. Lakukan langkah-langkah berikut untuk memverifikasi bahwa fungsi Lambda Anda memiliki izin yang diperlukan.

   1. Pilih tab **Izin** untuk fungsi Anda di AWS Lambda konsol.

   1. Temukan bagian **Kebijakan Berbasis Sumber Daya** di bagian bawah halaman. Jika fungsi Lambda Anda memiliki izin yang diperlukan, kebijakan akan terlihat seperti contoh berikut.  
****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Id": "default",
        "Statement": [
          {
            "Sid": "Id123",
            "Effect": "Allow",
            "Principal": {
              "Service": "iot.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName",
            "Condition": {
              "ArnLike": {
                "AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/AuthorizerName"
              },
              "StringEquals": {
                "AWS:SourceAccount": "111111111111"
              }
            }
          }
        ]
      }
      ```

   1. Kebijakan ini memberikan `InvokeFunction` izin atas fungsi Anda kepada AWS IoT Core kepala sekolah. Jika Anda tidak melihatnya, Anda harus menambahkannya dengan menggunakan [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)API. Contoh berikut menunjukkan kepada Anda bagaimana melakukan ini dengan menggunakan AWS CLI.

      ```
      aws lambda add-permission --function-name FunctionName --principal iot.amazonaws.com --source-arn AuthorizerARn --statement-id Id-123 --action "lambda:InvokeFunction"
      ```

1. Jika Anda melihat pemanggilan, verifikasi bahwa tidak ada kesalahan. Kesalahan mungkin menunjukkan bahwa fungsi Lambda tidak menangani peristiwa koneksi yang AWS IoT Core mengirimkannya dengan benar.

   Untuk informasi tentang penanganan acara di fungsi Lambda Anda, lihat. [Mendefinisikan fungsi Lambda Anda](custom-auth-lambda.md) Anda dapat menggunakan fitur pengujian di AWS Lambda console ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) ke nilai pengujian kode keras dalam fungsi untuk memastikan bahwa fungsi tersebut menangani peristiwa dengan benar.

1. Jika Anda melihat pemanggilan tanpa kesalahan, tetapi perangkat Anda tidak dapat terhubung (atau memublikasikan, berlangganan, dan menerima pesan), masalahnya mungkin kebijakan yang ditampilkan oleh fungsi Lambda tidak memberikan izin untuk tindakan yang coba dilakukan perangkat Anda. Lakukan langkah-langkah berikut untuk menentukan apakah ada yang salah dengan kebijakan yang dikembalikan fungsi.

   1. Gunakan kueri Amazon CloudWatch Logs Insights untuk memindai log dalam waktu singkat untuk memeriksa kegagalan. Contoh kueri berikut mengurutkan peristiwa berdasarkan stempel waktu dan mencari kegagalan.

      ```
      display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"    
      ```

   1. Perbarui fungsi Lambda Anda untuk mencatat data yang dikembalikan AWS IoT Core dan peristiwa yang memicu fungsi tersebut. Anda dapat menggunakan log ini untuk memeriksa kebijakan yang dibuat oleh fungsi tersebut.

1. Jika Anda melihat pemanggilan tanpa kesalahan, tetapi perangkat Anda tidak dapat terhubung (atau mempublikasikan, berlangganan, dan menerima pesan), alasan lain adalah fungsi Lambda Anda melebihi batas batas waktu. Batas waktu tunggu fungsi Lambda untuk otorisasi khusus adalah 5 detik. Anda dapat memeriksa durasi fungsi di CloudWatch log atau metrik. 

## Menyelidiki masalah perangkat
<a name="custom-auth-troubleshooting-investigate"></a>

Jika Anda tidak menemukan masalah dengan menjalankan fungsi Lambda Anda atau dengan kebijakan yang ditampilkan fungsi tersebut, cari masalah dengan upaya koneksi perangkat Anda. Permintaan koneksi yang salah dapat menyebabkan AWS IoT Core tidak memicu otorisasi Anda. Masalah koneksi dapat terjadi pada lapisan TLS dan aplikasi.

**Kemungkinan masalah lapisan TLS:**
+ Pelanggan harus meneruskan header nama host (HTTP, MQTT over WebSockets) atau ekstensi TLS Indikasi Nama Server (HTTP, MQTT over, MQTT) di WebSockets semua permintaan otentikasi kustom. Dalam kedua kasus tersebut, nilai yang diteruskan harus cocok dengan salah satu titik akhir AWS IoT Core data akun Anda. Ini adalah titik akhir yang dikembalikan ketika Anda melakukan perintah CLI berikut.
  + `aws iot describe-endpoint --endpoint-type iot:Data-ATS`
  + `aws iot describe-endpoint --endpoint-type iot:Data`(untuk titik VeriSign akhir warisan)
+ Perangkat yang menggunakan otentikasi khusus untuk koneksi MQTT juga harus melewati ekstensi TLS Application Layer Protocol Negotiation (ALPN) dengan nilai. `mqtt`
+ Otentikasi khusus saat ini hanya tersedia di port 443.

**Kemungkinan masalah lapisan aplikasi:**
+ Jika penandatanganan diaktifkan (`signingDisabled`bidangnya salah di otorisasi Anda), cari masalah tanda tangan berikut.
  + Pastikan Anda meneruskan tanda tangan token di `x-amz-customauthorizer-signature` header atau dalam parameter string kueri.
  + Pastikan layanan tidak menandatangani nilai selain token.
  + Pastikan Anda meneruskan token di header atau parameter kueri yang Anda tentukan di `token-key-name` bidang di otorisasi Anda.
+ Pastikan bahwa nama otorisasi yang Anda berikan di parameter `x-amz-customauthorizer-name` header atau string kueri valid atau Anda memiliki otorisasi default yang ditentukan untuk akun Anda.

# Otorisasi
<a name="iot-authorization"></a>

Otorisasi adalah proses pemberian izin untuk identitas yang diautentikasi. Anda memberikan izin dalam AWS IoT Core menggunakan AWS IoT Core dan kebijakan IAM. Topik ini mencakup AWS IoT Core kebijakan. Untuk informasi selengkapnya tentang kebijakan IAM, lihat [Identitas dan manajemen akses untuk AWS IoT](security-iam.md) dan[Bagaimana AWS IoT bekerja dengan IAM](security_iam_service-with-iam.md).

AWS IoT Core kebijakan menentukan apa yang dapat dilakukan identitas yang diautentikasi. Identitas yang diautentikasi digunakan oleh perangkat, aplikasi seluler, aplikasi web, dan aplikasi desktop. Identitas yang diautentikasi bahkan bisa menjadi pengguna yang mengetik perintah AWS IoT Core CLI. Identitas dapat menjalankan AWS IoT Core operasi hanya jika memiliki kebijakan yang memberinya izin untuk operasi tersebut.

 AWS IoT Core Kebijakan dan kebijakan IAM digunakan AWS IoT Core untuk mengontrol operasi yang dapat dilakukan oleh identitas (juga disebut *prinsipal*). Jenis kebijakan yang Anda gunakan bergantung pada jenis identitas yang Anda gunakan untuk mengautentikasi. AWS IoT Core

AWS IoT Core operasi dibagi menjadi dua kelompok: 
+ Control plane API memungkinkan Anda untuk melakukan tugas-tugas administratif seperti membuat atau memperbarui sertifikat, hal-hal, aturan, dan sebagainya.
+ Data plane API memungkinkan Anda mengirim data ke dan menerima data dari AWS IoT Core. 

Jenis kebijakan yang Anda gunakan bergantung pada apakah Anda menggunakan bidang kontrol atau API bidang data.

Tabel berikut menunjukkan tipe identitas, protokol yang mereka gunakan, dan jenis kebijakan yang dapat digunakan untuk otorisasi.


**AWS IoT Core API pesawat data dan tipe kebijakan**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/iot-authorization.html)


**AWS IoT Core API bidang kontrol dan jenis kebijakan**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/iot-authorization.html)

AWS IoT Core kebijakan dilampirkan ke sertifikat X.509, identitas Amazon Cognito, atau grup hal. Kebijakan IAM dilampirkan ke pengguna, grup, atau peran IAM. Jika Anda menggunakan AWS IoT konsol atau AWS IoT Core CLI untuk melampirkan kebijakan (ke sertifikat, Identitas Amazon Cognito, atau grup hal), Anda menggunakan kebijakan. AWS IoT Core Jika tidak, Anda menggunakan kebijakan IAM. AWS IoT Core kebijakan yang dilampirkan pada grup sesuatu berlaku untuk apa pun dalam kelompok benda itu. Agar AWS IoT Core kebijakan berlaku, nama `clientId` dan benda harus cocok.

Otorisasi berbasis kebijakan adalah alat yang ampuh. Ini memberi Anda kontrol penuh atas apa yang dapat dilakukan perangkat, pengguna, atau aplikasi AWS IoT Core. Misalnya, pertimbangkan perangkat yang terhubung AWS IoT Core dengan sertifikat. Anda dapat mengizinkan perangkat mengakses semua topik MQTT, atau Anda dapat membatasi aksesnya ke satu topik. Dalam contoh lain, pertimbangkan pengguna mengetik perintah CLI di baris perintah. Dengan menggunakan kebijakan, Anda dapat mengizinkan atau menolak akses ke perintah atau AWS IoT Core sumber daya apa pun untuk pengguna. Anda juga dapat mengontrol akses aplikasi ke AWS IoT Core sumber daya.

Perubahan yang dilakukan pada kebijakan dapat memakan waktu beberapa menit untuk menjadi efektif karena cara menyimpan dokumen kebijakan dalam AWS IoT cache. Artinya, mungkin perlu beberapa menit untuk mengakses sumber daya yang baru-baru ini diberikan akses, dan sumber daya dapat diakses selama beberapa menit setelah aksesnya dicabut.

## AWS pelatihan dan sertifikasi
<a name="iot-authorization-training"></a>

Untuk informasi tentang otorisasi AWS IoT Core, ikuti kursus [Deep Dive into AWS IoT Core Authentication and Authorization](https://www.aws.training/Details/Curriculum?id=42335) di situs web AWS Pelatihan dan Sertifikasi.

# AWS IoT Core kebijakan
<a name="iot-policies"></a>

AWS IoT Core Kebijakan adalah dokumen JSON. Mereka mengikuti konvensi yang sama dengan kebijakan IAM. AWS IoT Core mendukung kebijakan bernama sehingga banyak identitas dapat mereferensikan dokumen kebijakan yang sama. Kebijakan bernama diberi versi sehingga dapat dengan mudah diputar kembali.

AWS IoT Core kebijakan memungkinkan Anda untuk mengontrol akses ke bidang AWS IoT Core data. Bidang AWS IoT Core data terdiri dari operasi yang memungkinkan Anda terhubung ke broker AWS IoT Core pesan, mengirim dan menerima pesan MQTT, dan mendapatkan atau memperbarui Device Shadow sesuatu.

 AWS IoT Core Kebijakan adalah dokumen JSON yang berisi satu atau beberapa pernyataan kebijakan. Setiap pernyataan berisi:
+ `Effect`, yang menentukan apakah tindakan tersebut diizinkan atau ditolak.
+ `Action`, yang menentukan tindakan yang diizinkan atau ditolak oleh kebijakan.
+ `Resource`, yang menentukan sumber daya atau sumber daya tempat tindakan diizinkan atau ditolak.

Perubahan yang dilakukan pada kebijakan dapat memakan waktu antara 6 dan 8 menit untuk menjadi efektif karena cara AWS IoT menyimpan dokumen kebijakan. Artinya, mungkin perlu beberapa menit untuk mengakses sumber daya yang baru-baru ini diberikan akses, dan sumber daya dapat diakses selama beberapa menit setelah aksesnya dicabut.

AWS IoT Core kebijakan dapat dilampirkan ke sertifikat X.509, identitas Amazon Cognito, dan grup hal. Kebijakan yang dilampirkan pada grup sesuatu berlaku untuk apa pun dalam grup itu. Agar kebijakan berlaku, nama `clientId` dan benda harus cocok. AWS IoT Core kebijakan mengikuti logika evaluasi kebijakan yang sama dengan kebijakan IAM. Secara default, semua kebijakan ditolak secara implisit. Izin eksplisit dalam kebijakan berbasis identitas atau berbasis sumber daya akan mengesampingkan perilaku default. Penolakan secara tegas dalam kebijakan apa pun akan mengesampingkan izin apa pun. Untuk informasi selengkapnya, lihat [Logika evaluasi kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) di *Panduan AWS Identity and Access Management Pengguna*.

**Topics**
+ [AWS IoT Core tindakan kebijakan](iot-policy-actions.md)
+ [AWS IoT Core sumber daya aksi](iot-action-resources.md)
+ [AWS IoT Core variabel kebijakan](iot-policy-variables.md)
+ [Pencegahan "confused deputy" lintas layanan](cross-service-confused-deputy-prevention.md)
+ [AWS IoT Core contoh kebijakan](example-iot-policies.md)
+ [Otorisasi dengan identitas Amazon Cognito](cog-iot-policies.md)

# AWS IoT Core tindakan kebijakan
<a name="iot-policy-actions"></a>

Tindakan kebijakan berikut ditentukan oleh AWS IoT Core:Tindakan Kebijakan MQTT

`iot:Connect`  
Merupakan izin untuk terhubung ke broker AWS IoT Core pesan. `iot:Connect`Izin diperiksa setiap kali `CONNECT` permintaan dikirim ke broker. Broker pesan tidak mengizinkan dua klien dengan ID klien yang sama untuk tetap terhubung pada saat yang sama. Setelah klien kedua terhubung, broker menutup koneksi yang ada. Gunakan `iot:Connect` izin untuk memastikan hanya klien yang berwenang menggunakan ID klien tertentu yang dapat terhubung.

`iot:DeleteConnection`  
Merupakan izin untuk memutuskan sambungan klien MQTT yang terhubung dari. AWS IoT Core`iot:DeleteConnection`Izin diperiksa setiap kali permintaan dibuat untuk memutuskan sambungan klien secara paksa. Saat Anda memutuskan sambungan klien, AWS IoT Core menutup koneksi jaringan klien dan secara opsional membersihkan status sesi.

`iot:GetRetainedMessage`  
Merupakan izin untuk mendapatkan isi dari satu pesan yang dipertahankan. Pesan yang disimpan adalah pesan yang diterbitkan dengan tanda RETAIN yang disetel dan disimpan oleh AWS IoT Core. Untuk izin mendapatkan daftar semua pesan yang disimpan akun, lihat[iot:ListRetainedMessages](#action_listretainedmessages).

`iot:ListRetainedMessages`  
Merupakan izin untuk mengambil informasi ringkasan tentang pesan yang disimpan akun, tetapi bukan isi pesan. Pesan yang disimpan adalah pesan yang diterbitkan dengan tanda RETAIN yang disetel dan disimpan oleh AWS IoT Core. Sumber daya ARN yang ditentukan untuk tindakan ini harus. `*` Untuk izin mendapatkan isi dari satu pesan yang disimpan, lihat[iot:GetRetainedMessage](#action_getretainpublish).

`iot:Publish`  
Merupakan izin untuk menerbitkan topik MQTT. Izin ini diperiksa setiap kali permintaan PUBLISH dikirim ke broker. Anda dapat menggunakan ini untuk memungkinkan klien mempublikasikan ke pola topik tertentu.  
Untuk memberikan `iot:Publish` izin, Anda juga harus memberikan `iot:Connect` izin.

`iot:Receive`  
Merupakan izin untuk menerima pesan dari AWS IoT Core. `iot:Receive`Izin dikonfirmasi setiap kali pesan dikirimkan ke klien. Karena izin ini diperiksa pada setiap pengiriman, Anda dapat menggunakannya untuk mencabut izin ke klien yang saat ini berlangganan topik.

`iot:RetainPublish`  
Merupakan izin untuk mempublikasikan pesan MQTT dengan set flag RETAIN.  
Untuk memberikan `iot:RetainPublish` izin, Anda juga harus memberikan `iot:Publish` izin.

`iot:Subscribe`  
Merupakan izin untuk berlangganan filter topik. Izin ini diperiksa setiap kali permintaan SUBSCRIBE dikirim ke broker. Gunakan untuk memungkinkan klien berlangganan topik yang sesuai dengan pola topik tertentu.  
Untuk memberikan `iot:Subscribe` izin, Anda juga harus memberikan `iot:Connect` izin.Tindakan Kebijakan Device Shadow

`iot:DeleteThingShadow`  
Merupakan izin untuk menghapus Device Shadow sesuatu. `iot:DeleteThingShadow`Izin dicentang setiap kali permintaan dibuat untuk menghapus konten Device Shadow sesuatu.

`iot:GetThingShadow`  
Merupakan izin untuk mengambil Device Shadow sesuatu. `iot:GetThingShadow`Izin diperiksa setiap kali permintaan dibuat untuk mengambil konten Device Shadow sesuatu.

`iot:ListNamedShadowsForThing`  
Merupakan izin untuk membuat daftar sesuatu bernama Shadows. `iot:ListNamedShadowsForThing`Izin diperiksa setiap kali permintaan dibuat untuk mencantumkan sesuatu yang bernama Shadows.

`iot:UpdateThingShadow`  
Merupakan izin untuk memperbarui bayangan perangkat. `iot:UpdateThingShadow`Izin diperiksa setiap kali permintaan dibuat untuk memperbarui konten Device Shadow sesuatu.

**catatan**  
Tindakan kebijakan eksekusi pekerjaan hanya berlaku untuk titik akhir HTTP TLS. Jika Anda menggunakan titik akhir MQTT, Anda harus menggunakan tindakan kebijakan MQTT yang ditentukan dalam topik ini.  
Untuk contoh kebijakan pelaksanaan pekerjaan yang menunjukkan hal ini, lihat [Contoh kebijakan pekerjaan dasar](basic-jobs-example.md) yang berfungsi dengan protokol MQTT.Tindakan AWS IoT Core Kebijakan Eksekusi Job

`iotjobsdata:DescribeJobExecution`  
Merupakan izin untuk mengambil eksekusi pekerjaan untuk hal tertentu. `iotjobsdata:DescribeJobExecution`Izin diperiksa setiap kali permintaan dibuat untuk mendapatkan eksekusi pekerjaan.

`iotjobsdata:GetPendingJobExecutions`  
Merupakan izin untuk mengambil daftar pekerjaan yang tidak dalam status terminal untuk suatu hal. `iotjobsdata:GetPendingJobExecutions`Izin diperiksa setiap kali permintaan dibuat untuk mengambil daftar. 

`iotjobsdata:UpdateJobExecution`  
Merupakan izin untuk memperbarui eksekusi pekerjaan. `iotjobsdata:UpdateJobExecution`Izin diperiksa setiap kali permintaan dibuat untuk memperbarui status eksekusi pekerjaan.

`iotjobsdata:StartNextPendingJobExecution`  
Merupakan izin untuk mendapatkan dan memulai eksekusi pekerjaan tertunda berikutnya untuk suatu hal. (Yaitu, untuk memperbarui eksekusi pekerjaan dengan status QUEUED ke IN\$1PROGRESS.) `iotjobsdata:StartNextPendingJobExecution`Izin diperiksa setiap kali permintaan dibuat untuk memulai eksekusi pekerjaan tertunda berikutnya.AWS IoT Core Tindakan Kebijakan Penyedia Kredensyal

`iot:AssumeRoleWithCertificate`  
Merupakan izin untuk memanggil penyedia AWS IoT Core kredensi untuk mengambil peran IAM dengan otentikasi berbasis sertifikat. `iot:AssumeRoleWithCertificate`Izin diperiksa setiap kali permintaan dibuat ke penyedia AWS IoT Core kredensi untuk mengambil peran.

# AWS IoT Core sumber daya aksi
<a name="iot-action-resources"></a>

Untuk menentukan sumber daya untuk tindakan AWS IoT Core kebijakan, gunakan Nama Sumber Daya Amazon (ARN) sumber daya. Semua sumber daya ARNs mengikuti format berikut:

```
arn:partition:iot:region:AWS-account-ID:Resource-type/Resource-name
```

Tabel berikut menunjukkan sumber daya untuk menentukan untuk setiap jenis tindakan. Contoh ARN adalah untuk ID akun`123456789012`, di partisi`aws`, dan khusus untuk wilayah tersebut. `us-east-1` Untuk informasi selengkapnya tentang format ARNs, lihat [Amazon Resource Names (ARNs)](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference-arns.html) dari Panduan AWS Identity and Access Management Pengguna.


| Tindakan | Tipe sumber daya | Nama sumber daya | Contoh ARN | 
| --- | --- | --- | --- | 
| iot:Connect | client |  ID klien  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteConnection | client |  ID klien  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteThingShadow | thing |  Nama benda, dan nama bayangan, jika berlaku  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iotjobsdata:DescribeJobExecution | thing |  Nama benda itu  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iotjobsdata:GetPendingJobExecutions | thing |  Nama benda itu  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:GetRetainedMessage | topic |  Topik pesan yang dipertahankan  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iot:GetThingShadow | thing |  Nama benda, dan nama bayangan, jika berlaku  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:ListNamedShadowsForThing | Semua | Semua |  \$1 | 
| iot:ListRetainedMessages | Semua | Semua |  \$1 | 
| iot:Publish | topic |  String topik  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:Receive | topic |  String topik  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:RetainPublish | topic |  Topik untuk dipublikasikan dengan set bendera RESTAIN  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iotjobsdata:StartNextPendingJobExecution | thing |  Nama benda itu  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:Subscribe | topicfilter | String filter topik | arn:aws:iot:us-east-1:123456789012:topicfilter/myTopicFilter | 
| iotjobsdata:UpdateJobExecution | thing |  Nama benda itu  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:UpdateThingShadow | thing |  Nama benda, dan nama bayangan, jika berlaku  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:AssumeRoleWithCertificate | rolealias |  Alias peran yang menunjuk ke peran ARN  |  arn:aws:iot:us-east-1:123456789012:rolealias/CredentialProviderRole\$1alias | 

# AWS IoT Core variabel kebijakan
<a name="iot-policy-variables"></a>

AWS IoT Core mendefinisikan variabel kebijakan yang dapat digunakan dalam AWS IoT Core kebijakan di `Resource` atau `Condition` blok. Ketika kebijakan dievaluasi, variabel kebijakan diganti dengan nilai aktual. Misalnya, jika perangkat terhubung ke broker AWS IoT Core pesan dengan ID klien 100-234-3456, variabel `iot:ClientId` kebijakan diganti dalam dokumen kebijakan dengan 100-234-3456.

AWS IoT Core kebijakan dapat menggunakan karakter wildcard dan mengikuti konvensi serupa dengan kebijakan IAM. Memasukkan `*` (asterik) dalam string dapat diperlakukan sebagai wildcard, cocok dengan karakter apa pun. Misalnya, Anda dapat menggunakan `*` untuk mendeskripsikan beberapa nama topik MQTT dalam `Resource` atribut kebijakan. Karakter `+` dan `#` diperlakukan sebagai string literal dalam kebijakan. Untuk contoh kebijakan yang menunjukkan cara menggunakan wildcard, lihat[Menggunakan karakter wildcard di MQTT dan kebijakan AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

Anda juga dapat menggunakan variabel kebijakan yang telah ditentukan dengan nilai tetap untuk mewakili karakter yang memiliki arti khusus. Karakter khusus ini termasuk`$(*)`,`$(?)`, dan`$($)`. Untuk informasi selengkapnya tentang variabel kebijakan dan karakter khusus, lihat [Elemen Kebijakan IAM: Variabel dan tag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html) dan [Membuat kondisi dengan beberapa kunci atau nilai](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html).

**Topics**
+ [Variabel AWS IoT Core kebijakan dasar](basic-policy-variables.md)
+ [Variabel kebijakan hal](thing-policy-variables.md)
+ [Variabel kebijakan Sertifikat X.509 AWS IoT Core](cert-policy-variables.md)

# Variabel AWS IoT Core kebijakan dasar
<a name="basic-policy-variables"></a>

AWS IoT Core mendefinisikan variabel kebijakan dasar berikut:
+ `aws:SourceIp`: Alamat IP klien yang terhubung ke broker AWS IoT Core pesan.
+ `iot:ClientId`: ID klien yang digunakan untuk terhubung ke broker AWS IoT Core pesan.
+ `iot:DomainName`: Nama domain klien yang terhubung ke AWS IoT Core.

**Topics**
+ [Contoh `ClientId` dan variabel `SourceIp` kebijakan](#basic-policy-variables-example)
+ [Contoh variabel `iot:DomainName` kebijakan](#basic-policy-variables-example-domain)

## Contoh `ClientId` dan variabel `SourceIp` kebijakan
<a name="basic-policy-variables-example"></a>

 AWS IoT Core Kebijakan berikut menunjukkan kebijakan yang menggunakan variabel kebijakan. `aws:SourceIp`dapat digunakan dalam elemen Kondisi kebijakan Anda untuk mengizinkan prinsipal membuat permintaan API hanya dalam rentang alamat tertentu. Sebagai contoh, lihat [Mengotorisasi pengguna dan layanan cloud untuk menggunakan AWS IoT Jobs](iam-policy-users-jobs.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
			],
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": "123.45.167.89"
				}
			}
		}
	]
}
```

Dalam contoh `${iot:ClientId}` ini, diganti dengan ID klien yang terhubung ke broker AWS IoT Core pesan ketika kebijakan dievaluasi. Bila Anda menggunakan variabel kebijakan seperti`${iot:ClientId}`, Anda dapat secara tidak sengaja membuka akses ke topik yang tidak diinginkan. Misalnya, jika Anda menggunakan kebijakan yang digunakan `${iot:ClientId}` untuk menentukan filter topik:

```
{
	"Effect": "Allow",
	"Action": [
		"iot:Subscribe"
	],
	"Resource": [
		"arn:aws:iot:us-east-1:123456789012:topicfilter/my/${iot:ClientId}/topic"
	]
}
```

Klien dapat terhubung menggunakan `+` sebagai ID klien. Ini akan memungkinkan pengguna untuk berlangganan topik apa pun yang cocok dengan filter topik`my/+/topic`. Untuk melindungi dari kesenjangan keamanan tersebut, gunakan tindakan `iot:Connect` kebijakan untuk mengontrol klien mana yang IDs dapat terhubung. Misalnya, kebijakan ini hanya mengizinkan klien yang ID kliennya `clientid1` terhubung:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid"
			]
		}
	]
}
```

**catatan**  
Menggunakan variabel kebijakan `${iot:ClientId}` dengan tidak `Connect` disarankan. Tidak ada pemeriksaan pada nilai`ClientId`, sehingga lampiran dengan ID klien yang berbeda dapat lulus validasi tetapi menyebabkan pemutusan. Karena `ClientId` ada yang diizinkan, menyetel ID klien acak dapat melewati kebijakan grup hal.

## Contoh variabel `iot:DomainName` kebijakan
<a name="basic-policy-variables-example-domain"></a>

Anda dapat menambahkan variabel `iot:DomainName` kebijakan untuk membatasi domain mana yang diizinkan untuk digunakan. Menambahkan variabel `iot:DomainName` kebijakan memungkinkan perangkat untuk terhubung hanya ke titik akhir tertentu yang dikonfigurasi.

Kebijakan berikut memungkinkan perangkat untuk terhubung ke domain yang ditentukan.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "AllowConnectionsToSpecifiedDomain",
		"Effect": "Allow",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

Kebijakan berikut menolak perangkat untuk terhubung ke domain yang ditentukan.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "DenyConnectionsToSpecifiedDomain",
		"Effect": "Deny",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

Untuk informasi selengkapnya tentang operator bersyarat kebijakan, lihat [elemen kebijakan IAM JSON:](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Operator kondisi. Untuk informasi selengkapnya tentang konfigurasi domain, lihat [Apa itu konfigurasi domain?](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html) .

# Variabel kebijakan hal
<a name="thing-policy-variables"></a>

Variabel kebijakan hal memungkinkan Anda menulis AWS IoT Core kebijakan yang memberikan atau menolak izin berdasarkan properti benda seperti nama benda, tipe benda, dan nilai atribut benda. Anda dapat menggunakan variabel kebijakan hal untuk menerapkan kebijakan yang sama untuk mengontrol banyak AWS IoT Core perangkat. Untuk informasi selengkapnya tentang penyediaan perangkat, lihat Penyediaan [Perangkat](iot-provision.html).

Jika Anda menggunakan asosiasi hal non-eksklusif, sertifikat yang sama dapat dilampirkan ke banyak hal. Untuk mempertahankan asosiasi yang jelas dan untuk menghindari potensi konflik, Anda harus mencocokkan ID klien Anda dengan nama benda. Dalam hal ini, Anda mendapatkan nama benda dari ID klien dalam `Connect` pesan MQTT yang dikirim ketika sesuatu terhubung ke. AWS IoT Core

Ingatlah hal berikut saat menggunakan variabel kebijakan hal dalam AWS IoT Core kebijakan.
+ Gunakan [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html)API untuk melampirkan sertifikat atau prinsipal (identitas Amazon Cognito yang diautentikasi) ke suatu hal.
+ Jika asosiasi hal non-eksklusif ada, saat Anda mengganti nama benda dengan variabel kebijakan hal, nilai `clientId` dalam pesan koneksi MQTT atau koneksi TLS harus sama persis dengan nama benda.

Variabel kebijakan hal berikut tersedia:
+ `iot:Connection.Thing.ThingName`

  Ini menyelesaikan nama benda dalam AWS IoT Core registri yang kebijakannya sedang dievaluasi. AWS IoT Core menggunakan sertifikat yang disajikan perangkat saat mengautentikasi untuk menentukan hal mana yang akan digunakan untuk memverifikasi koneksi. Variabel kebijakan ini hanya tersedia jika perangkat terhubung melalui MQTT atau MQTT melalui protokol. WebSocket 
+ `iot:Connection.Thing.ThingTypeName`

  Ini menyelesaikan jenis hal yang terkait dengan hal yang kebijakan sedang dievaluasi. ID klien WebSocket MQTT/koneksi harus sama dengan nama benda. Variabel kebijakan ini hanya tersedia saat menghubungkan melalui MQTT atau MQTT melalui protokol. WebSocket
+ `iot:Connection.Thing.Attributes[attributeName]`

  Ini menyelesaikan nilai atribut tertentu yang terkait dengan hal yang kebijakan sedang dievaluasi. Sesuatu dapat memiliki hingga 50 atribut. Setiap atribut tersedia sebagai variabel kebijakan: `iot:Connection.Thing.Attributes[attributeName]` di mana *attributeName* adalah nama atribut. ID klien MQTT/WebSocket koneksi harus sama dengan nama benda. Variabel kebijakan ini hanya tersedia saat menghubungkan melalui MQTT atau MQTT melalui protokol. WebSocket 
+ `iot:Connection.Thing.IsAttached`

  `iot:Connection.Thing.IsAttached: ["true"]`Menegakkan bahwa hanya perangkat yang terdaftar AWS IoT dan dilampirkan pada prinsipal yang dapat mengakses izin di dalam kebijakan. Anda dapat menggunakan variabel ini untuk mencegah perangkat terhubung AWS IoT Core jika menunjukkan sertifikat yang tidak dilampirkan ke benda IoT di AWS IoT Core registri.Variabel ini memiliki nilai `true` atau `false` menunjukkan bahwa hal yang menghubungkan dilampirkan ke sertifikat atau identitas Amazon Cognito di registri menggunakan API. [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html) Nama benda diambil sebagai ID klien. 

Jika ID klien Anda cocok dengan nama item Anda, atau jika Anda melampirkan sertifikat Anda ke sesuatu secara eksklusif, menggunakan variabel kebijakan dalam definisi kebijakan dapat menyederhanakan manajemen kebijakan. Alih-alih membuat kebijakan individual untuk setiap hal IoT, Anda dapat menentukan satu kebijakan menggunakan variabel kebijakan hal. Kebijakan ini dapat diterapkan ke semua perangkat secara dinamis. Berikut ini adalah contoh kebijakan untuk menunjukkan cara kerjanya. Untuk informasi selengkapnya, lihat [Mengaitkan AWS IoT sesuatu dengan koneksi klien MQTT](exclusive-thing.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Condition": {
				"StringLike": {
					"iot:ClientId": "*${iot:Connection.Thing.Attributes[envType]}"
				}
			},
			"Effect": "Allow",
			"Action": "iot:Connect",
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/*"
		}
	]
}
```

Contoh kebijakan ini memungkinkan hal-hal untuk terhubung AWS IoT Core jika ID klien mereka diakhiri dengan nilai `envType` atribut mereka. Hanya hal-hal dengan pola ID klien yang cocok yang akan diizinkan untuk terhubung.

# Variabel kebijakan Sertifikat X.509 AWS IoT Core
<a name="cert-policy-variables"></a>

Variabel kebijakan sertifikat X.509 membantu dengan kebijakan penulisan. AWS IoT Core Kebijakan ini memberikan izin berdasarkan atribut sertifikat X.509. Bagian berikut menjelaskan cara menggunakan variabel kebijakan sertifikat ini.

**penting**  
Jika sertifikat X.509 Anda tidak menyertakan atribut sertifikat tertentu tetapi variabel kebijakan sertifikat terkait digunakan dalam dokumen kebijakan Anda, evaluasi kebijakan dapat menyebabkan perilaku yang tidak terduga.

## CertificateId
<a name="cert-policy-variables-certid"></a>

Di [RegisterCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCertificate.html)API, `certificateId` muncul di badan respons. Untuk mendapatkan informasi tentang sertifikat Anda, gunakan `certificateId` in [DescribeCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeCertificate.html).

## Atribut penerbit
<a name="issuer-attributes"></a>

Variabel AWS IoT Core kebijakan berikut mendukung mengizinkan atau menolak izin, berdasarkan atribut sertifikat yang ditetapkan oleh penerbit sertifikat.
+ `iot:Certificate.Issuer.DistinguishedNameQualifier`
+ `iot:Certificate.Issuer.Country`
+ `iot:Certificate.Issuer.Organization`
+ `iot:Certificate.Issuer.OrganizationalUnit`
+ `iot:Certificate.Issuer.State`
+ `iot:Certificate.Issuer.CommonName`
+ `iot:Certificate.Issuer.SerialNumber`
+ `iot:Certificate.Issuer.Title`
+ `iot:Certificate.Issuer.Surname`
+ `iot:Certificate.Issuer.GivenName`
+ `iot:Certificate.Issuer.Initials`
+ `iot:Certificate.Issuer.Pseudonym`
+ `iot:Certificate.Issuer.GenerationQualifier` 

## Atribut subjek
<a name="subject-attributes"></a>

Variabel AWS IoT Core kebijakan berikut mendukung pemberian atau penolakan izin, berdasarkan atribut subjek sertifikat yang ditetapkan oleh penerbit sertifikat.
+ `iot:Certificate.Subject.DistinguishedNameQualifier`
+ `iot:Certificate.Subject.Country`
+ `iot:Certificate.Subject.Organization`
+ `iot:Certificate.Subject.OrganizationalUnit`
+ `iot:Certificate.Subject.State`
+ `iot:Certificate.Subject.CommonName`
+ `iot:Certificate.Subject.SerialNumber`
+ `iot:Certificate.Subject.Title`
+ `iot:Certificate.Subject.Surname`
+ `iot:Certificate.Subject.GivenName`
+ `iot:Certificate.Subject.Initials`
+ `iot:Certificate.Subject.Pseudonym`
+ `iot:Certificate.Subject.GenerationQualifier` 

Sertifikat X.509 menyediakan atribut ini dengan opsi untuk memuat satu atau lebih nilai. Secara default, variabel kebijakan untuk setiap atribut multi-nilai mengembalikan nilai pertama. Misalnya, `Certificate.Subject.Country` atribut mungkin berisi daftar nama negara, tetapi ketika dievaluasi dalam kebijakan, `iot:Certificate.Subject.Country` akan diganti dengan nama negara pertama.

Anda dapat meminta nilai atribut tertentu selain nilai pertama dengan menggunakan indeks berbasis satu. Misalnya, `iot:Certificate.Subject.Country.1` diganti dengan nama negara kedua di `Certificate.Subject.Country` atribut. Jika Anda menentukan nilai indeks yang tidak ada (misalnya, jika Anda meminta nilai ketiga ketika hanya ada dua nilai yang ditetapkan ke atribut), tidak ada substitusi yang dibuat dan otorisasi gagal. Anda dapat menggunakan `.List` akhiran pada nama variabel kebijakan untuk menentukan semua nilai atribut.

## Atribut nama alternatif penerbit
<a name="issuer-alternate-name-attributes"></a>

Variabel AWS IoT Core kebijakan berikut mendukung pemberian atau penolakan izin, berdasarkan atribut nama alternatif penerbit yang ditetapkan oleh penerbit sertifikat.
+ `iot:Certificate.Issuer.AlternativeName.RFC822Name`
+ `iot:Certificate.Issuer.AlternativeName.DNSName`
+ `iot:Certificate.Issuer.AlternativeName.DirectoryName`
+ `iot:Certificate.Issuer.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Issuer.AlternativeName.IPAddress`

## Atribut nama alternatif subjek
<a name="subject-alternate-name-attributes"></a>

Variabel AWS IoT Core kebijakan berikut mendukung pemberian atau penolakan izin, berdasarkan atribut nama alternatif subjek yang ditetapkan oleh penerbit sertifikat.
+ `iot:Certificate.Subject.AlternativeName.RFC822Name`
+ `iot:Certificate.Subject.AlternativeName.DNSName`
+ `iot:Certificate.Subject.AlternativeName.DirectoryName`
+ `iot:Certificate.Subject.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Subject.AlternativeName.IPAddress`

## Atribut lainnya
<a name="other-attributes"></a>

Anda dapat menggunakan `iot:Certificate.SerialNumber` untuk mengizinkan atau menolak akses ke AWS IoT Core sumber daya, berdasarkan nomor seri sertifikat. Variabel `iot:Certificate.AvailableKeys` kebijakan berisi nama semua variabel kebijakan sertifikat yang berisi nilai.

# Menggunakan variabel kebijakan sertifikat X.509
<a name="use-policy-variables"></a>

Topik ini memberikan rincian tentang cara menggunakan variabel kebijakan sertifikat. Variabel kebijakan sertifikat X.509 sangat penting saat Anda membuat AWS IoT Core kebijakan yang memberikan izin berdasarkan atribut sertifikat X.509. Jika sertifikat X.509 Anda tidak menyertakan atribut sertifikat tertentu tetapi variabel kebijakan sertifikat terkait digunakan dalam dokumen kebijakan Anda, evaluasi kebijakan dapat menyebabkan perilaku yang tidak terduga. Ini karena variabel kebijakan yang hilang tidak dievaluasi dalam pernyataan kebijakan.

**Topics**
+ [Contoh sertifikat X.509](#certificate-example)
+ [Menggunakan atribut penerbit sertifikat sebagai variabel kebijakan sertifikat](#issuer-attributes-policy)
+ [Menggunakan atribut subjek sertifikat sebagai variabel kebijakan sertifikat](#subject-attributes-policy)
+ [Menggunakan atribut nama alternatif Penerbit sertifikat sebagai variabel kebijakan sertifikat](#issuer-alternate-name-attributes-policy)
+ [Menggunakan atribut nama alternatif subjek sertifikat sebagai variabel kebijakan sertifikat](#subject-alternate-name-attributes-policy)
+ [Menggunakan atribut sertifikat lain sebagai variabel kebijakan sertifikat](#other-attributes-policy)
+ [X.509 Keterbatasan variabel kebijakan sertifikat](#policy-limits)
+ [Contoh kebijakan menggunakan variabel kebijakan sertifikat](#example-attributes-policy)

## Contoh sertifikat X.509
<a name="certificate-example"></a>

Sertifikat X.509 yang khas mungkin muncul sebagai berikut. Sertifikat contoh ini mencakup atribut sertifikat. Selama evaluasi AWS IoT Core kebijakan, atribut sertifikat berikut akan diisi sebagai variabel kebijakan sertifikat:`Serial Number`,,`Issuer`, `Subject``X509v3 Issuer Alternative Name`, dan`X509v3 Subject Alternative Name`.

```
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            92:12:85:cb:b7:a5:e0:86
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=IoT Devices, OU=SmartHome, ST=WA, CN=IoT Devices Primary CA, 
				GN=Primary CA1/initials=XY/dnQualifier=Example corp,
				SN=SmartHome/ title=CA1/pseudonym=Primary_CA/generationQualifier=2/serialNumber=987		
        Validity
            Not Before: Mar 26 03:25:40 2024 GMT
            Not After : Apr 28 03:25:40 2025 GMT
        Subject: C=US, O=IoT Devices, OU=LightBulb, ST=NY, CN=LightBulb Device Cert, 
				GN=Bulb/initials=ZZ/dnQualifier=Bulb001, 
				SN=Multi Color/title=RGB/pseudonym=RGB Device/generationQualifier=4/serialNumber=123
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    << REDACTED >>
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name: 
                DNS:example.com, IP Address:1.2.3.4, URI:ResourceIdentifier001, email:device1@example.com, DirName:/C=US/O=IoT/OU=SmartHome/CN=LightBulbCert
            X509v3 Issuer Alternative Name: 
                DNS:issuer.com, IP Address:5.6.7.8, URI:PrimarySignerCA, email:primary@issuer.com, DirName:/C=US/O=Issuer/OU=IoT Devices/CN=Primary Issuer CA
    Signature Algorithm: sha256WithRSAEncryption
         << REDACTED >>
```

## Menggunakan atribut penerbit sertifikat sebagai variabel kebijakan sertifikat
<a name="issuer-attributes-policy"></a>

Tabel berikut memberikan rincian tentang bagaimana atribut penerbit sertifikat akan diisi dalam kebijakan. AWS IoT Core 


**Atribut penerbit yang akan diisi dalam kebijakan**  

| Atribut penerbit sertifikat | Variabel kebijakan sertifikat | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/use-policy-variables.html)  | 

## Menggunakan atribut subjek sertifikat sebagai variabel kebijakan sertifikat
<a name="subject-attributes-policy"></a>

Tabel berikut memberikan rincian tentang bagaimana atribut subjek sertifikat akan diisi dalam AWS IoT Core kebijakan.


**Atribut subjek yang akan diisi dalam kebijakan**  

| Atribut subjek sertifikat | Variabel kebijakan sertifikat | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/use-policy-variables.html)  | 

## Menggunakan atribut nama alternatif Penerbit sertifikat sebagai variabel kebijakan sertifikat
<a name="issuer-alternate-name-attributes-policy"></a>

Tabel berikut memberikan rincian tentang bagaimana atribut nama alternatif penerbit sertifikat akan diisi dalam kebijakan. AWS IoT Core 


**Atribut nama alternatif penerbit yang akan diisi dalam kebijakan**  

| Nama Alternatif Penerbit X509v3 | Atribut dalam kebijakan | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/use-policy-variables.html)  | 

## Menggunakan atribut nama alternatif subjek sertifikat sebagai variabel kebijakan sertifikat
<a name="subject-alternate-name-attributes-policy"></a>

Tabel berikut memberikan rincian tentang bagaimana atribut nama alternatif subjek sertifikat akan diisi dalam AWS IoT Core kebijakan.


**Atribut nama alternatif subjek yang akan diisi dalam kebijakan**  

| X509v3 Nama Alternatif Subjek | Atribut dalam kebijakan | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/use-policy-variables.html)  | 

## Menggunakan atribut sertifikat lain sebagai variabel kebijakan sertifikat
<a name="other-attributes-policy"></a>

Tabel berikut memberikan rincian tentang bagaimana atribut sertifikat lainnya akan diisi dalam AWS IoT Core kebijakan.


**Atribut lain yang akan diisi dalam kebijakan**  

| Atribut sertifikat lainnya | Variabel kebijakan sertifikat | 
| --- | --- | 
|  `Serial Number: 92:12:85:cb:b7:a5:e0:86`  |  `iot:Certificate.SerialNumber = 10525622389124227206`  | 

## X.509 Keterbatasan variabel kebijakan sertifikat
<a name="policy-limits"></a>

Batasan berikut berlaku untuk variabel kebijakan sertifikat X.509:

Variabel kebijakan yang hilang  
Jika sertifikat X.509 Anda tidak menyertakan atribut sertifikat tertentu tetapi variabel kebijakan sertifikat terkait digunakan dalam dokumen kebijakan Anda, evaluasi kebijakan dapat menyebabkan perilaku yang tidak terduga. Ini karena variabel kebijakan yang hilang tidak dievaluasi dalam pernyataan kebijakan.

 SerialNumber Format sertifikat  
AWS IoT Core memperlakukan nomor seri sertifikat sebagai representasi string dari bilangan bulat desimal. Misalnya, jika kebijakan hanya mengizinkan koneksi dengan ID Klien yang cocok dengan nomor seri sertifikat, ID klien harus berupa nomor seri dalam format desimal.

Wildcard  
Jika karakter wildcard hadir dalam atribut sertifikat, variabel kebijakan tidak diganti dengan nilai atribut sertifikat. Ini akan meninggalkan `${policy-variable}` teks dalam dokumen kebijakan. Hal ini dapat menyebabkan kegagalan otorisasi. Karakter wildcard berikut dapat digunakan:`*`,,`$`, `+``?`, dan`#`.

Bidang array  
Atribut sertifikat yang berisi array dibatasi hingga lima item. Item tambahan diabaikan.

Panjang tali  
Semua nilai string dibatasi hingga 1024 karakter. Jika atribut sertifikat berisi string yang lebih panjang dari 1024 karakter, variabel kebijakan tidak diganti dengan nilai atribut sertifikat. Ini akan meninggalkan `${policy-variable}` dokumen kebijakan. Hal ini dapat menyebabkan kegagalan otorisasi.

Karakter khusus  
Setiap karakter khusus, seperti`,`,,`"`,`\`,`+`, `=``<`, `>` dan `;` harus diawali dengan garis miring terbalik (`\`) bila digunakan dalam variabel kebijakan. Misalnya, `Amazon Web Services O=Amazon.com Inc. L=Seattle ST=Washington C=US` menjadi `Amazon Web Service O\=Amazon.com Inc. L\=Seattle ST\=Washington C\=US`.

## Contoh kebijakan menggunakan variabel kebijakan sertifikat
<a name="example-attributes-policy"></a>

Dokumen kebijakan berikut memungkinkan koneksi dengan ID klien yang cocok dengan nomor seri sertifikat dan penerbitan ke topik yang cocok dengan pola:`${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*`. 

**penting**  
Jika sertifikat X.509 Anda tidak menyertakan atribut sertifikat tertentu tetapi variabel kebijakan sertifikat terkait digunakan dalam dokumen kebijakan Anda, evaluasi kebijakan dapat menyebabkan perilaku yang tidak terduga. Ini karena variabel kebijakan yang hilang tidak dievaluasi dalam pernyataan kebijakan. Misalnya, jika Anda melampirkan dokumen kebijakan berikut ke sertifikat yang tidak berisi `iot:Certificate.Subject.Organization` atribut, variabel kebijakan `iot:Certificate.Subject.Organization` sertifikat tidak akan diisi selama evaluasi kebijakan.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Certificate.SerialNumber}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*"
			]
		}
	]
}
```

Anda juga dapat menggunakan [operator kondisi Null](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null) untuk memastikan bahwa variabel kebijakan sertifikat yang digunakan dalam kebijakan diisi selama evaluasi kebijakan. Dokumen kebijakan berikut mengizinkan `iot:Connect` sertifikat hanya jika terdapat atribut Nama umum Sertifikat Sertifikat dan Subjek Sertifikat.

Semua variabel kebijakan sertifikat memiliki nilai String, sehingga semua [operator kondisi String](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String) didukung.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/*"
			],
			"Condition": {
				"Null": {
					"iot:Certificate.SerialNumber": "false",
					"iot:Certificate.Subject.CommonName": "false"
				}
			}
		}
	]
}
```

# Pencegahan "confused deputy" lintas layanan
<a name="cross-service-confused-deputy-prevention"></a>

*Masalah confused deputy* adalah masalah keamanan saat entitas yang tidak memiliki izin untuk melakukan suatu tindakan dapat memaksa entitas yang lebih berhak untuk melakukan tindakan tersebut. Pada tahun AWS, peniruan lintas layanan dapat mengakibatkan masalah wakil yang membingungkan. Peniruan identitas lintas layanan dapat terjadi ketika satu layanan (*layanan yang dipanggil*) memanggil layanan lain (*layanan yang dipanggil*). Layanan panggilan dapat dimanipulasi untuk menggunakan izinnya untuk bertindak atas sumber daya pelanggan lain dengan cara yang seharusnya tidak memiliki izin untuk mengakses. Untuk mencegah hal ini, AWS menyediakan alat yang membantu Anda melindungi data untuk semua layanan dengan principal layanan yang telah diberi akses ke sumber daya di akun Anda. 

Untuk membatasi izin yang AWS IoT memberikan layanan lain ke sumber daya, sebaiknya gunakan kunci konteks kondisi [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)dan global dalam kebijakan sumber daya. Jika Anda menggunakan kedua kunci konteks kondisi global, `aws:SourceAccount` nilai dan akun dalam `aws:SourceArn` nilai harus menggunakan ID akun yang sama saat digunakan dalam pernyataan kebijakan yang sama.

Cara paling efektif untuk melindungi dari masalah wakil yang membingungkan adalah dengan menggunakan kunci konteks kondisi `aws:SourceArn` global dengan Nama Sumber Daya Amazon (ARN) lengkap dari sumber daya. Untuk AWS IoT, Anda `aws:SourceArn` harus mematuhi format: `arn:aws:iot:region:account-id:resource-type/resource-id` untuk izin khusus sumber daya atau`arn:aws:iot:region:account-id:*`. Resource-id dapat berupa nama atau ID sumber daya yang diizinkan, atau pernyataan wildcard dari sumber daya yang diizinkan. IDs Pastikan bahwa *region* cocok dengan AWS IoT Wilayah Anda dan *account-id* cocok dengan ID akun pelanggan Anda. 

Contoh berikut menunjukkan bagaimana mencegah masalah wakil yang bingung dengan menggunakan kunci konteks kondisi `aws:SourceAccount` global `aws:SourceArn` dan dalam kebijakan kepercayaan AWS IoT peran. Untuk contoh lainnya, lihat [Contoh terperinci dari pencegahan wakil yang membingungkan](#cross-service-confused-deputy-prevention-examples).

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:*"
        }
         }
      }
   ]
}
```

**catatan**  
Jika Anda mendapatkan kesalahan penolakan akses, itu bisa jadi karena integrasi layanan dengan AWS Security Token Service (STS) tidak mendukung kunci `aws:SourceAccount` konteks `aws:SourceArn` dan.

## Contoh terperinci dari pencegahan wakil yang membingungkan
<a name="cross-service-confused-deputy-prevention-examples"></a>

**Bagian ini memberikan contoh rinci tentang bagaimana mencegah masalah wakil yang membingungkan dengan menggunakan kunci konteks kondisi `aws:SourceAccount` global `aws:SourceArn` dan dalam kebijakan kepercayaan AWS IoT peran.**
+ [Penyediaan armada](#cross-service-confused-deputy-prevention-fleet-provision)
+ [JITP](#cross-service-confused-deputy-prevention-JITP)
+ [Penyedia kredensi](#cross-service-confused-deputy-prevention-credential-provider)

### Penyediaan armada
<a name="cross-service-confused-deputy-prevention-fleet-provision"></a>

Anda dapat [mengonfigurasi penyediaan armada](https://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html) menggunakan sumber daya templat penyediaan. Saat templat penyediaan mereferensikan peran penyediaan, kebijakan kepercayaan peran tersebut dapat menyertakan kunci dan kondisi. `aws:SourceArn` `aws:SourceAccount` Kunci-kunci ini membatasi sumber daya yang konfigurasi dapat memanggil `sts:AssumeRole` permintaan.

Peran dengan kebijakan kepercayaan berikut hanya dapat diasumsikan oleh IoT principal (`iot.amazonaws.com`) untuk template penyediaan yang ditentukan dalam. `SourceArn`

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:provisioningtemplate/example_template"
        }
         }
      }
   ]
}
```

### JITP
<a name="cross-service-confused-deputy-prevention-JITP"></a>

Dalam [just-in-time provisioning (JITP)](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html), Anda dapat menggunakan template penyediaan sebagai sumber daya yang terpisah dari CA atau menentukan isi template dan peran sebagai bagian dari konfigurasi sertifikat CA. Nilai `aws:SourceArn` dalam kebijakan kepercayaan AWS IoT peran bergantung pada cara Anda menentukan templat penyediaan.

#### Mendefinisikan template penyediaan sebagai sumber daya terpisah
<a name="cross-service-confused-deputy-prevention-JITP-template"></a>

Jika Anda mendefinisikan template penyediaan Anda sebagai sumber daya terpisah, nilainya `aws:SourceArn` bisa. `"arn:aws:iot:region:account-id:provisioningtemplate/example_template"` Anda dapat menggunakan contoh kebijakan yang sama di[Penyediaan armada](#cross-service-confused-deputy-prevention-fleet-provision).

#### Mendefinisikan template penyediaan dalam sertifikat CA
<a name="cross-service-confused-deputy-prevention-JITP-CA"></a>

Jika Anda menentukan templat penyediaan Anda dalam sumber daya sertifikat CA, nilai `aws:SourceArn` dapat berupa `"arn:aws:iot:region:account-id:cacert/cert_id"` atau. `"arn:aws:iot:region:account-id:cacert/*"` Anda dapat menggunakan wildcard saat pengenal sumber daya, seperti ID sertifikat CA, tidak diketahui pada saat pembuatan.

Peran dengan kebijakan kepercayaan berikut hanya dapat diasumsikan oleh prinsipal IoT (`iot.amazonaws.com`) untuk sertifikat CA yang ditentukan dalam. `SourceArn`

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:cacert/8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e"
        }
         }
      }
   ]
}
```

Saat membuat sertifikat CA, Anda dapat mereferensikan peran penyediaan dalam konfigurasi pendaftaran. Kebijakan kepercayaan dari peran penyediaan dapat digunakan `aws:SourceArn` untuk membatasi sumber daya apa yang dapat diasumsikan untuk peran tersebut. Namun, selama CACertificate panggilan [Register](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) awal untuk mendaftarkan sertifikat CA, Anda tidak akan memiliki ARN sertifikat CA untuk menentukan dalam kondisi tersebut`aws:SourceArn`.

Untuk mengatasi hal ini, yaitu, untuk menentukan kebijakan kepercayaan peran penyediaan ke sertifikat CA tertentu yang terdaftar AWS IoT Core, Anda dapat melakukan hal berikut:
+ Pertama, hubungi [Register CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) tanpa memberikan `RegistrationConfig` parameter.
+ Setelah sertifikat CA terdaftar AWS IoT Core, hubungi [Perbarui CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) di atasnya.

  Dalam CACertificate panggilan Perbarui, berikan `RegistrationConfig` yang menyertakan kebijakan kepercayaan peran penyediaan dengan `aws:SourceArn` disetel ke ARN sertifikat CA yang baru terdaftar.

### Penyedia kredensi
<a name="cross-service-confused-deputy-prevention-credential-provider"></a>

Untuk [penyedia AWS IoT Core kredensyal](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html), gunakan yang sama yang Akun AWS Anda gunakan untuk membuat alias peran`aws:SourceAccount`, dan tentukan pernyataan yang cocok dengan ARN sumber daya dari jenis sumber daya rolealias. `aws:SourceArn` Saat membuat peran IAM untuk digunakan dengan penyedia AWS IoT Core kredensi, Anda harus menyertakan dalam `aws:SourceArn` kondisi alias peran apa pun yang mungkin perlu mengambil peran tersebut, sehingga mengizinkan permintaan lintas layanan. ARNs `sts:AssumeRole`

Peran dengan kebijakan kepercayaan berikut hanya dapat diasumsikan oleh kepala penyedia AWS IoT Core kredensi (`credentials.iot.amazonaws.com`) untuk RoleAlias yang ditentukan dalam. `SourceArn` Jika prinsipal mencoba untuk mengambil kredensi untuk alias peran selain yang ditentukan dalam `aws:SourceArn` kondisi, permintaan akan ditolak, bahkan jika alias peran lain tersebut merujuk peran IAM yang sama.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "credentials.iot.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:iot:us-east-1:123456789012:rolealias/example_rolealias"
        }
      }
    }
  ]
}
```

# AWS IoT Core contoh kebijakan
<a name="example-iot-policies"></a>

Contoh kebijakan di bagian ini menggambarkan dokumen kebijakan yang digunakan untuk menyelesaikan tugas-tugas umum di AWS IoT Core bagian ini. Anda dapat menggunakannya sebagai contoh untuk memulai saat membuat kebijakan untuk solusi Anda.<a name="example-iot-policies-elements"></a>

Contoh di bagian ini menggunakan elemen kebijakan ini:
+ [AWS IoT Core tindakan kebijakan](iot-policy-actions.md)
+ [AWS IoT Core sumber daya aksi](iot-action-resources.md)
+ [AWS IoT contoh kebijakan berbasis identitas](security_iam_id-based-policy-examples.md)
+ [Variabel AWS IoT Core kebijakan dasar](basic-policy-variables.md)
+ [Variabel kebijakan Sertifikat X.509 AWS IoT Core](cert-policy-variables.md)

**Topics**
+ [Contoh kebijakan Connect](connect-policy.md)
+ [Contoh kebijakan Publikasi/Berlangganan](pub-sub-policy.md)
+ [Connect dan publikasikan contoh kebijakan](connect-and-pub.md)
+ [Contoh kebijakan pesan yang dipertahankan](retained-message-policy-examples.md)
+ [Contoh kebijakan sertifikat](certificate-policy-examples.md)
+ [Contoh kebijakan hal](thing-policy-examples.md)
+ [Contoh kebijakan pekerjaan dasar](basic-jobs-example.md)

# Contoh kebijakan Connect
<a name="connect-policy"></a>

Kebijakan berikut menolak izin ke klien IDs `client1` dan `client2` untuk terhubung AWS IoT Core, sementara memungkinkan perangkat untuk terhubung menggunakan ID klien. ID klien cocok dengan nama benda yang terdaftar di AWS IoT Core registri dan dilampirkan ke prinsipal yang digunakan untuk koneksi:

**catatan**  
Untuk perangkat terdaftar, kami menyarankan Anda menggunakan [variabel kebijakan hal](thing-policy-variables.md) untuk `Connect` tindakan dan melampirkan benda ke prinsipal yang digunakan untuk koneksi.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/client1",
				"arn:aws:iot:us-east-1:123456789012:client/client2"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		}
	]
}
```

Kebijakan berikut memberikan izin untuk terhubung AWS IoT Core dengan ID `client1` klien. Contoh kebijakan ini untuk perangkat yang tidak terdaftar.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/client1"
			]
		}
	]
}
```

## Contoh kebijakan sesi persisten MQTT
<a name="persistent-sessions-examples"></a>

`connectAttributes`memungkinkan Anda untuk menentukan atribut apa yang ingin Anda gunakan dalam pesan connect Anda dalam kebijakan IAM Anda seperti `PersistentConnect` dan`LastWill`. Untuk informasi selengkapnya, lihat [Menggunakan ConnectAttributes](mqtt.md#connect-attribute).

Kebijakan berikut memungkinkan terhubung dengan `PersistentConnect` fitur:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

Kebijakan berikut ini melarang`PersistentConnect`, fitur lain diperbolehkan:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringNotEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

Kebijakan di atas juga dapat dinyatakan menggunakan`StringEquals`, fitur lain termasuk fitur baru diperbolehkan:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1"
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

Kebijakan berikut memungkinkan koneksi oleh keduanya `PersistentConnect` dan`LastWill`, fitur baru lainnya tidak diperbolehkan:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		}
	]
}
```

Kebijakan berikut memungkinkan koneksi bersih oleh klien dengan atau tanpa`LastWill`, tidak ada fitur lain yang diizinkan:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "iot:Connect"
        ],
        "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
        "Condition": {
            "StringEquals": {
                "iot:ConnectAttributes": "LastWill"
        }
        }
    }]
}
```

Kebijakan berikut hanya mengizinkan koneksi menggunakan fitur default:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

Kebijakan berikut hanya mengizinkan koneksi dengan`PersistentConnect`, fitur baru apa pun diizinkan selama koneksi menggunakan`PersistentConnect`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

Kebijakan berikut menyatakan koneksi harus memiliki keduanya `PersistentConnect` dan `LastWill` penggunaan, tidak ada fitur baru yang diizinkan:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

Kebijakan berikut tidak boleh dimiliki `PersistentConnect` tetapi dapat dimiliki`LastWill`, fitur baru lainnya tidak diperbolehkan:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "iot:ConnectAttributes": [
                        "LastWill"
                    ]
            }
        }
        }
    ]
}
```

Kebijakan berikut memungkinkan terhubung hanya oleh klien yang memiliki topik `LastWill` dengan`"my/lastwill/topicName"`, fitur apa pun diizinkan selama menggunakan `LastWill` topik:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        }
    ]
}
```

Kebijakan berikut hanya mengizinkan koneksi bersih menggunakan fitur tertentu`LastWillTopic`, fitur apa pun diizinkan selama menggunakan`LastWillTopic`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

# Contoh kebijakan Publikasi/Berlangganan
<a name="pub-sub-policy"></a>

Kebijakan yang Anda gunakan bergantung pada cara Anda terhubung AWS IoT Core. Anda dapat terhubung AWS IoT Core dengan menggunakan klien MQTT, HTTP, atau. WebSocket Saat Anda terhubung dengan klien MQTT, Anda mengautentikasi dengan sertifikat X.509. Saat Anda terhubung melalui HTTP atau WebSocket protokol, Anda mengautentikasi dengan Signature Version 4 dan Amazon Cognito. 

**catatan**  
Untuk perangkat terdaftar, kami menyarankan Anda menggunakan [variabel kebijakan hal](thing-policy-variables.md) untuk `Connect` tindakan dan melampirkan benda ke prinsipal yang digunakan untuk koneksi. 

**Topics**
+ [Menggunakan karakter wildcard di MQTT dan kebijakan AWS IoT Core](#pub-sub-policy-cert)
+ [Kebijakan untuk mempublikasikan, berlangganan, dan menerima pesan topik to/from tertentu](#pub-sub-specific-topic)
+ [Kebijakan untuk mempublikasikan, berlangganan, dan menerima to/from topik pesan dengan awalan tertentu](#pub-sub-policy-specific-topic-prefix)
+ [Kebijakan untuk mempublikasikan, berlangganan, dan menerima to/from topik pesan khusus untuk setiap perangkat](#pub-sub-specific-topic-device)
+ [Kebijakan untuk mempublikasikan, berlangganan, dan menerima to/from topik pesan dengan atribut hal dalam nama topik](#pub-sub-topic-attribute)
+ [Kebijakan untuk menolak mempublikasikan pesan ke subtopik dari nama topik](#pub-sub-deny-publish)
+ [Kebijakan untuk menolak menerima pesan dari subtopik nama topik](#pub-sub-deny-receive)
+ [Kebijakan untuk berlangganan topik menggunakan karakter wildcard MQTT](#pub-sub-topic-wildcard)
+ [Kebijakan untuk HTTP dan WebSocket klien](#pub-sub-policy-cognito)

## Menggunakan karakter wildcard di MQTT dan kebijakan AWS IoT Core
<a name="pub-sub-policy-cert"></a>

MQTT dan AWS IoT Core kebijakan memiliki karakter wildcard yang berbeda dan Anda harus memilihnya setelah mempertimbangkan dengan cermat. Di MQTT, karakter wildcard `+` dan `#` digunakan dalam [filter topik MQTT untuk berlangganan beberapa nama topik](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html#topicfilters). AWS IoT Core kebijakan menggunakan `*` dan `?` sebagai karakter wildcard dan mengikuti konvensi kebijakan [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-json). Dalam dokumen kebijakan, `*` mewakili kombinasi karakter dan tanda tanya `?` mewakili karakter tunggal apa pun. Dalam dokumen kebijakan, karakter wildcard MQTT, `+` dan `#` diperlakukan sebagai karakter tanpa arti khusus. Untuk menjelaskan beberapa nama topik dan filter topik dalam `resource` atribut kebijakan, gunakan karakter `*` dan `?` wildcard sebagai pengganti karakter wildcard MQTT.

Saat Anda memilih karakter wildcard yang akan digunakan dalam dokumen kebijakan, pertimbangkan bahwa `*` karakter tersebut tidak terbatas pada satu tingkat topik. `+`Karakter terbatas pada tingkat topik tunggal dalam filter topik MQTT. Untuk membantu membatasi spesifikasi wildcard ke satu tingkat filter topik MQTT, pertimbangkan untuk menggunakan beberapa karakter. `?` Untuk informasi selengkapnya tentang penggunaan karakter wildcard dalam resource kebijakan dan contoh lainnya tentang apa yang cocok, lihat [Menggunakan wildcard di](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_resource.html#reference_policies_elements_resource_wildcards) resource. ARNs

Tabel di bawah ini menunjukkan karakter wildcard berbeda yang digunakan dalam MQTT dan AWS IoT Core kebijakan untuk klien MQTT.


| Karakter wildcard | Apakah karakter wildcard MQTT | Contoh di MQTT | Apakah karakter wildcard AWS IoT Core kebijakan | Contoh dalam AWS IoT Core kebijakan untuk klien MQTT | 
| --- | --- | --- | --- | --- | 
| \$1 | Ya | some/\$1 | Tidak | N/A | 
| \$1 | Ya | some/\$1/topic | Tidak | N/A | 
| \$1 | Tidak | N/A | Ya | `topicfilter/some/*/topic` `topicfilter/some/sensor*/topic`  | 
| ? | Tidak | N/A | Ya |  `topic/some/?????/topic` `topicfilter/some/sensor???/topic`  | 

## Kebijakan untuk mempublikasikan, berlangganan, dan menerima pesan topik to/from tertentu
<a name="pub-sub-specific-topic"></a>

Berikut ini menunjukkan contoh untuk perangkat terdaftar dan tidak terdaftar untuk menerbitkan, berlangganan dan menerima pesan to/from topik bernama “some\$1specific\$1topic”. Contoh juga menyoroti itu `Publish` dan `Receive` menggunakan “topik” sebagai sumber daya, dan `Subscribe` menggunakan “topicfilter” sebagai sumber daya.

------
#### [ Registered devices ]

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memungkinkan perangkat terhubung dengan ClientID yang cocok dengan nama sesuatu di registri. Ini juga menyediakan`Publish`, `Subscribe` dan `Receive` izin untuk topik bernama “some\$1specific\$1topic”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Untuk perangkat yang tidak terdaftar dalam AWS IoT Core registri, kebijakan berikut memungkinkan perangkat untuk terhubung menggunakan ClientID1, ClientId2 atau ClientID3. Ini juga menyediakan`Publish`, `Subscribe` dan `Receive` izin untuk topik bernama “some\$1specific\$1topic”.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        }
    ]
}
```

------

## Kebijakan untuk mempublikasikan, berlangganan, dan menerima to/from topik pesan dengan awalan tertentu
<a name="pub-sub-policy-specific-topic-prefix"></a>

Berikut ini menunjukkan contoh untuk perangkat terdaftar dan tidak terdaftar untuk menerbitkan, berlangganan, dan menerima to/from topik pesan yang diawali dengan “topic\$1prefix”.

**catatan**  
Perhatikan penggunaan karakter wildcard `*` dalam contoh ini. Meskipun `*` berguna untuk memberikan izin untuk beberapa nama topik dalam satu pernyataan, ini dapat menyebabkan konsekuensi yang tidak diinginkan dengan memberikan lebih banyak hak istimewa ke perangkat daripada yang diperlukan. Jadi kami menyarankan Anda hanya menggunakan karakter wildcard `*` setelah mempertimbangkan dengan cermat.

------
#### [ Registered devices ]

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memungkinkan perangkat terhubung dengan ClientID yang cocok dengan nama sesuatu di registri. Ini juga menyediakan`Publish`, `Subscribe` dan `Receive` izin untuk topik yang diawali dengan “topic\$1prefix”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Untuk perangkat yang tidak terdaftar dalam AWS IoT Core registri, kebijakan berikut memungkinkan perangkat untuk terhubung menggunakan ClientID1, ClientId2 atau ClientID3. Ini juga menyediakan`Publish`, `Subscribe` dan `Receive` izin untuk topik yang diawali dengan “topic\$1prefix”.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish",
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
            ]
        }
    ]
}
```

------

## Kebijakan untuk mempublikasikan, berlangganan, dan menerima to/from topik pesan khusus untuk setiap perangkat
<a name="pub-sub-specific-topic-device"></a>

Berikut ini menunjukkan contoh untuk perangkat terdaftar dan tidak terdaftar untuk menerbitkan, berlangganan, dan menerima to/from topik pesan yang khusus untuk perangkat yang diberikan.

------
#### [ Registered devices ]

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memungkinkan perangkat terhubung dengan ClientID yang cocok dengan nama sesuatu di registri. Ini memberikan izin untuk mempublikasikan ke topik spesifik (`sensor/device/${iot:Connection.Thing.ThingName}`) dan juga berlangganan dan menerima dari topik khusus hal (). `command/device/${iot:Connection.Thing.ThingName}` Jika nama benda dalam registri adalah “thing1", perangkat akan dapat mempublikasikan ke topik" sensor/device/thing1". The device will also be able to subscribe to and receive from the topic "command/device/thing 1".

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Untuk perangkat yang tidak terdaftar dalam AWS IoT Core registri, kebijakan berikut memungkinkan perangkat untuk terhubung menggunakan ClientID1, ClientId2 atau ClientID3. Ini memberikan izin untuk mempublikasikan ke topik khusus klien (`sensor/device/${iot:ClientId}`), dan juga berlangganan dan menerima dari topik khusus klien (). `command/device/${iot:ClientId}` Jika perangkat terhubung dengan ClientID sebagai ClientId1, itu akan dapat mempublikasikan ke topik "1". sensor/device/clientId Perangkat juga akan dapat berlangganan dan menerima dari topik`device/clientId1/command`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

------

## Kebijakan untuk mempublikasikan, berlangganan, dan menerima to/from topik pesan dengan atribut hal dalam nama topik
<a name="pub-sub-topic-attribute"></a>

Berikut ini menunjukkan contoh untuk perangkat terdaftar untuk menerbitkan, berlangganan dan menerima pesan to/from topik yang namanya termasuk atribut hal.

**catatan**  
Atribut benda hanya ada untuk perangkat yang terdaftar di AWS IoT Core Registry. Tidak ada contoh yang sesuai untuk perangkat yang tidak terdaftar.

------
#### [ Registered devices ]

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memungkinkan perangkat terhubung dengan ClientID yang cocok dengan nama sesuatu di registri. Ini memberikan izin untuk mempublikasikan ke topik (`sensor/${iot:Connection.Thing.Attributes[version]}`), dan berlangganan dan menerima dari topik (`command/${iot:Connection.Thing.Attributes[location]}`) di mana nama topik mencakup atribut hal. Jika nama benda dalam registri memiliki `version=v1` dan`location=Seattle`, perangkat akan dapat mempublikasikan ke topik "sensor/v1", and subscribe to and receive from the topic "command/Seattle”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/${iot:Connection.Thing.Attributes[version]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/${iot:Connection.Thing.Attributes[location]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/${iot:Connection.Thing.Attributes[location]}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Karena atribut thing hanya ada untuk perangkat yang terdaftar di AWS IoT Core registri, tidak ada contoh yang sesuai untuk hal-hal yang tidak terdaftar.

------

## Kebijakan untuk menolak mempublikasikan pesan ke subtopik dari nama topik
<a name="pub-sub-deny-publish"></a>

Berikut ini menunjukkan contoh untuk perangkat terdaftar dan tidak terdaftar untuk mempublikasikan pesan ke semua topik kecuali subtopik tertentu.

------
#### [ Registered devices ]

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memungkinkan perangkat terhubung dengan ClientID yang cocok dengan nama sesuatu di registri. Ini memberikan izin untuk mempublikasikan ke semua topik yang diawali dengan “departemen/” tetapi tidak ke subtopik “departemen/admin”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/*"
			]
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/admins"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Untuk perangkat yang tidak terdaftar dalam AWS IoT Core registri, kebijakan berikut memungkinkan perangkat untuk terhubung menggunakan ClientID1, ClientId2 atau ClientID3. Ini memberikan izin untuk mempublikasikan ke semua topik yang diawali dengan “departemen/” tetapi tidak ke subtopik “departemen/admin”.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/admins"
            ]
        }
    ]
}
```

------

## Kebijakan untuk menolak menerima pesan dari subtopik nama topik
<a name="pub-sub-deny-receive"></a>

Berikut ini menunjukkan contoh untuk perangkat terdaftar dan tidak terdaftar untuk berlangganan dan menerima pesan dari topik dengan awalan tertentu kecuali subtopik tertentu.

------
#### [ Registered devices ]

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memungkinkan perangkat terhubung dengan ClientID yang cocok dengan nama sesuatu di registri. Kebijakan ini memungkinkan perangkat untuk berlangganan topik apa pun yang diawali dengan “topic\$1prefix”. Dengan menggunakan `NotResource` dalam pernyataan untuk`iot:Receive`, kami mengizinkan perangkat menerima pesan dari semua topik yang telah dilanggani perangkat, kecuali topik yang diawali dengan “prefix/restricted". For example, with this policy, devices can subscribe to "topic\$1prefix/topic1" and even "topic\$1prefix/restricted", however, they will only receive messages from the topic "topic\$1prefix/topic1" and no messages from the topic "topic\$1prefix/restrictedtopik\$1”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

Untuk perangkat yang tidak terdaftar dalam AWS IoT Core registri, kebijakan berikut memungkinkan perangkat untuk terhubung menggunakan ClientID1, ClientId2 atau ClientID3. Kebijakan ini memungkinkan perangkat untuk berlangganan topik apa pun yang diawali dengan “topic\$1prefix”. Dengan menggunakan `NotResource` dalam pernyataan untuk`iot:Receive`, kami mengizinkan perangkat menerima pesan dari semua topik yang telah dilanggani perangkat, kecuali topik yang diawali dengan “prefix/restricted". For example, with this policy, devices can subscribe to "topic\$1prefix/topic1" and even "topic\$1prefix/restricted". However, they will only receive messages from the topic "topic\$1prefix/topic1" and no messages from the topic "topic\$1prefix/restrictedtopik\$1”.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
        }
    ]
}
```

------

## Kebijakan untuk berlangganan topik menggunakan karakter wildcard MQTT
<a name="pub-sub-topic-wildcard"></a>

Karakter wildcard MQTT \$1 dan \$1 diperlakukan sebagai string literal, tetapi mereka tidak diperlakukan sebagai wildcard saat digunakan dalam kebijakan. AWS IoT Core Di MQTT, \$1 dan \$1 diperlakukan sebagai wildcard hanya saat berlangganan filter topik tetapi sebagai string literal di semua konteks lainnya. Kami menyarankan Anda hanya menggunakan wildcard MQTT ini sebagai bagian dari AWS IoT Core kebijakan setelah mempertimbangkan dengan cermat.

Berikut ini menunjukkan contoh untuk hal-hal terdaftar dan tidak terdaftar menggunakan wildcard MQTT dalam kebijakan. AWS IoT Core Wildcard ini diperlakukan sebagai string literal.

------
#### [ Registered devices ]

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memungkinkan perangkat terhubung dengan ClientID yang cocok dengan nama sesuatu di registri. Kebijakan ini memungkinkan perangkat untuk berlangganan topik “departemen/\$1/karyawan” dan “lokasi/\$1”. Karena \$1 dan \$1 diperlakukan sebagai string literal dalam AWS IoT Core kebijakan, perangkat dapat berlangganan topik “departemen/\$1/karyawan” tetapi tidak ke topik "" juga. department/engineering/employees". Similarly, devices can subscribe to the topic "location/\$1" but not to the topic "location/Seattle". However, once the device subscribes to the topic "department/\$1/employees", the policy will allow them to receive messages from the topic "department/engineering/employees". Similarly, once the device subscribes to the topic "location/\$1", they will receive messages from the topic "location/Seattle

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

Untuk perangkat yang tidak terdaftar dalam AWS IoT Core registri, kebijakan berikut memungkinkan perangkat untuk terhubung menggunakan ClientID1, ClientId2 atau ClientID3. Kebijakan ini memungkinkan perangkat untuk berlangganan topik “departemen/\$1/karyawan” dan “lokasi/\$1”. Karena \$1 dan \$1 diperlakukan sebagai string literal dalam AWS IoT Core kebijakan, perangkat dapat berlangganan topik “departemen/\$1/karyawan” tetapi tidak ke topik "" juga. department/engineering/employees". Similarly, devices can subscribe to the topic "location/\$1" but not "location/Seattle". However, once the device subscribes to the topic "department/\$1/employees", the policy will allow them to receive messages from the topic "department/engineering/employees". Similarly, once the device subscribes to the topic "location/\$1", they will receive messages from the topic "location/Seattle

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
        }
    ]
}
```

------

## Kebijakan untuk HTTP dan WebSocket klien
<a name="pub-sub-policy-cognito"></a>

Saat Anda terhubung melalui HTTP atau WebSocket protokol, Anda mengautentikasi dengan Signature Version 4 dan Amazon Cognito. Identitas Amazon Cognito dapat diautentikasi atau tidak diautentikasi. Identitas terautentikasi adalah milik pengguna yang diautentikasi oleh penyedia identitas yang didukung. Identitas yang tidak diautentikasi biasanya milik pengguna tamu yang tidak mengautentikasi dengan penyedia identitas. Amazon Cognito menyediakan pengenal dan AWS kredensyal unik untuk mendukung identitas yang tidak diautentikasi. Untuk informasi selengkapnya, lihat [Otorisasi dengan identitas Amazon Cognito](cog-iot-policies.md).

Untuk operasi berikut, AWS IoT Core gunakan AWS IoT Core kebijakan yang dilampirkan pada identitas Amazon Cognito melalui API. `AttachPolicy` Ini mencakup izin yang dilampirkan ke kumpulan Identitas Amazon Cognito dengan identitas yang diautentikasi.
+ `iot:Connect`
+ `iot:Publish`
+ `iot:Subscribe`
+ `iot:Receive`
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

Itu berarti Identitas Amazon Cognito memerlukan izin dari kebijakan peran IAM dan kebijakan tersebut. AWS IoT Core Anda melampirkan kebijakan peran IAM ke kumpulan dan AWS IoT Core kebijakan ke Identitas Amazon Cognito melalui AWS IoT Core `AttachPolicy` API.

Pengguna yang diautentikasi dan tidak diautentikasi adalah jenis identitas yang berbeda. Jika Anda tidak melampirkan AWS IoT kebijakan ke Identitas Amazon Cognito, pengguna yang diautentikasi akan gagal melakukan otorisasi AWS IoT dan tidak memiliki akses ke AWS IoT sumber daya dan tindakan.

**catatan**  
Untuk AWS IoT Core operasi lain atau untuk identitas yang tidak diautentikasi, AWS IoT Core tidak mencakup izin yang dilampirkan ke peran kumpulan identitas Amazon Cognito. Untuk identitas yang diautentikasi dan tidak diautentikasi, ini adalah kebijakan paling permisif yang kami sarankan Anda lampirkan ke peran kumpulan Amazon Cognito.

**HTTP**

Untuk mengizinkan identitas Amazon Cognito yang tidak diautentikasi memublikasikan pesan melalui HTTP pada topik khusus Identitas Amazon Cognito, lampirkan kebijakan IAM berikut ke peran kumpulan Identitas Amazon Cognito:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"
            ]
        }
    ]
}
```

Untuk mengizinkan pengguna yang diautentikasi, lampirkan kebijakan sebelumnya ke peran kumpulan Identitas Amazon Cognito dan ke Identitas Amazon Cognito menggunakan API. AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html)

**catatan**  
Saat mengotorisasi identitas Amazon Cognito AWS IoT Core , pertimbangkan kebijakan dan berikan hak istimewa paling sedikit yang ditentukan. Tindakan hanya diperbolehkan jika kedua kebijakan mengizinkan tindakan yang diminta. Jika salah satu kebijakan melarang tindakan, tindakan itu tidak sah.

**MQTT**

Untuk mengizinkan identitas Amazon Cognito yang tidak diautentikasi memublikasikan pesan WebSocket MQTT tentang topik khusus Identitas Amazon Cognito di akun Anda, lampirkan kebijakan IAM berikut ke peran kumpulan Identitas Amazon Cognito:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${cognito-identity.amazonaws.com:sub}"]
        }
    ]
}
```

Untuk mengizinkan pengguna yang diautentikasi, lampirkan kebijakan sebelumnya ke peran kumpulan Identitas Amazon Cognito dan ke Identitas Amazon Cognito menggunakan API. AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html)

**catatan**  
Saat mengotorisasi identitas Amazon Cognito AWS IoT Core , pertimbangkan keduanya dan berikan hak istimewa paling sedikit yang ditentukan. Tindakan hanya diperbolehkan jika kedua kebijakan mengizinkan tindakan yang diminta. Jika salah satu kebijakan melarang tindakan, tindakan itu tidak sah.

# Connect dan publikasikan contoh kebijakan
<a name="connect-and-pub"></a>

Untuk perangkat yang terdaftar sebagai benda dalam AWS IoT Core registri, kebijakan berikut memberikan izin untuk terhubung dengan ID klien yang cocok AWS IoT Core dengan nama benda dan membatasi perangkat untuk dipublikasikan pada ID Klien atau topik MQTT khusus nama benda. Agar koneksi berhasil, nama benda harus terdaftar di AWS IoT Core registri dan diautentikasi menggunakan identitas atau prinsipal yang dilampirkan pada benda tersebut:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
      ]
    }
  ]
}
```

Untuk perangkat yang tidak terdaftar sebagai benda dalam AWS IoT Core registri, kebijakan berikut memberikan izin untuk terhubung AWS IoT Core dengan ID klien `client1` dan membatasi perangkat untuk dipublikasikan pada topik MQTT khusus Klien:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/${iot:ClientId}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:client/client1"
      ]
    }
  ]
}
```

# Contoh kebijakan pesan yang dipertahankan
<a name="retained-message-policy-examples"></a>

Menggunakan [pesan yang disimpan](mqtt.md#mqtt-retain) memerlukan kebijakan khusus. Pesan yang disimpan adalah pesan MQTT yang diterbitkan dengan tanda RETAIN disetel dan disimpan oleh. AWS IoT Core Bagian ini menyajikan contoh kebijakan yang memungkinkan penggunaan umum pesan yang disimpan.

**Topics**
+ [Kebijakan untuk menghubungkan dan memublikasikan pesan yang disimpan](#retained-message-policy-examples-publish)
+ [Kebijakan untuk menghubungkan dan mempublikasikan pesan Will yang disimpan](#retained-message-policy-examples-publish-lwt)
+ [Kebijakan untuk membuat daftar dan mendapatkan pesan yang disimpan](#retained-message-policy-examples-list-get)

## Kebijakan untuk menghubungkan dan memublikasikan pesan yang disimpan
<a name="retained-message-policy-examples-publish"></a>

Agar perangkat dapat memublikasikan pesan yang disimpan, perangkat harus dapat terhubung, menerbitkan (pesan MQTT apa pun), dan memublikasikan pesan yang disimpan MQTT. Kebijakan berikut memberikan izin ini untuk topik: `device/sample/configuration` kepada klien. **device1** Untuk contoh lain yang memberikan izin untuk terhubung, lihat[Connect dan publikasikan contoh kebijakan](connect-and-pub.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/device/sample/configuration"
			]
		}
	]
}
```

## Kebijakan untuk menghubungkan dan mempublikasikan pesan Will yang disimpan
<a name="retained-message-policy-examples-publish-lwt"></a>

Klien dapat mengonfigurasi pesan yang AWS IoT Core akan dipublikasikan ketika klien terputus secara tak terduga. [http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag) Klien harus memiliki kondisi tambahan yang ditambahkan ke izin sambungannya untuk memasukkannya. 

Dokumen kebijakan berikut memberikan izin kepada semua klien untuk menghubungkan dan menerbitkan pesan Will, yang diidentifikasi berdasarkan topiknya`will`, yang juga AWS IoT Core akan disimpan.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			],
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/will"
			]
		}
	]
}
```

## Kebijakan untuk membuat daftar dan mendapatkan pesan yang disimpan
<a name="retained-message-policy-examples-list-get"></a>

Layanan dan aplikasi dapat mengakses pesan yang disimpan tanpa perlu mendukung klien MQTT dengan menelepon dan. [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) Layanan dan aplikasi yang memanggil tindakan ini harus diotorisasi dengan menggunakan kebijakan seperti contoh berikut.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:ListRetainedMessages"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/device1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:GetRetainedMessage"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/foo"
            ]
        }
    ]
}
```

# Contoh kebijakan sertifikat
<a name="certificate-policy-examples"></a>

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memberikan izin untuk terhubung AWS IoT Core dengan ID klien yang cocok dengan nama benda, dan memublikasikan ke topik yang namanya sama dengan sertifikat yang digunakan perangkat untuk mengautentikasi dirinya sendiri: `certificateId`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:CertificateId}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        }
    ]
}
```

Untuk perangkat yang tidak terdaftar dalam AWS IoT Core registri, kebijakan berikut memberikan izin untuk terhubung AWS IoT Core dengan klien IDs,, `client1``client2`, `client3` dan untuk mempublikasikan ke topik yang namanya sama dengan sertifikat perangkat yang digunakan untuk mengotentikasi dirinya sendiri: `certificateId`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:CertificateId}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memberikan izin untuk terhubung AWS IoT Core dengan ID klien yang cocok dengan nama benda, dan memublikasikan ke topik yang namanya sama dengan `CommonName` bidang subjek sertifikat yang digunakan perangkat untuk mengautentikasi dirinya sendiri:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.CommonName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        }
    ]
}
```

**catatan**  
Dalam contoh ini, nama umum subjek sertifikat digunakan sebagai pengidentifikasi topik, dengan asumsi bahwa nama umum subjek unik untuk setiap sertifikat terdaftar. Jika sertifikat dibagikan di beberapa perangkat, nama umum subjek sama untuk semua perangkat yang berbagi sertifikat ini, sehingga memungkinkan hak istimewa publikasi ke topik yang sama dari beberapa perangkat (tidak disarankan).

Untuk perangkat yang tidak terdaftar dalam AWS IoT Core registri, kebijakan berikut memberikan izin untuk terhubung AWS IoT Core dengan klien IDs,, `client1``client2`, `client3` dan untuk mempublikasikan ke topik yang namanya sama dengan `CommonName` bidang subjek sertifikat yang digunakan perangkat untuk mengautentikasi dirinya sendiri:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.CommonName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

**catatan**  
Dalam contoh ini, nama umum subjek sertifikat digunakan sebagai pengidentifikasi topik, dengan asumsi bahwa nama umum subjek unik untuk setiap sertifikat terdaftar. Jika sertifikat dibagikan di beberapa perangkat, nama umum subjek sama untuk semua perangkat yang berbagi sertifikat ini, sehingga memungkinkan hak istimewa publikasi ke topik yang sama dari beberapa perangkat (tidak disarankan).

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memberikan izin untuk terhubung dengan ID klien yang cocok AWS IoT Core dengan nama benda, dan memublikasikan ke topik yang namanya diawali `admin/` saat sertifikat yang digunakan untuk mengautentikasi perangkat memiliki `Subject.CommonName.2` bidang yang disetel ke: `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

Untuk perangkat yang tidak terdaftar di AWS IoT Core registri, kebijakan berikut memberikan izin untuk terhubung AWS IoT Core dengan klien IDs `client1``client2`, `client3` dan memublikasikan ke topik yang namanya diawali `admin/` ketika sertifikat yang digunakan untuk mengautentikasi perangkat memiliki `Subject.CommonName.2` bidangnya disetel ke: `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memungkinkan perangkat menggunakan nama benda untuk dipublikasikan pada topik tertentu yang terdiri dari `admin/` diikuti oleh `ThingName` ketika sertifikat yang digunakan untuk mengautentikasi perangkat memiliki salah satu `Subject.CommonName` bidangnya yang disetel ke`Administrator`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/${iot:Connection.Thing.ThingName}"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

Untuk perangkat yang tidak terdaftar dalam AWS IoT Core registri, kebijakan berikut memberikan izin untuk terhubung AWS IoT Core dengan klien IDs `client1``client2`, `client3` dan untuk memublikasikan ke topik `admin` ketika sertifikat yang digunakan untuk mengautentikasi perangkat memiliki salah satu `Subject.CommonName` bidangnya yang disetel ke: `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

# Contoh kebijakan hal
<a name="thing-policy-examples"></a>

Kebijakan berikut memungkinkan perangkat untuk terhubung jika sertifikat yang digunakan untuk mengautentikasi AWS IoT Core dilampirkan pada hal yang sedang dievaluasi kebijakan:

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {  
            "Effect":"Allow",
            "Action":["iot:Connect"],
            "Resource":[ "*" ],
            "Condition": {
                "Bool": {
                    "iot:Connection.Thing.IsAttached": ["true"]
            }
        }
        }
    ]
}
```

Kebijakan berikut memungkinkan perangkat untuk mempublikasikan jika sertifikat dilampirkan ke sesuatu dengan jenis hal tertentu dan jika benda tersebut memiliki atribut `attributeName` dengan nilai`attributeValue`. Untuk informasi selengkapnya tentang variabel kebijakan hal, lihat [Variabel kebijakan Thing](thing-policy-variables.md).

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/device/stats",
      "Condition": {
        "StringEquals": {
          "iot:Connection.Thing.Attributes[attributeName]": "attributeValue",
          "iot:Connection.Thing.ThingTypeName": "Thing_Type_Name"
        },
        "Bool": {
          "iot:Connection.Thing.IsAttached": "true"
        }
      }
    }
  ]
}
```

Kebijakan berikut memungkinkan perangkat untuk memublikasikan ke topik yang dimulai dengan atribut benda tersebut. Jika sertifikat perangkat tidak terkait dengan hal tersebut, variabel ini tidak akan diselesaikan dan akan mengakibatkan kesalahan akses ditolak. Untuk informasi selengkapnya tentang variabel kebijakan hal, lihat [Variabel kebijakan Thing](thing-policy-variables.md).

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.Attributes[attributeName]}/*"
    }
  ]
}
```

# Contoh kebijakan pekerjaan dasar
<a name="basic-jobs-example"></a>

Contoh ini menunjukkan statment kebijakan yang diperlukan untuk target pekerjaan yang merupakan perangkat tunggal untuk menerima permintaan pekerjaan dan mengkomunikasikan status pelaksanaan pekerjaan dengan AWS IoT.

Ganti *us-west-2:57EXAMPLE833* dengan Anda Wilayah AWS, karakter titik dua (:), dan Akun AWS nomor 12 digit Anda, lalu ganti *uniqueThingName* dengan nama sumber daya benda yang mewakili perangkat. AWS IoT

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:client/uniqueThingName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/job/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iotjobsdata:DescribeJobExecution",
                "iotjobsdata:GetPendingJobExecutions",
                "iotjobsdata:StartNextPendingJobExecution",
                "iotjobsdata:UpdateJobExecution"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName"
            ]
        }
    ]
}
```

# Otorisasi dengan identitas Amazon Cognito
<a name="cog-iot-policies"></a>

Ada dua jenis identitas Amazon Cognito: tidak diautentikasi dan diautentikasi. Jika aplikasi Anda mendukung identitas Amazon Cognito yang tidak diautentikasi, tidak ada autentikasi yang dilakukan, sehingga Anda tidak tahu siapa pengguna tersebut. 

Identitas **Tidak Diautentikasi: Untuk identitas** Amazon Cognito yang tidak diautentikasi, Anda memberikan izin dengan melampirkan peran IAM ke kumpulan identitas yang tidak diautentikasi. Kami menyarankan Anda hanya memberikan akses ke sumber daya yang Anda inginkan tersedia untuk pengguna yang tidak dikenal.

**penting**  
Untuk pengguna Amazon Cognito yang tidak diautentikasi yang terhubung AWS IoT Core ke, kami menyarankan Anda memberikan akses ke sumber daya yang sangat terbatas dalam kebijakan IAM.

**Identitas Terautentikasi:** Untuk identitas Amazon Cognito yang diautentikasi, Anda perlu menentukan izin di dua tempat: 
+ Lampirkan kebijakan IAM ke kumpulan Identitas Amazon Cognito yang diautentikasi dan
+ Lampirkan AWS IoT Core kebijakan ke Identitas Amazon Cognito (pengguna yang diautentikasi).

## Contoh kebijakan untuk pengguna Amazon Cognito yang tidak diautentikasi dan diautentikasi yang terhubung AWS IoT Core
<a name="cog-iot-policies-auth-unauth-examples"></a>

Contoh berikut menunjukkan izin dalam kebijakan IAM dan kebijakan IoT dari identitas Amazon Cognito. Pengguna yang diautentikasi ingin mempublikasikan ke topik khusus perangkat (mis.device/DEVICE\$1ID/status).

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/Client_ID"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/device/Device_ID/status"
            ]
        }
    ]
}
```

Contoh berikut menunjukkan izin dalam kebijakan IAM dari peran Amazon Cognito yang tidak diautentikasi. Pengguna yang tidak diautentikasi ingin mempublikasikan ke topik khusus non-perangkat yang tidak memerlukan otentikasi.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/non_device_specific_topic"
            ]
        }
    ]
}
```

## GitHub contoh
<a name="cog-iot-policies-github"></a>

Contoh aplikasi web berikut GitHub menunjukkan cara menggabungkan lampiran kebijakan ke pengguna yang diautentikasi ke dalam proses pendaftaran dan otentikasi pengguna.
+ [MQTT publish/subscribe React menggunakan aplikasi web dan AWS AmplifyAWS IoT Device SDK for JavaScript](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp)
+ [Aplikasi web MQTT publish/subscribe React menggunakan AWS Amplify, fungsi AWS IoT Device SDK for JavaScript, dan Lambda](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda)

Amplify adalah seperangkat alat dan layanan yang membantu Anda membangun aplikasi web dan seluler yang terintegrasi dengan AWS layanan. Untuk informasi selengkapnya tentang Amplify, lihat Amplify Framework [Documentation](https://docs.amplify.aws/),.

Kedua contoh melakukan langkah-langkah berikut.

1. Saat pengguna mendaftar untuk akun, aplikasi akan membuat kumpulan pengguna dan identitas Amazon Cognito.

1. Ketika pengguna mengautentikasi, aplikasi membuat dan melampirkan kebijakan ke identitas. Ini memberi pengguna izin mempublikasikan dan berlangganan.

1. Pengguna dapat menggunakan aplikasi untuk mempublikasikan dan berlangganan topik MQTT.

Contoh pertama menggunakan operasi `AttachPolicy` API langsung di dalam operasi otentikasi. Contoh berikut menunjukkan bagaimana menerapkan panggilan API ini di dalam aplikasi web React yang menggunakan Amplify dan. AWS IoT Device SDK for JavaScript

```
function attachPolicy(id, policyName) {
    var Iot = new AWS.Iot({region: AWSConfiguration.region, apiVersion: AWSConfiguration.apiVersion, endpoint: AWSConfiguration.endpoint});
    var params = {policyName: policyName, target: id};

    console.log("Attach IoT Policy: " + policyName + " with cognito identity id: " + id);
    Iot.attachPolicy(params, function(err, data) {
         if (err) {
               if (err.code !== 'ResourceAlreadyExistsException') {
                  console.log(err);
               }
          }
         else  {
            console.log("Successfully attached policy with the identity", data);
         }
     });
}
```

Kode ini muncul di [AuthDisplayfile.js](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp/blob/d1c307b36357be934db9dda020140fa337709cd9/src/AuthDisplay.js#L45).

Contoh kedua mengimplementasikan operasi `AttachPolicy` API dalam fungsi Lambda. Contoh berikut menunjukkan bagaimana Lambda menggunakan panggilan API ini.

```
iot.attachPolicy(params, function(err, data) {
     if (err) {
           if (err.code !== 'ResourceAlreadyExistsException') {
              console.log(err);
              res.json({error: err, url: req.url, body: req.body});
           }
      }
     else  {
        console.log(data);
        res.json({success: 'Create and attach policy call succeed!', url: req.url, body: req.body});
     }
 });
```

Kode ini muncul di dalam `iot.GetPolicy` fungsi dalam file [app.js](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda/blob/e493039581d2aff0faa3949086deead20a2c5385/amplify/backend/function/amplifyiotlambda/src/app.js#L50).

**catatan**  
Saat Anda memanggil fungsi dengan AWS kredensyal yang Anda peroleh melalui kumpulan Identitas Amazon Cognito, objek konteks dalam fungsi Lambda Anda berisi nilai untuk. `context.cognito_identity_id` Untuk informasi selengkapnya, lihat hal berikut.   
[AWS Lambda objek konteks di Node.js](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html)
[AWS Lambda objek konteks dengan Python](https://docs.aws.amazon.com/lambda/latest/dg/python-context.html)
[AWS Lambda objek konteks di Ruby](https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html)
[AWS Lambda objek konteks di Jawa](https://docs.aws.amazon.com/lambda/latest/dg/java-context.html)
[AWS Lambda objek konteks di Go](https://docs.aws.amazon.com/lambda/latest/dg/golang-context.html)
[AWS Lambda objek konteks dalam C \$1](https://docs.aws.amazon.com/lambda/latest/dg/csharp-context.html)
[AWS Lambda objek konteks di PowerShell](https://docs.aws.amazon.com/lambda/latest/dg/powershell-context.html)

# Mengotorisasi panggilan langsung ke AWS layanan menggunakan penyedia AWS IoT Core kredensi
<a name="authorizing-direct-aws"></a>

Perangkat dapat menggunakan sertifikat X.509 untuk terhubung AWS IoT Core menggunakan protokol otentikasi timbal balik TLS. AWS [Layanan lain tidak mendukung otentikasi berbasis sertifikat, tetapi mereka dapat dipanggil menggunakan AWS kredensyal dalam format Signature Version 4.AWS](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) [Algoritma Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) biasanya mengharuskan penelepon untuk memiliki ID kunci akses dan kunci akses rahasia. AWS IoT Core memiliki penyedia kredensyal yang memungkinkan Anda menggunakan [sertifikat X.509](x509-client-certs.html) bawaan sebagai identitas perangkat unik untuk mengautentikasi permintaan. AWS Ini menghilangkan kebutuhan untuk menyimpan ID kunci akses dan kunci akses rahasia di perangkat Anda.

Penyedia kredensyal mengautentikasi pemanggil menggunakan sertifikat X.509 dan mengeluarkan token keamanan hak istimewa terbatas sementara. Token dapat digunakan untuk menandatangani dan mengotentikasi AWS permintaan apa pun. Cara mengautentikasi AWS permintaan ini mengharuskan Anda untuk membuat dan mengonfigurasi [peran AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles.html) dan melampirkan kebijakan IAM yang sesuai ke peran tersebut sehingga penyedia kredensyal dapat mengambil peran atas nama Anda. Untuk informasi lebih lanjut tentang AWS IoT Core dan IAM, lihat[Identitas dan manajemen akses untuk AWS IoT](security-iam.md).

 AWS IoT memerlukan perangkat untuk mengirim [ekstensi Server Name Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) ke protokol Transport Layer Security (TLS) dan memberikan alamat endpoint lengkap di lapangan. `host_name` `host_name`Bidang harus berisi titik akhir yang Anda panggil, dan itu harus:
+ Yang `endpointAddress` dikembalikan oleh`aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:CredentialProvider`.

Koneksi yang dicoba oleh perangkat tanpa `host_name` nilai yang benar akan gagal.

Diagram berikut mengilustrasikan alur kerja penyedia kredensyal.

![\[AWS IoT Core alur kerja penyedia kredensyal.\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/credentials-provider-diagram.png)


1.  AWS IoT Core Perangkat membuat permintaan HTTPS ke penyedia kredensyal untuk token keamanan. Permintaan termasuk sertifikat perangkat X.509 untuk otentikasi.

1. Penyedia kredensyal meneruskan permintaan ke modul AWS IoT Core otentikasi dan otorisasi untuk memvalidasi sertifikat dan memverifikasi bahwa perangkat memiliki izin untuk meminta token keamanan.

1. Jika sertifikat valid dan memiliki izin untuk meminta token keamanan, modul AWS IoT Core otentikasi dan otorisasi mengembalikan keberhasilan. Jika tidak, ia mengirimkan pengecualian ke perangkat.

1. Setelah berhasil memvalidasi sertifikat, penyedia kredensyal memanggil [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) untuk mengambil peran IAM yang Anda buat untuknya.

1. AWS STS mengembalikan token keamanan hak istimewa terbatas sementara ke penyedia kredensyal.

1. Penyedia kredensyal mengembalikan token keamanan ke perangkat.

1. Perangkat menggunakan token keamanan untuk menandatangani AWS permintaan dengan AWS Signature Version 4.

1. Layanan yang diminta memanggil IAM untuk memvalidasi tanda tangan dan mengotorisasi permintaan terhadap kebijakan akses yang dilampirkan pada peran IAM yang Anda buat untuk penyedia kredensyal.

1. Jika IAM berhasil memvalidasi tanda tangan dan mengotorisasi permintaan, permintaan berhasil. Jika tidak, IAM mengirimkan pengecualian.

Bagian berikut menjelaskan cara menggunakan sertifikat untuk mendapatkan token keamanan. Itu ditulis dengan asumsi bahwa Anda telah [mendaftarkan perangkat](register-device.html) [dan membuat serta mengaktifkan sertifikat Anda sendiri](device-certs-your-own.html) untuk itu.

## Cara menggunakan sertifikat untuk mendapatkan token keamanan
<a name="authorizing-direct-aws.walkthrough"></a>

1. Konfigurasikan peran IAM yang diasumsikan oleh penyedia kredensyal atas nama perangkat Anda. Lampirkan kebijakan kepercayaan berikut ke peran tersebut.   
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Principal": {"Service": "credentials.iot.amazonaws.com"},
           "Action": "sts:AssumeRole"
       }
   }
   ```

   Untuk setiap AWS layanan yang ingin Anda panggil, lampirkan kebijakan akses ke peran tersebut. Penyedia kredensyal mendukung variabel kebijakan berikut:
   + `credentials-iot:ThingName`
   + `credentials-iot:ThingTypeName`
   + `credentials-iot:AwsCertificateId`

   Ketika perangkat memberikan nama benda dalam permintaannya ke AWS layanan, penyedia kredensyal menambahkan `credentials-iot:ThingName` dan `credentials-iot:ThingTypeName` sebagai variabel konteks ke token keamanan. Penyedia kredensyal menyediakan `credentials-iot:AwsCertificateId` sebagai variabel konteks meskipun perangkat tidak memberikan nama benda dalam permintaan. Anda meneruskan nama benda sebagai nilai header permintaan `x-amzn-iot-thingname` HTTP.

   Ketiga variabel ini hanya berfungsi untuk kebijakan IAM, bukan AWS IoT Core kebijakan.

1. Pastikan bahwa pengguna yang melakukan langkah berikutnya (membuat alias peran) memiliki izin untuk meneruskan peran yang baru dibuat. AWS IoT Core Kebijakan berikut memberikan keduanya `iam:GetRole` dan `iam:PassRole` izin kepada AWS pengguna. `iam:GetRole`Izin memungkinkan pengguna untuk mendapatkan informasi tentang peran yang baru saja Anda buat. `iam:PassRole`Izin memungkinkan pengguna untuk meneruskan peran ke AWS layanan lain.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": [
               "iam:GetRole",
               "iam:PassRole"
           ],
           "Resource": "arn:aws:iam::123456789012:role/your role name"
       }
   }
   ```

1. Buat alias AWS IoT Core peran. Perangkat yang akan melakukan panggilan langsung ke AWS layanan harus tahu peran ARN mana yang akan digunakan saat menghubungkan. AWS IoT Core Hard-coding peran ARN bukanlah solusi yang baik karena mengharuskan Anda untuk memperbarui perangkat setiap kali peran ARN berubah. Solusi yang lebih baik adalah dengan menggunakan `CreateRoleAlias` API untuk membuat alias peran yang menunjuk ke peran ARN. Jika peran ARN berubah, Anda cukup memperbarui alias peran. Tidak ada perubahan yang diperlukan pada perangkat. API ini mengambil parameter berikut:  
`roleAlias`  
Wajib. String arbitrer yang mengidentifikasi alias peran. Ini berfungsi sebagai kunci utama dalam model data alias peran. Ini berisi 1-128 karakter dan harus menyertakan hanya karakter alfanumerik dan simbol =, @, dan -. Karakter alfabet huruf besar dan kecil diperbolehkan. Nama alias peran peka huruf besar/kecil.  
`roleArn`  
Wajib. ARN dari peran yang dirujuk alias peran.  
`credentialDurationSeconds`  
Tidak wajib. Berapa lama (dalam hitungan detik) kredensialnya valid. Nilai minimum adalah 900 detik (15 menit). Nilai maksimumnya adalah 43.200 detik (12 jam). Nilai default adalah 3.600 detik (1 jam).   
Penyedia AWS IoT Core Kredensyal dapat mengeluarkan kredensi dengan masa pakai maksimum adalah 43.200 detik (12 jam). Memiliki kredensi yang valid hingga 12 jam dapat membantu mengurangi jumlah panggilan ke penyedia kredensi dengan menyimpan kredensi lebih lama.  
`credentialDurationSeconds`Nilai harus kurang dari atau sama dengan durasi sesi maksimum peran IAM yang dirujuk alias peran. Untuk informasi selengkapnya, lihat [Memodifikasi durasi sesi maksimum peran (AWS API)](https://docs.aws.amazon.com//IAM/latest/UserGuide/roles-managingrole-editing-api.html#roles-modify_max-session-duration-api) dari Panduan Pengguna AWS Identity and Access Management.

   Untuk informasi selengkapnya tentang API ini, lihat [CreateRoleAlias](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateRoleAlias.html). 

1. Lampirkan kebijakan ke sertifikat perangkat. Kebijakan yang dilampirkan pada sertifikat perangkat harus memberikan izin perangkat untuk mengambil peran. Anda melakukan ini dengan memberikan izin untuk `iot:AssumeRoleWithCertificate` tindakan ke alias peran, seperti pada contoh berikut.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iot:AssumeRoleWithCertificate",
               "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/your role alias"
           }
       ]
   }
   ```

1. Buat permintaan HTTPS ke penyedia kredensi untuk mendapatkan token keamanan. Berikan informasi berikut:
   + *Sertifikat*: Karena ini adalah permintaan HTTP melalui otentikasi timbal balik TLS, Anda harus memberikan sertifikat dan kunci pribadi kepada klien Anda saat membuat permintaan. Gunakan sertifikat dan kunci pribadi yang sama dengan yang Anda gunakan saat mendaftarkan sertifikat Anda AWS IoT Core.

     Untuk memastikan perangkat Anda berkomunikasi dengan AWS IoT Core (dan bukan layanan yang menirunya), lihat [Otentikasi Server](x509-client-certs.html#server-authentication), ikuti tautan untuk mengunduh sertifikat CA yang sesuai, lalu salin ke perangkat Anda.
   + *RoleAlias*: Nama alias peran yang Anda buat untuk penyedia kredensyal. Nama alias peran peka huruf besar/kecil dan harus cocok dengan alias peran yang dibuat. AWS IoT Core
   + *ThingName*: Nama benda yang Anda buat ketika Anda mendaftarkan AWS IoT Core barang Anda. Ini diteruskan sebagai nilai header `x-amzn-iot-thingname` HTTP. Nilai ini diperlukan hanya jika Anda menggunakan atribut benda sebagai variabel kebijakan dalam AWS IoT Core atau kebijakan IAM.
**catatan**  
*ThingName*Yang Anda berikan `x-amzn-iot-thingname` harus cocok dengan nama sumber daya AWS IoT Thing yang ditetapkan ke sertifikat. Jika tidak cocok, kesalahan 403 dikembalikan.

   Jalankan perintah berikut di AWS CLI untuk mendapatkan titik akhir penyedia kredensyal untuk Anda. Akun AWS Untuk informasi selengkapnya tentang API ini, lihat [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html). Untuk titik akhir yang mendukung FIPS, lihat. [AWS IoT Core- titik akhir penyedia kredensyal](iot-connect-fips.md#iot-connect-fips-credential)

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   Objek JSON berikut adalah contoh output dari **describe-endpoint** perintah. Ini berisi `endpointAddress` yang Anda gunakan untuk meminta token keamanan.

   ```
   {
       "endpointAddress": "your_aws_account_specific_prefix.credentials.iot.your region.amazonaws.com"
   }
   ```

   Gunakan titik akhir untuk membuat permintaan HTTPS ke penyedia kredensyal untuk mengembalikan token keamanan. Contoh perintah berikut menggunakan`curl`, tetapi Anda dapat menggunakan klien HTTP apa pun.
**catatan**  
Nama *RoleAlias* peka huruf besar/kecil dan harus cocok dengan alias peran yang dibuat. AWS IoT

   ```
   curl --cert your certificate --key your private key -H "x-amzn-iot-thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-aliases/your role alias/credentials
   ```

   Perintah ini mengembalikan objek token keamanan yang berisi`accessKeyId`, a, a `secretAccessKey``sessionToken`, dan kedaluwarsa. Objek JSON berikut adalah contoh output dari `curl` perintah.

   ```
       {"credentials":{"accessKeyId":"access key","secretAccessKey":"secret access key","sessionToken":"session token","expiration":"2018-01-18T09:18:06Z"}}
   ```

   Anda kemudian dapat menggunakan`accessKeyId`,`secretAccessKey`, dan `sessionToken` nilai untuk menandatangani permintaan ke AWS layanan. *Untuk end-to-end demonstrasi, lihat [Cara Menghilangkan Kebutuhan AWS Kredensyal Hard-Coded di Perangkat dengan Menggunakan posting blog Penyedia AWS IoT Kredensyal di](https://aws.amazon.com/blogs/security/how-to-eliminate-the-need-for-hardcoded-aws-credentials-in-devices-by-using-the-aws-iot-credentials-provider/) Blog Keamanan.AWS *

# Akses lintas akun dengan IAM
<a name="cross-account-access"></a>

AWS IoT Core memungkinkan Anda untuk mengaktifkan kepala sekolah untuk menerbitkan atau berlangganan topik yang didefinisikan dalam Akun AWS tidak dimiliki oleh kepala sekolah. Anda mengonfigurasi akses lintas akun dengan membuat kebijakan IAM dan peran IAM, lalu melampirkan kebijakan ke peran tersebut.

Pertama, buat kebijakan IAM yang dikelola pelanggan seperti yang dijelaskan dalam [Membuat Kebijakan IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_create.html), seperti yang Anda lakukan untuk pengguna dan sertifikat lain di Anda. Akun AWS

Untuk perangkat yang terdaftar di AWS IoT Core registri, kebijakan berikut memberikan izin untuk perangkat terhubung AWS IoT Core menggunakan ID klien yang cocok dengan nama perangkat dan memublikasikan ke `my/topic/thing-name ` tempat *thing-name* nama perangkat:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

Untuk perangkat yang tidak terdaftar di AWS IoT Core registri, kebijakan berikut memberikan izin kepada perangkat untuk menggunakan nama benda yang `client1` terdaftar di AWS IoT Core registri akun Anda (123456789012) untuk terhubung ke AWS IoT Core dan mempublikasikan ke topik khusus ID klien yang namanya diawali dengan: `my/topic/`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
            ]
        }
    ]
}
```

Selanjutnya, ikuti langkah-langkah dalam [Membuat peran untuk mendelegasikan izin ke pengguna IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html). Masukkan ID akun yang ingin Anda bagikan aksesnya. Akun AWS Kemudian, pada langkah terakhir, lampirkan kebijakan yang baru saja Anda buat ke peran tersebut. Jika, di lain waktu, Anda perlu mengubah ID AWS akun yang Anda berikan akses, Anda dapat menggunakan format kebijakan kepercayaan berikut untuk melakukannya: 

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::567890123456:user/MyUser"
        },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

# Perlindungan data di AWS IoT Core
<a name="data-protection"></a>

[Model tanggung jawab AWS bersama model](https://aws.amazon.com/compliance/shared-responsibility-model/) berlaku untuk perlindungan data di AWS IoT Core. Seperti yang dijelaskan dalam model AWS ini, bertanggung jawab untuk melindungi infrastruktur global yang menjalankan semua AWS Cloud. Anda bertanggung jawab untuk mempertahankan kendali atas konten yang di-host pada infrastruktur ini. Anda juga bertanggung jawab atas tugas-tugas konfigurasi dan manajemen keamanan untuk Layanan AWS yang Anda gunakan. Lihat informasi yang lebih lengkap tentang privasi data dalam [Pertanyaan Umum Privasi Data](https://aws.amazon.com/compliance/data-privacy-faq/). Lihat informasi tentang perlindungan data di Eropa di pos blog [Model Tanggung Jawab Bersama dan GDPR AWS](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) di *Blog Keamanan AWS *.

Untuk tujuan perlindungan data, kami menyarankan Anda melindungi Akun AWS kredensyal dan mengatur pengguna individu dengan AWS IAM Identity Center atau AWS Identity and Access Management (IAM). Dengan cara itu, setiap pengguna hanya diberi izin yang diperlukan untuk memenuhi tanggung jawab tugasnya. Kami juga menyarankan supaya Anda mengamankan data dengan cara-cara berikut:
+ Gunakan autentikasi multi-faktor (MFA) pada setiap akun.
+ Gunakan SSL/TLS untuk berkomunikasi dengan AWS sumber daya. Kami mensyaratkan TLS 1.2 dan menganjurkan TLS 1.3.
+ Siapkan API dan pencatatan aktivitas pengguna dengan AWS CloudTrail. Untuk informasi tentang penggunaan CloudTrail jejak untuk menangkap AWS aktivitas, lihat [Bekerja dengan CloudTrail jejak](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) di *AWS CloudTrail Panduan Pengguna*.
+ Gunakan solusi AWS enkripsi, bersama dengan semua kontrol keamanan default di dalamnya Layanan AWS.
+ Gunakan layanan keamanan terkelola tingkat lanjut seperti Amazon Macie, yang membantu menemukan dan mengamankan data sensitif yang disimpan di Amazon S3.
+ Jika Anda memerlukan modul kriptografi tervalidasi FIPS 140-3 saat mengakses AWS melalui antarmuka baris perintah atau API, gunakan titik akhir FIPS. Lihat informasi selengkapnya tentang titik akhir FIPS yang tersedia di [Standar Pemrosesan Informasi Federal (FIPS) 140-3](https://aws.amazon.com/compliance/fips/).

Kami sangat merekomendasikan agar Anda tidak pernah memasukkan informasi identifikasi yang sensitif, seperti nomor rekening pelanggan Anda, ke dalam tanda atau bidang isian bebas seperti bidang **Nama**. Ini termasuk saat Anda bekerja dengan AWS IoT atau lainnya Layanan AWS menggunakan konsol, API AWS CLI, atau AWS SDKs. Data apa pun yang Anda masukkan ke dalam tanda atau bidang isian bebas yang digunakan untuk nama dapat digunakan untuk log penagihan atau log diagnostik. Saat Anda memberikan URL ke server eksternal, kami sangat menganjurkan supaya Anda tidak menyertakan informasi kredensial di dalam URL untuk memvalidasi permintaan Anda ke server itu.

Untuk informasi selengkapnya tentang perlindungan data, lihat postingan blog [Model Tanggung Jawab Bersama AWS dan GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) di *Blog Keamanan AWS *.

AWS IoT perangkat mengumpulkan data, melakukan beberapa manipulasi pada data itu, dan kemudian mengirim data tersebut ke layanan web lain. Anda dapat memilih untuk menyimpan beberapa data di perangkat Anda untuk waktu yang singkat. Anda bertanggung jawab untuk memberikan perlindungan data apa pun pada data tersebut saat istirahat. Ketika perangkat Anda mengirim data ke AWS IoT, ia melakukannya melalui koneksi TLS seperti yang dibahas nanti di bagian ini. AWS IoT perangkat dapat mengirim data ke AWS layanan apa pun. Untuk informasi selengkapnya tentang keamanan data setiap layanan, lihat dokumentasi untuk layanan tersebut. AWS IoT dapat dikonfigurasi untuk menulis log ke CloudWatch Log dan log panggilan AWS IoT API ke AWS CloudTrail. Untuk informasi selengkapnya tentang keamanan data untuk layanan ini, lihat [Otentikasi dan Kontrol Akses untuk Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/auth-and-access-control-cw.html) dan [Mengenkripsi File CloudTrail Log dengan AWS KMS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/encrypting-cloudtrail-log-files-with-aws-kms.html) kunci terkelola.

## Enkripsi data di AWS IoT
<a name="data-protection-encrypt"></a>

Secara default, semua AWS IoT data dalam perjalanan dan saat istirahat dienkripsi. [Data dalam perjalanan dienkripsi menggunakan TLS](transport-security.md), dan data saat istirahat dienkripsi menggunakan kunci yang dimiliki. AWS AWS IoT mendukung pelanggan yang dikelola AWS KMS keys (kunci KMS) dari Layanan Manajemen AWS Kunci (AWS KMS). Namun, Device Advisor dan AWS IoT Wireless hanya menggunakan Kunci milik AWS untuk mengenkripsi data pelanggan.

 

# Keamanan transportasi di AWS IoT Core
<a name="transport-security"></a>

TLS (Transport Layer Security) adalah protokol kriptografi yang dirancang untuk komunikasi yang aman melalui jaringan komputer. AWS IoT Core Device Gateway mengharuskan pelanggan untuk mengenkripsi semua komunikasi saat dalam perjalanan dengan menggunakan TLS untuk koneksi dari perangkat ke Gateway. TLS digunakan untuk mencapai kerahasiaan protokol aplikasi (MQTT, HTTP, dan) yang didukung oleh. WebSocket AWS IoT Core Dukungan TLS tersedia dalam sejumlah bahasa pemrograman dan sistem operasi. Data di dalamnya AWS dienkripsi oleh layanan tertentu AWS . Untuk informasi selengkapnya tentang enkripsi data pada AWS layanan lain, lihat dokumentasi keamanan untuk layanan tersebut.

**Topics**
+ [Protokol TLS](#tls-ssl-policy)
+ [Kebijakan Keamanan](#tls-policy-table)
+ [Catatan penting untuk keamanan transportasi di AWS IoT Core](#tls-ssl-core)
+ [Keamanan transportasi untuk perangkat nirkabel LoRa WAN](#tls-lorawan)

## Protokol TLS
<a name="tls-ssl-policy"></a>

AWS IoT Core mendukung versi protokol TLS berikut:
+ TLS 1.3 
+ TLS 1.2

Dengan AWS IoT Core, Anda dapat mengkonfigurasi pengaturan TLS (untuk [TLS 1.2](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) dan [TLS 1.3](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3)) dalam konfigurasi domain. Untuk informasi selengkapnya, lihat [Mengonfigurasikan pengaturan TLS dalam konfigurasi domain](iot-endpoints-tls-config.md).

## Kebijakan Keamanan
<a name="tls-policy-table"></a>

Kebijakan keamanan adalah kombinasi protokol TLS dan cipher mereka yang menentukan protokol dan cipher mana yang didukung selama negosiasi TLS antara klien dan server. Anda dapat mengonfigurasi perangkat Anda untuk menggunakan kebijakan keamanan yang telah ditentukan berdasarkan kebutuhan Anda. Perhatikan bahwa AWS IoT Core tidak mendukung kebijakan keamanan khusus.

Anda dapat memilih salah satu kebijakan keamanan yang telah ditetapkan untuk perangkat Anda saat AWS IoT Core menghubungkannya. Nama-nama kebijakan keamanan standar terbaru AWS IoT Core termasuk informasi versi berdasarkan tahun dan bulan mereka dirilis. Kebijakan keamanan standar default adalah`IoTSecurityPolicy_TLS13_1_2_2022_10`. Untuk menentukan kebijakan keamanan, Anda dapat menggunakan AWS IoT konsol atau AWS CLI. Untuk informasi selengkapnya, lihat [Mengonfigurasikan pengaturan TLS dalam konfigurasi domain](iot-endpoints-tls-config.md).

Tabel berikut menjelaskan kebijakan keamanan standar terbaru yang AWS IoT Core mendukung. `IotSecurityPolicy_` telah dihapus dari nama kebijakan di baris judul agar sesuai.


| **Kebijakan keamanan** | TLS13\$11\$13\$12022\$110 | TLS13\$11\$12\$12022\$110 | TLS12\$11\$12\$12022\$110 | TLS12\$11\$10\$12016\$101\$1 | TLS12\$11\$10\$12015\$101\$1 | 
| --- | --- | --- | --- | --- | --- | 
| Pelabuhan TCP |  443/8443/8883  |  443/8443/8883  |  443/8443/8883  | 443 | 8443/8883 | 443 | 8443/8883 | 
| Protokol TLS | 
| TLS 1.2 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| TLS 1.3 | ✓ | ✓ |  |  |  |  |  | 
| Cipher TLS | 
| TLS\$1AES\$1128\$1GCM\$1 SHA256 | ✓ | ✓ |  |  |  |  |  | 
| TLS\$1AES\$1256\$1GCM\$1 SHA384 | ✓ | ✓ |  |  |  |  |  | 
| TLS\$1 \$1 \$1 CHACHA20 POLY1305 SHA256 | ✓ | ✓ |  |  |  |  |  | 
| ECDHE-RSA- -GCM- AES128 SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- - AES128 SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- -SHA AES128 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- -GCM- AES256 SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- - AES256 SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- -SHA AES256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES128-GCM- SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES128-SHA256 |  | ✓ | ✓ | ✓ |  | ✓ | ✓ | 
| AES128-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-GCM- SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| DHE-RSA- -SHA AES256 |  |  |  |  |  | ✓ | ✓ | 
| ECDHE-ECDSA- -GCM- AES128 SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- - AES128 SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- -SHA AES128 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- -GCM- AES256 SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- - AES256 SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- -SHA AES256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 

**catatan**  
`TLS12_1_0_2016_01`hanya tersedia sebagai berikut Wilayah AWS: ap-east-1, ap-northeast-2, ap-south-1, ap-south-1, ap-southeast-2, ca-central-1, cn-north-1, cn-north-1, cn-northwest-1, eu-north-1, eu-north-1, eu-west-2 st-2, eu-west-3, me-south-1, sa-east-1, us-east-2, -1, -2, us-west-1. us-gov-west us-gov-west  
`TLS12_1_0_2015_01`hanya tersedia dalam hal berikut Wilayah AWS: ap-northeast-1, ap-southeast-1, eu-central-1, eu-central-1, eu-west-1, us-east-1, us-east-1, us-west-2.

## Catatan penting untuk keamanan transportasi di AWS IoT Core
<a name="tls-ssl-core"></a>

Untuk perangkat yang terhubung AWS IoT Core menggunakan [MQTT, TLS](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html) mengenkripsi koneksi antara perangkat dan broker, dan AWS IoT Core menggunakan otentikasi klien TLS untuk mengidentifikasi perangkat. Untuk informasi selengkapnya, lihat [Autentikasi klien](https://docs.aws.amazon.com//iot/latest/developerguide/client-authentication.html). Untuk perangkat yang terhubung AWS IoT Core menggunakan [HTTP](https://docs.aws.amazon.com//iot/latest/developerguide/http.html), TLS mengenkripsi koneksi antara perangkat dan broker, dan otentikasi didelegasikan ke Signature Version 4. AWS Untuk informasi selengkapnya, lihat [Menandatangani permintaan dengan Tanda Tangan Versi 4](https://docs.aws.amazon.com//general/latest/gr/create-signed-request.html) di *Referensi AWS Umum*.

Saat Anda menghubungkan perangkat AWS IoT Core, mengirim [ekstensi Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) tidak diperlukan tetapi sangat disarankan. Untuk menggunakan fitur seperti [pendaftaran multi-akun](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), [domain kustom](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html), [titik akhir VPC](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html), dan [kebijakan TLS yang dikonfigurasi](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html), Anda harus menggunakan ekstensi SNI dan memberikan alamat titik akhir lengkap di bidang. `host_name` `host_name`Bidang harus berisi titik akhir yang Anda panggil. Titik akhir itu harus salah satu dari yang berikut:
+ Yang `endpointAddress` dikembalikan oleh `aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:Data-ATS`
+ Yang `domainName` dikembalikan oleh `aws iot [describe-domain-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-domain-configuration.html) –-domain-configuration-name "domain_configuration_name"`

Koneksi yang dicoba oleh perangkat dengan `host_name` nilai yang salah atau tidak valid akan gagal. AWS IoT Core akan mencatat kegagalan CloudWatch untuk jenis otentikasi Otentikasi [Kustom](https://docs.aws.amazon.com//iot/latest/developerguide/custom-authentication.html).

AWS IoT Core tidak mendukung [ekstensi SessionTicket TLS](https://www.ietf.org/rfc/rfc5077.txt).

## Keamanan transportasi untuk perangkat nirkabel LoRa WAN
<a name="tls-lorawan"></a>

LoRaPerangkat WAN mengikuti praktik keamanan yang dijelaskan dalam [LoRaWAN™ SECURITY: Buku Putih yang Disiapkan untuk LoRa Aliansi™ oleh Gemalto, Actility,](https://lora-alliance.org/sites/default/files/2019-05/lorawan_security_whitepaper.pdf) dan Semtech. 

Untuk informasi selengkapnya tentang keamanan transportasi dengan perangkat LoRa WAN, lihat [data LoRa WAN dan keamanan transportasi](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/iot-lorawan-security.html).

# Enkripsi data di AWS IoT
<a name="data-encryption"></a>

Perlindungan data mengacu pada perlindungan data saat dalam perjalanan (saat bepergian ke dan dari AWS IoT Core) dan saat istirahat (saat disimpan di perangkat atau oleh AWS layanan lain). Semua data yang dikirim ke AWS IoT Core dikirim melalui koneksi TLS menggunakan MQTT, HTTPS, dan WebSocket protokol, sehingga aman secara default saat dalam perjalanan. AWS IoT Core mengumpulkan data dari perangkat dan kemudian mengirimkannya ke AWS layanan lain untuk diproses lebih lanjut. Untuk informasi selengkapnya tentang enkripsi data di layanan AWS lainnya, lihat dokumentasi keamanan untuk layanan tersebut. Untuk informasi selengkapnya, lihat [Enkripsi data saat istirahat](encryption-at-rest.md).

FreeRTOS menyediakan pustaka PKCS \$111 yang mengabstraksi penyimpanan kunci, mengakses objek kriptografi, dan mengelola sesi. Anda bertanggung jawab untuk menggunakan pustaka ini untuk mengenkripsi data saat istirahat di perangkat Anda. Untuk informasi selengkapnya, lihat Perpustakaan [Standar Kriptografi Kunci Publik FreeRTOS (PKCS](https://docs.aws.amazon.com/freertos/latest/userguide/security-pkcs.html)) \$111.

# Enkripsi data saat istirahat AWS IoT Core
<a name="encryption-at-rest"></a>

Secara default, semua AWS IoT Core data saat istirahat dienkripsi menggunakan kunci yang AWS dimiliki. AWS IoT Core juga mendukung kunci terkelola pelanggan simetris dari AWS Key Management Service (AWS KMS). Dengan kunci yang dikelola pelanggan, Anda dapat membuat, memiliki, dan mengelola AWS KMS kunci di AWS akun Anda. AWS IoT Core akan menggunakan kunci KMS Anda untuk mengenkripsi data Anda saat istirahat. Anda memiliki kontrol penuh atas kunci KMS ini, termasuk membuat dan memelihara kebijakan utama mereka. Anda juga dapat mengonfigurasi kebijakan IAM untuk peran yang mengakses AWS KMS untuk mengontrol izin untuk kunci ini.

## AWS kunci yang dimiliki
<a name="aws-owned-keys"></a>

AWS kunci yang dimiliki adalah kumpulan kunci KMS yang dimiliki dan dikelola AWS layanan untuk digunakan di beberapa AWS akun. AWS Layanan dapat menggunakan kunci yang AWS dimiliki untuk melindungi data Anda. Secara default, AWS IoT Core mengenkripsi data saat istirahat menggunakan kunci yang AWS dimiliki. Kunci-kunci ini dikelola oleh layanan. Anda tidak dapat melihat, mengelola, atau menggunakan kunci AWS yang dimiliki. Namun, Anda tidak perlu mengambil tindakan apa pun untuk melindungi kunci ini.

Untuk informasi selengkapnya tentang AWS kunci yang [AWS dimiliki, lihat kunci](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-key) yang dimiliki di *Panduan AWS Key Management Service Pengembang*.

## Kunci yang dikelola pelanggan
<a name="customer-managed-keys"></a>

Kunci yang dikelola pelanggan adalah kunci KMS di AWS akun Anda yang Anda buat, miliki, dan kelola. Anda memiliki kendali penuh atas AWS KMS kunci-kunci ini, termasuk membuat dan memelihara kebijakan utama mereka. Anda juga dapat mengonfigurasi kebijakan IAM untuk peran yang mengakses AWS KMS untuk mengontrol izin untuk kunci ini. Anda dapat mengonfigurasi AWS IoT Core untuk menggunakan kunci KMS yang dikelola pelanggan untuk mengenkripsi data Anda.

Untuk informasi selengkapnya tentang kunci yang dikelola pelanggan, lihat [Kunci yang dikelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) di *Panduan Developer AWS Key Management Service *.

Untuk ikut serta dalam kunci yang dikelola pelanggan AWS IoT Core, ikuti langkah-langkah berikut:

**Topics**
+ [Langkah 1: Buat kunci yang dikelola pelanggan](#encryption-at-rest-cmk-create)
+ [Langkah 2: Buat peran IAM untuk memberikan AWS IoT Core izin menggunakan kunci KMS](#create-an-iam-role)
+ [Langkah 3: Ikut serta kunci yang dikelola pelanggan di AWS IoT Core](#opt-in-customer-managed-keys)
+ [Langkah 4: Izin tambahan diperlukan untuk operasi pesawat AWS IoT Core kontrol](#cmk-control-plane-permissions)
+ [Langkah 5: Mengelola kunci](#understanding-key-health)
+ [Langkah 6: Memantau kesehatan utama](#health-status-monitoring)

### Langkah 1: Buat kunci yang dikelola pelanggan
<a name="encryption-at-rest-cmk-create"></a>

Anda dapat membuat kunci terkelola pelanggan simetris dengan menggunakan AWS KMS konsol atau perintah AWS KMS CLI. Yang `keySpec` harus `SYMMETRIC_DEFAULT` dan `keyUsage` harus`ENCRYPT_DECRYPT`.

**catatan**  
AWS IoT Core hanya mendukung AWS KMS kunci dengan spesifikasi `SYMMETRIC_DEFAULT` kunci dan penggunaan `ENCRYPT_DECRYPT` kunci untuk kunci yang dikelola pelanggan.

Berikut ini adalah contoh AWS CLI perintah untuk membuat kunci KMS yang dapat digunakan dengan AWS IoT Core untuk kunci yang dikelola pelanggan.

```
aws kms create-key --key-spec SYMMETRIC_DEFAULT --key-usage ENCRYPT_DECRYPT --region us-west-2
```

Berikut ini adalah contoh output dari perintah.

```
{
    "KeyMetadata": {
        "AWSAccountId": "111122223333",
        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "CreationDate": "2024-09-19T11:45:23.982000-07:00",
        "Enabled": true,
        "Description": "",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "Origin": "AWS_KMS",
        "KeyManager": "CUSTOMER",
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "KeySpec": "SYMMETRIC_DEFAULT",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ],
        "MultiRegion": false
    }
}
```

Untuk informasi selengkapnya, lihat [Membuat kunci terkelola pelanggan simetris](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) di *Panduan AWS Key Management Service Pengembang*.

#### Kebijakan kunci
<a name="key-policy"></a>

Saat membuat kunci terkelola pelanggan, Anda dapat menentukan kebijakan kunci. Kebijakan utama mengontrol akses ke kunci yang dikelola pelanggan Anda. Setiap kunci yang dikelola pelanggan harus memiliki persis satu kebijakan utama, yang berisi pernyataan yang menentukan siapa yang dapat menggunakan kunci dan bagaimana mereka dapat menggunakannya. Untuk informasi selengkapnya, lihat [Kebijakan utama](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) di *Panduan AWS Key Management Service Pengembang*.

AWS IoT Core menggunakan peran IAM di akun Anda untuk mengakses kunci yang dikelola pelanggan Anda. Jika Anda menggunakan kebijakan kunci kustom, pastikan peran IAM yang dibuat pada kunci ini memiliki izin berikut:
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

### Langkah 2: Buat peran IAM untuk memberikan AWS IoT Core izin menggunakan kunci KMS
<a name="create-an-iam-role"></a>

 AWS IoT Core Untuk menggunakan kunci KMS yang Anda buat untuk mengenkripsi data Anda saat istirahat, Anda juga perlu membuat peran IAM di akun Anda, yang AWS IoT Core dapat mengasumsikan untuk mengakses kunci KMS.

Peran harus memiliki kebijakan kepercayaan berikut untuk memungkinkan AWS IoT Core untuk mengambil peran.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "Service": "iot.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "StringEquals": {
                "aws:SourceAccount": "111122223333"
            },
            "ArnLike": {
                "aws:SourceArn": "arn:aws:iot:us-west-2:111122223333:*"
            }
        }
    }
}
```

Pastikan kebijakan IAM yang dilampirkan pada peran IAM memiliki izin berikut pada kunci KMS:
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

Berikut ini adalah contoh kebijakan IAM dengan izin yang diperlukan untuk kunci yang dikelola pelanggan.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowIoTToAccessKMSResource",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey",
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncryptTo",
                "kms:ReEncryptFrom",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": [
                "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
            ],
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws-crypto-ec:vendor": "iot.amazonaws.com"
                }
            }
        }
    ]
}
```

*Untuk informasi selengkapnya, lihat [Membuat peran untuk mendelegasikan izin ke pengguna IAM di Panduan Pengguna](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html).AWS Identity and Access Management *

### Langkah 3: Ikut serta kunci yang dikelola pelanggan di AWS IoT Core
<a name="opt-in-customer-managed-keys"></a>

Setelah Anda menyelesaikan semua langkah sebelumnya, jalankan perintah `update-encryption-configuration` CLI untuk ikut serta menggunakan kunci yang dikelola pelanggan. AWS IoT Core Saat Anda memilih kunci yang dikelola pelanggan, semua AWS IoT Core sumber daya di AWS akun Anda akan dienkripsi menggunakan kunci yang ditentukan AWS KMS .

1. Untuk ikut serta dalam kunci yang dikelola pelanggan dalam AWS IoT Core menggunakan AWS CLI, jalankan perintah `update-encryption-configuration` CLI.

   ```
   aws iot update-encryption-configuration --encryption-type "CUSTOMER_MANAGED_KMS_KEY" \
   --kms-access-role-arn "arn:aws:iam::111122223333:role/myrole" \
   --kms-key-arn "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" --region us-west-2
   ```

1. Untuk memverifikasi kunci yang dikelola pelanggan dalam AWS IoT Core menggunakan AWS CLI, jalankan perintah `describe-encryption-configuration` CLI:

   ```
   aws iot describe-encryption-configuration --region us-west-2
   ```

   Jika Anda telah mengaktifkan kunci terkelola pelanggan AWS IoT Core, hasilnya dapat terlihat seperti berikut:

   ```
   {
       "encryptionType": "CUSTOMER_MANAGED_KMS_KEY",
       "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
       "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
       "configurationDetails": {
           "configurationStatus": "HEALTHY"
       },
       "lastModifiedDate": "2024-09-26T22:01:02.365000-07:00"
   }
   ```

   `lastModifiedDate`Bidang menunjukkan tanggal ketika konfigurasi enkripsi terakhir diperbarui.

   Jika Anda belum mengaktifkan kunci terkelola pelanggan, hasilnya dapat terlihat seperti berikut:

   ```
   {
       "encryptionType": "AWS_OWNED_KMS_KEY",
       "lastModifiedDate": "2024-09-26T22:01:02.365000-07:00"
   }
   ```

### Langkah 4: Izin tambahan diperlukan untuk operasi pesawat AWS IoT Core kontrol
<a name="cmk-control-plane-permissions"></a>

Setelah Anda memilih kunci yang dikelola pelanggan, semua AWS IoT Core sumber daya milik AWS akun Anda dienkripsi dengan kunci KMS yang disediakan. Semua operasi bidang kontrol sekarang mengharuskan pemanggil untuk memiliki `kms:Decrypt` izin pada kunci KMS selain izin yang diperlukan untuk operasi tertentu pada sumber daya. AWS IoT Core Jika penelepon tidak memiliki `kms:Decrypt` izin dan mereka membuat panggilan API yang memerlukan enkripsi atau dekripsi data (misalnya,`GetPolicy`), mereka akan menerima file. `UnauthorizedException`

Misalnya, saat Anda menelepon`GetPolicy`, Anda memerlukan keduanya `iot:GetPolicy` dan `kms:Decrypt` izin pada kunci KMS yang dikelola pelanggan agar panggilan API berhasil.

**catatan**  
Saat memperbarui pengguna atau peran IAM untuk memberikan AWS KMS izin pada kunci yang digunakan untuk konfigurasi enkripsi Anda, pastikan kebijakan kunci KMS juga memberikan izin yang diperlukan kepada pengguna atau peran IAM masing-masing.

#### AWS KMS izin untuk `UpdateEncryptionConfiguration`
<a name="kms-permissions-update-encryption-configuration"></a>

Panggilan `UpdateEncryptionConfiguration` API memerlukan AWS KMS izin berikut pada kunci KMS untuk dapat ikut serta dalam kunci yang dikelola pelanggan atau untuk memodifikasi konfigurasi kunci:
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

#### AWS KMS izin untuk semua bidang kontrol lainnya APIs
<a name="kms-permissions-control-plane-apis"></a>

Sebagian besar bidang kontrol APIs memerlukan `kms:Decrypt` izin saat kunci terkelola pelanggan diaktifkan. Namun, tertentu APIs tidak memerlukan izin tambahan ini:

APIs yang tidak memerlukan AWS KMS izin  
`List*`Dan `Delete*` APIs jangan jatuh ke dalam ember ini. Pelanggan selalu dapat memanggil API bidang apa pun `List*` atau `Delete*` mengontrol dan panggilan API tersebut akan berhasil meskipun pemanggil tidak memiliki `kms:Decrypt` izin. Panggilan API ini akan berhasil bahkan jika kunci yang dikelola pelanggan Anda tidak sehat `List*` dan tidak `Delete*` APIs melakukan dekripsi apa pun.  
+ **Daftar\$1 APIs** - Semua operasi daftar (misalnya,, `ListThings``ListPolicies`,`ListCertificates`)
+ **Hapus\$1 APIs** — Semua operasi penghapusan (misalnya,,,) `DeleteThing` `DeletePolicy` `DeleteCertificate`

### Langkah 5: Mengelola kunci
<a name="understanding-key-health"></a>

AWS IoT Core menjalankan pemeriksaan berkala pada konfigurasi kunci yang dikelola pelanggan Anda untuk memastikan operasi enkripsi dan dekripsi tidak terpengaruh. Pemeriksaan kesehatan ini berjalan sekali setiap menit dan memverifikasi AWS IoT Core kemampuan untuk mengakses dan menggunakan AWS KMS kunci dan peran IAM terkait untuk mengenkripsi dan mendekripsi operasi.

SEHAT  
AWS IoT Core dapat berhasil mengakses AWS KMS kunci melalui peran IAM yang ditentukan dan melakukan encryption/decryption operasi. Semua komponen berfungsi dengan benar.

TIDAK SEHAT  
AWS IoT Core tidak dapat mengakses atau menggunakan AWS KMS kunci. Ini mencegah operasi enkripsi baru dan dapat memengaruhi fungsionalitas layanan. `errorCode`Bidang menunjukkan apakah masalahnya ada pada kunci atau peran IAM.

#### Tindakan pelanggan yang dapat memengaruhi kesehatan utama
<a name="customer-actions-affecting-health"></a>

Beberapa tindakan pelanggan dapat menyebabkan status kesehatan utama berubah dari `HEALTHY` menjadi`UNHEALTHY`:

Tindakan terkait kunci  
+ **Menghapus AWS KMS kunci** — Ketika Anda menjadwalkan penghapusan kunci, itu dalam `Pending deletion` status dan tidak dapat digunakan
+ **Menonaktifkan AWS KMS kunci** - Ketika Anda menonaktifkan kunci KMS, itu tidak dapat lagi digunakan untuk mengenkripsi/mendekripsi operasi
+ **Kunci penjadwalan untuk penghapusan** - Kunci menjadi tidak dapat digunakan saat penghapusan selesai
+ **Memodifikasi kebijakan kunci** - Menghapus izin yang diperlukan untuk akses AWS IoT Core 
+ **Mengubah izin penggunaan kunci** — Membatasi tindakan yang diperlukan AWS KMS 

Tindakan terkait peran IAM  
+ **Menghapus peran IAM** — tidak AWS IoT Core dapat mengambil peran untuk mengakses kunci
+ **Memodifikasi izin peran** — Menghapus AWS KMS izin yang diperlukan dari kebijakan peran
+ **Mengubah kebijakan kepercayaan** — Mencegah AWS IoT Core layanan dari mengambil peran
+ **Menambahkan kondisi restriktif** — Kondisi yang AWS IoT Core mencegah penggunaan peran

Tindakan tingkat akun  
+ **Perubahan akses kunci lintas akun** - Memodifikasi izin untuk kunci di akun yang berbeda
+ **Kebijakan Kontrol Layanan (SCPs)** — Kebijakan tingkat organisasi yang membatasi akses AWS KMS 
+ Kebijakan **IAM tingkat akun — Kebijakan** yang mengesampingkan atau bertentangan dengan akses kunci

**penting**  
Setiap perubahan pada AWS KMS kunci, peran IAM, atau kebijakan yang digunakan oleh AWS IoT Core harus diuji di lingkungan pengembangan terlebih dahulu. Pantau status kesehatan utama dengan cermat setelah melakukan perubahan apa pun untuk memastikan AWS IoT Core fungsionalitas tidak terpengaruh.

#### Memperbarui konfigurasi enkripsi
<a name="key-transition"></a>

Perbarui konfigurasi enkripsi Anda AWS IoT Core untuk mengubah dari satu kunci yang dikelola pelanggan ke yang lain, atau antara kunci yang AWS dimiliki dan kunci yang dikelola pelanggan.

Untuk mengubah konfigurasi ke kunci terkelola pelanggan yang berbeda:

1. Buat kunci terkelola pelanggan baru dengan mengikuti langkah-langkah di[Langkah 1: Buat kunci yang dikelola pelanggan](#encryption-at-rest-cmk-create).

1. Perbarui kebijakan peran IAM Anda untuk menyertakan izin untuk kunci lama dan baru selama periode pembaruan.

1. Perbarui konfigurasi enkripsi Anda untuk menggunakan kunci baru:

   ```
   aws iot update-encryption-configuration --encryption-type "CUSTOMER_MANAGED_KMS_KEY" \
   --kms-access-role-arn "arn:aws:iam::111122223333:role/myrole" \
   --kms-key-arn "arn:aws:kms:us-west-2:111122223333:key/new-key-id"
   ```

Untuk mengubah konfigurasi dari kunci yang dikelola pelanggan kembali ke kunci AWS yang dimiliki:

```
aws iot update-encryption-configuration --encryption-type "AWS_OWNED_KMS_KEY"
```

**catatan**  
Saat memperbarui konfigurasi enkripsi untuk kunci terkelola pelanggan baru, pastikan kunci lama dan baru tetap dapat diakses agar operasi berhasil.

##### Skenario dan dampak kegagalan umum
<a name="failure-scenarios"></a>

Tabel berikut menjelaskan skenario kegagalan umum ketika kunci dihapus atau dinonaktifkan:


| Skenario | Dampak Langsung | Konsekuensi Jangka Panjang | 
| --- | --- | --- | 
|  Kunci dinonaktifkan  |  Semua encryption/decryption operasi baru gagal segera  |  Gangguan layanan hingga kunci diaktifkan kembali atau diganti  | 
|  Kunci dijadwalkan untuk dihapus  |  Status kunci diubah menjadi penghapusan tertunda dan semua encryption/decryption operasi akan gagal  |  Kegagalan layanan otomatis saat penghapusan selesai  | 
|  Kunci dihapus secara permanen  |  Kegagalan langsung dan permanen dari semua operasi  |  Kehilangan data permanen dan ketidakmampuan untuk memulihkan data terenkripsi  | 
|  Kebijakan kunci dimodifikasi secara tidak benar  |  AWS IoT Core kehilangan izin akses ke kunci  |  Kegagalan layanan sampai kebijakan diperbaiki  | 
|  Peran IAM dihapus  |  AWS IoT Core tidak dapat mengambil peran untuk mengakses kunci  |  Kegagalan layanan enkripsi lengkap  | 
|  Peran IAM dimodifikasi secara tidak benar  |  AWS IoT Core tidak dapat mengambil peran atau menggunakan peran untuk mengakses kunci  |   Kegagalan layanan hingga peran IAM diperbaiki  | 

##### Pencegahan dan praktik terbaik
<a name="prevention-best-practices"></a>

Untuk mencegah penghapusan atau penonaktifan kunci yang tidak disengaja dan meminimalkan risiko kegagalan layanan:

Menerapkan kebijakan siklus hidup utama  
Menetapkan prosedur yang jelas untuk penciptaan kunci, rotasi, dan pensiun. Dokumentasikan kunci mana yang digunakan oleh AWS IoT Core sumber daya mana dan memelihara inventaris kunci aktif.

Gunakan kebijakan IAM untuk membatasi penghapusan kunci  
Buat kebijakan IAM yang mencegah pengguna yang tidak sah menghapus atau menonaktifkan kunci enkripsi penting. Gunakan ketentuan untuk meminta persetujuan tambahan untuk operasi penghapusan kunci.

Aktifkan CloudTrail pencatatan  
Memantau semua operasi AWS KMS kunci CloudTrail untuk mendeteksi aktivitas manajemen kunci yang tidak sah atau tidak disengaja. Siapkan peringatan untuk penghapusan kunci, penonaktifan, atau perubahan kebijakan.

Uji prosedur penggantian kunci  
Uji prosedur penggantian kunci Anda secara teratur di lingkungan non-produksi untuk memastikan Anda dapat dengan cepat pulih dari kegagalan terkait kunci.

Pertahankan cadangan kunci  
Meskipun Anda tidak dapat mengekspor materi AWS KMS kunci, pertahankan catatan rinci kunci ARNs, kebijakan, dan AWS IoT Core konfigurasi terkait untuk memfasilitasi penggantian kunci cepat jika diperlukan.

Pantau kesehatan utama  
Terus memantau `CMK.Health` metrik dan mengatur peringatan otomatis untuk perubahan status kesehatan utama. Menerapkan respons otomatis untuk mengatasi masalah terkait kunci dengan cepat.

**penting**  
Selalu uji prosedur pembaruan kunci di lingkungan pengembangan sebelum menerapkannya dalam produksi. Miliki rencana rollback yang terdokumentasi dan pastikan bahwa prosedur penggantian kunci dapat dijalankan dengan cepat jika terjadi keadaan darurat.

### Langkah 6: Memantau kesehatan utama
<a name="health-status-monitoring"></a>

Sebagai bagian dari pemeriksaan berkala, AWS IoT Core CloudWatch metrik dan log dipancarkan untuk memberikan visibilitas pada status kesehatan konfigurasi kunci yang dikelola pelanggan Anda

AWS IoT Core memancarkan `CMK.Health` metrik CloudWatch setidaknya sekali setiap menit. Metrik ini memberikan informasi tentang status kesehatan kunci yang dikelola pelanggan yang digunakan AWS IoT Core untuk mengenkripsi dan mendekripsi data Anda.

`CMK.Health`Metrik dapat memiliki nilai-nilai berikut:
+ Nilainya AWS IoT Core adalah`1`: dapat menggunakan kunci enkripsi dengan sukses untuk mengenkripsi dan mendekripsi data Anda.
+ Nilainya AWS IoT Core adalah`0`: tidak dapat menggunakan kunci enkripsi untuk mengenkripsi dan mendekripsi data Anda.

AWS IoT Core juga memancarkan log AWS IoT V2 ketika status kesehatan kunci enkripsi berubah. Log ini memberikan rincian tambahan tentang pembaruan status kesehatan. Untuk melihat log ini, Anda harus mengaktifkan log AWS IoT V2. `HEALTHY`Log dipancarkan pada `INFO` level, dan `UNHEALTHY` log dipancarkan pada level. `ERROR` Untuk informasi selengkapnya tentang level log, lihat [Level log](https://docs.aws.amazon.com/iot/latest/developerguide/configure-logging.html#log-level).

Contoh berikut adalah entri CloudWatch log yang dipancarkan oleh AWS IoT Core untuk menunjukkan pembaruan status kesehatan dari kunci yang dikelola pelanggan.

Untuk secara efektif memantau dan menanggapi perubahan status kesehatan utama:

1. **Siapkan CloudWatch alarm** untuk `CMK.Health` metrik:

   ```
   aws cloudwatch put-metric-alarm --region us-west-2 \
     --alarm-name "IoTCore-CMK-Health-Alert" \
     --alarm-description "Alert when IoT Core CMK health is unhealthy" \
     --metric-name "CMK.Health" \
     --namespace "AWS/IoT" \
     --statistic "Minimum" \
     --period 300 \
     --evaluation-periods 1 \
     --threshold 1 \
     --comparison-operator "LessThanThreshold" \
     --alarm-actions "arn:aws:sns:us-west-2:111122223333:iot-alerts"
   ```

1. **Aktifkan pencatatan AWS IoT V2** untuk menangkap peristiwa perubahan status kesehatan terperinci dengan kode kesalahan dan pesan.

1. **Periksa status konfigurasi** untuk pemecahan masalah:

   ```
   aws iot describe-encryption-configuration --region us-west-2
   ```

1. **Selidiki status TIDAK SEHAT** dengan memeriksa `errorCode` bidang:
   + `KMS_KEY_VALIDATION_ERROR`— Masalah dengan AWS KMS kunci (dinonaktifkan, dihapus, atau masalah kebijakan)
   + `ROLE_VALIDATION_ERROR`— Masalah dengan peran IAM (dihapus, masalah kebijakan, atau masalah kepercayaan)

#### Dari tidak sehat ke sehat
<a name="unhealthy-to-healthy"></a>

Ketika status kunci enkripsi diperbarui dari `UNHEALTHY` ke`HEALTHY`, AWS IoT Core akan memancarkan pesan log AWS IoT V2 dalam format berikut.

```
{
    "timestamp": "2017-08-10 15:37:23.476",
    "logLevel": "INFO",
    "traceId": "8421693b-f4f0-4e4a-9235-0cff8bab897d",
    "accountId": "111122223333",
    "status": "SUCCESS",
    "cmkStatus": "HEALTHY",
    "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
    "eventType": "CmkHealthCheck"
}
```

#### Dari SEHAT ke TIDAK SEHAT
<a name="healthy-to-unhealthy"></a>

Ketika status kunci enkripsi diperbarui dari `HEALTHY` ke`UNHEALTHY`, AWS IoT Core akan memancarkan pesan log AWS IoT V2 dalam format berikut.

```
{
    "timestamp": "2017-08-10 15:37:23.476",
    "logLevel": "ERROR",
    "traceId": "8421693b-f4f0-4e4a-9235-0cff8bab897d",
    "accountId": "111122223333",
    "status": "FAILURE",
    "cmkStatus": "UNHEALTHY",
    "errorCode": "KMS_KEY_VALIDATION_ERROR / ROLE_VALIDATION_ERROR",
    "errorMessage": "Error message on why there was a failure",
    "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
    "eventType": "CmkHealthCheck"
}
```

**Awas**  
Ketika kesehatan utama menjadi`UNHEALTHY`, AWS IoT Core operasi gagal segera. Jika ini terjadi, tinjau konfigurasi kunci, izin peran IAM, dan kebijakan Anda. Pantau `CMK.Health` metrik untuk perubahan status. Jika operasi terus gagal setelah meninjau konfigurasi Anda, hubungi manajer akun atau [Pusat AWS Dukungan](https://console.aws.amazon.com/support/home#/) untuk bantuan tambahan.

#### AWS CloudTrail acara
<a name="aws-cloudtrail-events"></a>

Anda juga dapat memantau AWS IoT Core penggunaan kunci KMS untuk mengenkripsi operasi dekripsi. AWS IoT Core akan membuat`DescribeKey`,, `Decrypt``ReEncrypt`, dan `GenerateDataKeyWithoutPlaintext` operasi pada kunci KMS Anda untuk mengenkripsi/mendekripsi data milik AWS akun Anda yang disimpan saat istirahat.

Ada CloudTrail acara untuk`DescribeKey`,`Decrypt`,`ReEncrypt`, dan`GenerateDataKeyWithoutPlaintext`. Peristiwa ini memantau AWS KMS operasi yang dipanggil oleh AWS IoT Core untuk mengakses data yang dienkripsi oleh kunci yang dikelola pelanggan Anda.

##### Contoh `Decrypt`
<a name="decrypt"></a>

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "*********************",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
                "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "*****"
            },
            "attributes": {
                "creationDate": "2024-09-16T20:23:39Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "iot.amazonaws.com"
    },
    "eventTime": "2024-09-16T20:32:48Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "iot.amazonaws.com",
    "userAgent": "iot.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "kms-arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "aws-crypto-ec:vendor": "iot.amazonaws.com",
            "branch-key-id": "111122223333",
            "type": "branch:ACTIVE"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "responseElements": null,
    "requestID": "1afb6d98-8388-455d-8b48-e62c9e0cf7f4",
    "eventID": "b59a5f16-0d98-46d8-a590-0e040a48b39b",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

# Identitas dan manajemen akses untuk AWS IoT
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) adalah Layanan AWS yang membantu administrator mengontrol akses ke AWS sumber daya dengan aman. Administrator IAM mengontrol siapa yang dapat *diautentikasi* (masuk) dan *diberi wewenang* (memiliki izin) untuk menggunakan sumber daya. AWS IoT IAM adalah Layanan AWS yang dapat Anda gunakan tanpa biaya tambahan.

**Topics**
+ [Audiens](#security_iam_audience)
+ [Autentikasi dengan identitas IAM](#security_iam_authentication)
+ [Mengelola akses menggunakan kebijakan](#security_iam_access-manage)
+ [Bagaimana AWS IoT bekerja dengan IAM](security_iam_service-with-iam.md)
+ [AWS IoT contoh kebijakan berbasis identitas](security_iam_id-based-policy-examples.md)
+ [AWS kebijakan terkelola untuk AWS IoT](security-iam-awsmanpol.md)
+ [Memecahkan masalah AWS IoT identitas dan akses](security_iam_troubleshoot.md)

## Audiens
<a name="security_iam_audience"></a>

Cara Anda menggunakan AWS Identity and Access Management (IAM) berbeda berdasarkan peran Anda:
+ **Pengguna layanan** - minta izin dari administrator Anda jika Anda tidak dapat mengakses fitur (lihat [Memecahkan masalah AWS IoT identitas dan akses](security_iam_troubleshoot.md))
+ **Administrator layanan** - tentukan akses pengguna dan mengirimkan permintaan izin (lihat [Bagaimana AWS IoT bekerja dengan IAM](security_iam_service-with-iam.md))
+ **Administrator IAM** - tulis kebijakan untuk mengelola akses (lihat [AWS IoT contoh kebijakan berbasis identitas](security_iam_id-based-policy-examples.md))

## Autentikasi dengan identitas IAM
<a name="security_iam_authentication"></a>

Dalam AWS IoT identitas dapat berupa sertifikat perangkat (X.509), identitas Amazon Cognito, atau pengguna atau grup IAM. Topik ini membahas identitas IAM saja. Untuk informasi lebih lanjut tentang identitas lain yang AWS IoT mendukung, lihat[Autentikasi Klien](client-authentication.md).

Otentikasi adalah cara Anda masuk AWS menggunakan kredensi identitas Anda. Anda harus diautentikasi sebagai Pengguna root akun AWS, pengguna IAM, atau dengan mengasumsikan peran IAM.

Anda dapat masuk sebagai identitas federasi menggunakan kredensyal dari sumber identitas seperti AWS IAM Identity Center (Pusat Identitas IAM), autentikasi masuk tunggal, atau kredensyal. Google/Facebook Untuk informasi selengkapnya tentang cara masuk, lihat [Cara masuk ke Akun AWS Anda](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) dalam *Panduan Pengguna AWS Sign-In *.

Untuk akses terprogram, AWS sediakan SDK dan CLI untuk menandatangani permintaan secara kriptografis. Untuk informasi selengkapnya, lihat [AWS Signature Version 4 untuk permintaan API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) dalam *Panduan Pengguna IAM*.

### Akun AWS pengguna root
<a name="security_iam_authentication-rootuser"></a>

 Saat Anda membuat Akun AWS, Anda mulai dengan satu identitas masuk yang disebut *pengguna Akun AWS root* yang memiliki akses lengkap ke semua Layanan AWS dan sumber daya. Kami sangat menyarankan agar Anda tidak menggunakan pengguna root untuk tugas sehari-hari. Untuk tugas yang memerlukan kredensial pengguna root, lihat [Tugas yang memerlukan kredensial pengguna root](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) dalam *Panduan Pengguna IAM*. 

### Pengguna dan grup IAM
<a name="security_iam_authentication-iamuser"></a>

*[Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)* adalah identitas dengan izin khusus untuk satu orang atau aplikasi. Sebaiknya gunakan kredensial sementara alih-alih pengguna IAM dengan kredensial jangka panjang. Untuk informasi selengkapnya, lihat [Mewajibkan pengguna manusia untuk menggunakan federasi dengan penyedia identitas untuk mengakses AWS menggunakan kredensyal sementara](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) di Panduan Pengguna *IAM*.

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) menentukan kumpulan pengguna IAM dan mempermudah pengelolaan izin untuk pengguna dalam jumlah besar. Untuk mempelajari selengkapnya, lihat [Kasus penggunaan untuk pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) dalam *Panduan Pengguna IAM*.

### Peran IAM
<a name="security_iam_authentication-iamrole"></a>

*[Peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)* adalah identitas dengan izin khusus yang menyediakan kredensial sementara. Anda dapat mengambil peran dengan [beralih dari pengguna ke peran IAM (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) atau dengan memanggil operasi AWS CLI atau AWS API. Untuk informasi selengkapnya, lihat [Metode untuk mengambil peran](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html) dalam *Panduan Pengguna IAM*.

Peran IAM berguna untuk akses pengguna terfederasi, izin pengguna IAM sementara, akses lintas akun, akses lintas layanan, dan aplikasi yang berjalan di Amazon EC2. Untuk informasi selengkapnya, lihat [Akses sumber daya lintas akun di IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) dalam *Panduan Pengguna IAM*.

## Mengelola akses menggunakan kebijakan
<a name="security_iam_access-manage"></a>

Anda mengontrol akses AWS dengan membuat kebijakan dan melampirkannya ke AWS identitas atau sumber daya. Kebijakan menentukan izin saat dikaitkan dengan identitas atau sumber daya. AWS mengevaluasi kebijakan ini ketika kepala sekolah membuat permintaan. Sebagian besar kebijakan disimpan AWS sebagai dokumen JSON. Untuk informasi selengkapnya tentang dokumen kebijakan JSON, lihat [Gambaran umum kebijakan JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) dalam *Panduan Pengguna IAM*.

Menggunakan kebijakan, administrator menentukan siapa yang memiliki akses ke apa dengan mendefinisikan **principal** mana yang dapat melakukan **tindakan** pada **sumber daya** apa, dan dalam **kondisi** apa.

Secara default, pengguna dan peran tidak memiliki izin. Administrator IAM membuat kebijakan IAM dan menambahkannya ke peran, yang kemudian dapat diambil oleh pengguna. Kebijakan IAM mendefinisikan izin terlepas dari metode yang Anda gunakan untuk melakukan operasinya.

### Kebijakan berbasis identitas
<a name="security_iam_access-manage-id-based-policies"></a>

Kebijakan berbasis identitas adalah dokumen kebijakan izin JSON yang Anda lampirkan ke identitas (pengguna, grup, atau peran). Kebijakan ini mengontrol tindakan apa yang bisa dilakukan oleh identitas tersebut, terhadap sumber daya yang mana, dan dalam kondisi apa. Untuk mempelajari cara membuat kebijakan berbasis identitas, lihat [Tentukan izin IAM kustom dengan kebijakan yang dikelola pelanggan](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) dalam *Panduan Pengguna IAM*.

Kebijakan berbasis identitas dapat berupa *kebijakan inline* (disematkan langsung ke dalam satu identitas) atau *kebijakan terkelola* (kebijakan mandiri yang dilampirkan pada banyak identitas). Untuk mempelajari cara memilih antara kebijakan terkelola dan kebijakan inline, lihat [Pilih antara kebijakan terkelola dan kebijakan inline](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) dalam *Panduan Pengguna IAM*.

### Kebijakan berbasis sumber daya
<a name="security_iam_access-manage-resource-based-policies"></a>

Kebijakan berbasis sumber daya adalah dokumen kebijakan JSON yang Anda lampirkan ke sumber daya. Contohnya termasuk *kebijakan kepercayaan peran IAM* dan *kebijakan bucket* Amazon S3. Dalam layanan yang mendukung kebijakan berbasis sumber daya, administrator layanan dapat menggunakannya untuk mengontrol akses ke sumber daya tertentu. Anda harus [menentukan principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) dalam kebijakan berbasis sumber daya.

Kebijakan berbasis sumber daya merupakan kebijakan inline yang terletak di layanan tersebut. Anda tidak dapat menggunakan kebijakan AWS terkelola dari IAM dalam kebijakan berbasis sumber daya.

### Daftar kontrol akses (ACLs)
<a name="security_iam_access-manage-acl"></a>

Access control lists (ACLs) mengontrol prinsipal mana (anggota akun, pengguna, atau peran) yang memiliki izin untuk mengakses sumber daya. ACLs mirip dengan kebijakan berbasis sumber daya, meskipun mereka tidak menggunakan format dokumen kebijakan JSON.

Amazon S3, AWS WAF, dan Amazon VPC adalah contoh layanan yang mendukung. ACLs Untuk mempelajari selengkapnya ACLs, lihat [Ringkasan daftar kontrol akses (ACL)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html) di *Panduan Pengembang Layanan Penyimpanan Sederhana Amazon*.

### Jenis-jenis kebijakan lain
<a name="security_iam_access-manage-other-policies"></a>

AWS mendukung jenis kebijakan tambahan yang dapat menetapkan izin maksimum yang diberikan oleh jenis kebijakan yang lebih umum:
+ **Batasan izin** – Menetapkan izin maksimum yang dapat diberikan oleh kebijakan berbasis identitas kepada entitas IAM. Untuk informasi selengkapnya, lihat [Batasan izin untuk entitas IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) dalam *Panduan Pengguna IAM*.
+ **Kebijakan kontrol layanan (SCPs)** — Tentukan izin maksimum untuk organisasi atau unit organisasi di AWS Organizations. Untuk informasi selengkapnya, lihat [Kebijakan kontrol layanan](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) dalam *Panduan Pengguna AWS Organizations *.
+ **Kebijakan kontrol sumber daya (RCPs)** — Tetapkan izin maksimum yang tersedia untuk sumber daya di akun Anda. Untuk informasi selengkapnya, lihat [Kebijakan kontrol sumber daya (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) di *Panduan AWS Organizations Pengguna*.
+ **Kebijakan sesi** – Kebijakan lanjutan yang diteruskan sebagai parameter saat membuat sesi sementara untuk peran atau pengguna terfederasi. Untuk informasi selengkapnya, lihat [Kebijakan sesi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) dalam *Panduan Pengguna IAM*.

### Berbagai jenis kebijakan
<a name="security_iam_access-manage-multiple-policies"></a>

Ketika beberapa jenis kebijakan berlaku pada suatu permintaan, izin yang dihasilkan lebih rumit untuk dipahami. Untuk mempelajari cara AWS menentukan apakah akan mengizinkan permintaan saat beberapa jenis kebijakan terlibat, lihat [Logika evaluasi kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) di *Panduan Pengguna IAM*.

# Bagaimana AWS IoT bekerja dengan IAM
<a name="security_iam_service-with-iam"></a>

Sebelum Anda menggunakan IAM untuk mengelola akses AWS IoT, Anda harus memahami fitur IAM mana yang tersedia untuk digunakan. AWS IoT Untuk mendapatkan tampilan tingkat tinggi tentang cara AWS IoT dan AWS layanan lain bekerja dengan IAM, lihat [AWS Layanan yang Bekerja dengan IAM di Panduan Pengguna *IAM*](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_aws-services-that-work-with-iam.html).

**Topics**
+ [AWS IoT kebijakan berbasis identitas](#security_iam_service-with-iam-id-based-policies)
+ [AWS IoT kebijakan berbasis sumber daya](#security_iam_service-with-iam-resource-based-policies)
+ [Otorisasi berdasarkan tag AWS IoT](#security_iam_service-with-iam-tags)
+ [AWS IoT Peran IAM](#security_iam_service-with-iam-roles)

## AWS IoT kebijakan berbasis identitas
<a name="security_iam_service-with-iam-id-based-policies"></a>

Dengan kebijakan berbasis identitas IAM, Anda dapat menentukan tindakan dan sumber daya yang diizinkan atau ditolak, serta kondisi di mana tindakan tersebut diperbolehkan atau ditolak. AWS IoT mendukung tindakan tertentu, sumber daya, dan kunci syarat. Untuk mempelajari semua elemen yang Anda gunakan dalam kebijakan JSON, lihat [Referensi elemen kebijakan IAM JSON](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_elements.html) dalam *Panduan Pengguna IAM*.

### Tindakan
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

Administrator dapat menggunakan kebijakan AWS JSON untuk menentukan siapa yang memiliki akses ke apa. Yaitu, di mana **utama** dapat melakukan **tindakan** pada **sumber daya**, dan dalam **kondisi apa**.

Elemen `Action` dari kebijakan JSON menjelaskan tindakan yang dapat Anda gunakan untuk mengizinkan atau menolak akses dalam sebuah kebijakan. Sertakan tindakan dalam kebijakan untuk memberikan izin untuk melakukan operasi terkait.

Tabel berikut mencantumkan tindakan IAM IoT, API AWS IoT terkait, dan sumber daya yang dimanipulasi tindakan.


****  

| Tindakan kebijakan | AWS IoT API | Sumber daya | 
| --- | --- | --- | 
| IOT: AcceptCertificateTransfer | AcceptCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  Yang Akun AWS ditentukan dalam ARN harus berupa akun tempat sertifikat ditransfer.   | 
| IOT: AddThingToThingGroup | AddThingToThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: AssociateTargetsWithJob | AssociateTargetsWithJob | none  | 
| IOT: AttachPolicy | AttachPolicy |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` atau `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: AttachPrincipalPolicy | AttachPrincipalPolicy |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: AttachSecurityProfile | AttachSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| IOT: AttachThingPrincipal | AttachThingPrincipal |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: CancelCertificateTransfer | CancelCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  Yang Akun AWS ditentukan dalam ARN harus berupa akun tempat sertifikat ditransfer.   | 
| IOT: CancelJob | CancelJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| IOT: CancelJobExecution | CancelJobExecution |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: ClearDefaultAuthorizer | ClearDefaultAuthorizer | Tidak ada | 
| IOT: CreateAuthorizer | CreateAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name`  | 
| IOT: CreateCertificateFromCsr | CreateCertificateFromCsr | \$1 | 
| IOT: CreateDimension | CreateDimension | `arn:aws:iot:region:account-id:dimension/dimension-name` | 
| IOT: CreateJob | CreateJob |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name` `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| IOT: CreateJobTemplate | CreateJobTemplate |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| IOT: CreateKeysAndCertificate | CreateKeysAndCertificate | \$1 | 
| IOT: CreatePolicy | CreatePolicy | `arn:aws:iot:region:account-id:policy/policy-name` | 
| IOT: CreatePolicyVersion | CreatePolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  Ini harus menjadi AWS IoT kebijakan, bukan kebijakan IAM.   | 
| IOT: CreateRoleAlias | CreateRoleAlias |  (Parameter: RoleAlias) `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| IOT: CreateSecurityProfile | CreateSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| IOT: CreateThing | CreateThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: CreateThingGroup | CreateThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` untuk grup yang sedang dibuat dan untuk grup induk, jika digunakan  | 
| IOT: CreateThingType | CreateThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| IOT: CreateTopicRule | CreateTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: DeleteAuthorizer | DeleteAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-name`  | 
| IoT: hapus CACertificate | Hapus CACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| IOT: DeleteCertificate | DeleteCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: DeleteDimension | DeleteDimension |  `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| IOT: DeleteJob | DeleteJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| IOT: DeleteJobTemplate | DeleteJobTemplate |  `arn:aws:iot:region:account-id:job/job-template-id`  | 
| IOT: DeleteJobExecution | DeleteJobExecution |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: DeletePolicy | DeletePolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: DeletePolicyVersion | DeletePolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: DeleteRegistrationCode | DeleteRegistrationCode | \$1 | 
| IOT: DeleteRoleAlias | DeleteRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| IOT: DeleteSecurityProfile | DeleteSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| IOT: DeleteThing | DeleteThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: DeleteThingGroup | DeleteThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: DeleteThingType | DeleteThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| IOT: DeleteTopicRule | DeleteTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IoT: DeleteV2 LoggingLevel | HapusEv2 LoggingLevel |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: DeprecateThingType | DeprecateThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| IOT: DescribeAuthorizer | DescribeAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name` (parameter: AuthorizerName) none  | 
| IoT: jelaskan CACertificate | Jelaskan CACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| IOT: DescribeCertificate | DescribeCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: DescribeDefaultAuthorizer | DescribeDefaultAuthorizer | Tidak ada  | 
| IOT: DescribeEndpoint | DescribeEndpoint | \$1 | 
| IOT: DescribeEventConfigurations | DescribeEventConfigurations | none  | 
| IOT: DescribeIndex | DescribeIndex |  `arn:aws:iot:region:account-id:index/index-name`  | 
| IOT: DescribeJob | DescribeJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| IOT: DescribeJobExecution | DescribeJobExecution | Tidak ada | 
| IOT: DescribeJobTemplate | DescribeJobTemplate |  `arn:aws:iot:region:account-id:job/job-template-id`  | 
| IOT: DescribeRoleAlias | DescribeRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| IOT: DescribeThing | DescribeThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: DescribeThingGroup | DescribeThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: DescribeThingRegistrationTask | DescribeThingRegistrationTask | Tidak ada | 
| IOT: DescribeThingType | DescribeThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| IOT: DetachPolicy | DetachPolicy |  `arn:aws:iot:region:account-id:cert/cert-id` atau `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: DetachPrincipalPolicy | DetachPrincipalPolicy |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: DetachSecurityProfile | DetachSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| IOT: DetachThingPrincipal | DetachThingPrincipal |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: DisableTopicRule | DisableTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: EnableTopicRule | EnableTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: GetEffectivePolicies | GetEffectivePolicies |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: GetIndexingConfiguration | GetIndexingConfiguration | Tidak ada | 
| IOT: GetJobDocument | GetJobDocument |  `arn:aws:iot:region:account-id:job/job-id`  | 
| IOT: GetLoggingOptions | GetLoggingOptions | \$1 | 
| IOT: GetPolicy | GetPolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: GetPolicyVersion | GetPolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: GetRegistrationCode | GetRegistrationCode | \$1 | 
| IOT: GetTopicRule | GetTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: ListAttachedPolicies | ListAttachedPolicies |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` atau `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: ListAuthorizers | ListAuthorizers | Tidak ada | 
| IoT: Daftar CACertificates | Daftar CACertificates | \$1 | 
| IOT: ListCertificates | ListCertificates | \$1 | 
| IoT: CA ListCertificatesBy | ListCertificatesByCA | \$1 | 
| IOT: ListIndices | ListIndices | Tidak ada | 
| IOT: ListJobExecutionsForJob | ListJobExecutionsForJob | Tidak ada | 
| IOT: ListJobExecutionsForThing | ListJobExecutionsForThing | Tidak ada | 
| IOT: ListJobs | ListJobs |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` jika thingGroupName parameter yang digunakan  | 
| IOT: ListJobTemplates | ListJobs | Tidak ada | 
| IOT: ListOutgoingCertificates | ListOutgoingCertificates | \$1 | 
| IOT: ListPolicies | ListPolicies | \$1 | 
| IOT: ListPolicyPrincipals | ListPolicyPrincipals | \$1 | 
| IOT: ListPolicyVersions | ListPolicyVersions |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: ListPrincipalPolicies | ListPrincipalPolicies |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: ListPrincipalThings | ListPrincipalThings |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: ListRoleAliases | ListRoleAliases | Tidak ada | 
| IOT: ListTargetsForPolicy | ListTargetsForPolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: ListThingGroups | ListThingGroups | Tidak ada | 
| IOT: ListThingGroupsForThing | ListThingGroupsForThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: ListThingPrincipals | ListThingPrincipals |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: ListThingRegistrationTaskReports | ListThingRegistrationTaskReports | Tidak ada | 
| IOT: ListThingRegistrationTasks | ListThingRegistrationTasks | Tidak ada | 
| IOT: ListThingTypes | ListThingTypes | \$1 | 
| IOT: ListThings | ListThings | \$1 | 
| IOT: ListThingsInThingGroup | ListThingsInThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: ListTopicRules | ListTopicRules | \$1 | 
| IoT: Listv2 LoggingLevels | ListV2 LoggingLevels | Tidak ada | 
| IoT: Daftar CACertificate | Daftar CACertificate | \$1 | 
| IOT: RegisterCertificate | RegisterCertificate | \$1 | 
| IOT: RegisterThing | RegisterThing | Tidak ada | 
| IOT: RejectCertificateTransfer | RejectCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: RemoveThingFromThingGroup | RemoveThingFromThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: ReplaceTopicRule | ReplaceTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: SearchIndex | SearchIndex |  `arn:aws:iot:region:account-id:index/index-id`  | 
| IOT: SetDefaultAuthorizer | SetDefaultAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name`  | 
| IOT: SetDefaultPolicyVersion | SetDefaultPolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: SetLoggingOptions | SetLoggingOptions |  `arn:aws:iot:region:account-id:role/role-name`  | 
| IoT: Setv2 LoggingLevel | SETv2 LoggingLevel |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IoT: Setv2 LoggingOptions | SETv2 LoggingOptions |  `arn:aws:iot:region:account-id:role/role-name`  | 
| IOT: StartThingRegistrationTask | StartThingRegistrationTask | Tidak ada | 
| IOT: StopThingRegistrationTask | StopThingRegistrationTask | Tidak ada | 
| IOT: TestAuthorization | TestAuthorization |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: TestInvokeAuthorizer | TestInvokeAuthorizer | Tidak ada | 
| IOT: TransferCertificate | TransferCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: UpdateAuthorizer | UpdateAuthorizer |  `arn:aws:iot:region:account-id:authorizerfunction/authorizer-function-name`  | 
| IoT: Perbarui CACertificate | Perbarui CACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| IOT: UpdateCertificate | UpdateCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: UpdateDimension | UpdateDimension |  `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| IOT: UpdateEventConfigurations | UpdateEventConfigurations | Tidak ada | 
| IOT: UpdateIndexingConfiguration | UpdateIndexingConfiguration | Tidak ada | 
| IOT: UpdateRoleAlias | UpdateRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| IOT: UpdateSecurityProfile | UpdateSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| IOT: UpdateThing | UpdateThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: UpdateThingGroup | UpdateThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: UpdateThingGroupsForThing | UpdateThingGroupsForThing |  `arn:aws:iot:region:account-id:thing/thing-name` `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 

Tindakan kebijakan AWS IoT menggunakan awalan berikut sebelum tindakan:`iot:`. Misalnya, untuk memberikan izin kepada seseorang untuk mencantumkan semua hal IoT yang terdaftar di `ListThings` API mereka Akun AWS , Anda menyertakan `iot:ListThings` tindakan tersebut dalam kebijakan mereka. Pernyataan kebijakan harus mencakup salah satu `Action` atau `NotAction` elemen. AWS IoT mendefinisikan serangkaian tindakannya sendiri yang menggambarkan tugas yang dapat Anda lakukan dengan layanan ini.

Untuk menetapkan beberapa tindakan dalam satu pernyataan, pisahkan dengan koma seperti berikut:

```
"Action": [
      "ec2:action1",
      "ec2:action2"
```

Anda dapat menentukan beberapa tindakan menggunakan wildcard (\$1). Sebagai contoh, untuk menentukan semua tindakan yang dimulai dengan kata `Describe`, sertakan tindakan berikut:

```
"Action": "iot:Describe*"
```

Untuk melihat daftar tindakan, lihat AWS IoT [Tindakan yang Ditentukan oleh AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions) dalam *Panduan Pengguna IAM*.

#### Tindakan Penasihat Perangkat
<a name="security_iam_service-actions-device-advisor"></a>

Tabel berikut mencantumkan tindakan IAM IoT Device Advisor, Device Advisor API AWS IoT terkait, dan sumber daya yang dimanipulasi tindakan.


****  

| Tindakan kebijakan | AWS IoT API | Sumber daya | 
| --- | --- | --- | 
| iotdeviceadvisor: CreateSuiteDefinition | CreateSuiteDefinition |  Tidak ada  | 
| iotdeviceadvisor: DeleteSuiteDefinition | DeleteSuiteDefinition |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor: GetSuiteDefinition | GetSuiteDefinition |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor: GetSuiteRun | GetSuiteRun |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-run-id`  | 
| iotdeviceadvisor: GetSuiteRunReport | GetSuiteRunReport |  `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 
| iotdeviceadvisor: ListSuiteDefinitions | ListSuiteDefinitions | Tidak ada | 
| iotdeviceadvisor: ListSuiteRuns | ListSuiteRuns |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor: ListTagsForResource | ListTagsForResource |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id` `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 
| iotdeviceadvisor: StartSuiteRun | StartSuiteRun |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor: TagResource | TagResource |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id` `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 
| iotdeviceadvisor: UntagResource | UntagResource |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id` `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 
| iotdeviceadvisor: UpdateSuiteDefinition | UpdateSuiteDefinition |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor: StopSuiteRun | StopSuiteRun |  `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 

Tindakan kebijakan di AWS IoT Device Advisor menggunakan awalan berikut sebelum tindakan:. `iotdeviceadvisor:` Misalnya, untuk memberikan izin kepada seseorang untuk mencantumkan semua definisi suite yang terdaftar di ListSuiteDefinitions API mereka Akun AWS , Anda menyertakan `iotdeviceadvisor:ListSuiteDefinitions` tindakan tersebut dalam kebijakan mereka.

### Sumber daya
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

Administrator dapat menggunakan kebijakan AWS JSON untuk menentukan siapa yang memiliki akses ke apa. Yaitu, di mana **utama** dapat melakukan **tindakan** pada **sumber daya**, dan dalam **kondisi apa**.

Elemen kebijakan JSON `Resource` menentukan objek yang menjadi target penerapan tindakan. Praktik terbaiknya, tentukan sumber daya menggunakan [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html). Untuk tindakan yang tidak mendukung izin di tingkat sumber daya, gunakan wildcard (\$1) untuk menunjukkan bahwa pernyataan tersebut berlaku untuk semua sumber daya.

```
"Resource": "*"
```


**AWS IoT sumber daya**  

| Tindakan kebijakan | AWS IoT API | Sumber daya | 
| --- | --- | --- | 
| IOT: AcceptCertificateTransfer | AcceptCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  Yang Akun AWS ditentukan dalam ARN harus berupa akun tempat sertifikat ditransfer.   | 
| IOT: AddThingToThingGroup | AddThingToThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: AssociateTargetsWithJob | AssociateTargetsWithJob | Tidak ada  | 
| IOT: AttachPolicy | AttachPolicy | `arn:aws:iot:region:account-id:thinggroup/thing-group-name` atau `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: AttachPrincipalPolicy | AttachPrincipalPolicy |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: AttachThingPrincipal | AttachThingPrincipal |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: CancelCertificateTransfer | CancelCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  Yang Akun AWS ditentukan dalam ARN harus berupa akun tempat sertifikat ditransfer.   | 
| IOT: CancelJob | CancelJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| IOT: CancelJobExecution | CancelJobExecution |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: ClearDefaultAuthorizer | ClearDefaultAuthorizer | Tidak ada | 
| IOT: CreateAuthorizer | CreateAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name`  | 
| IOT: CreateCertificateFromCsr | CreateCertificateFromCsr | \$1 | 
| IOT: CreateJob | CreateJob |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name` `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| IOT: CreateJobTemplate | CreateJobTemplate |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| IOT: CreateKeysAndCertificate | CreateKeysAndCertificate | \$1 | 
| IOT: CreatePolicy | CreatePolicy | `arn:aws:iot:region:account-id:policy/policy-name` | 
| CreatePolicyVersion | IOT: CreatePolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  Ini harus menjadi AWS IoT kebijakan, bukan kebijakan IAM.   | 
| IOT: CreateRoleAlias | CreateRoleAlias |  (Parameter: RoleAlias) `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| IOT: CreateThing | CreateThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: CreateThingGroup | CreateThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` untuk grup yang sedang dibuat dan untuk grup induk, jika digunakan  | 
| IOT: CreateThingType | CreateThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| IOT: CreateTopicRule | CreateTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: DeleteAuthorizer | DeleteAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-name`  | 
| IoT: hapus CACertificate | Hapus CACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| IOT: DeleteCertificate | DeleteCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: DeleteJob | DeleteJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| IOT: DeleteJobExecution | DeleteJobExecution |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: DeleteJobTemplate | DeleteJobTemplate |  `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| IOT: DeletePolicy | DeletePolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: DeletePolicyVersion | DeletePolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: DeleteRegistrationCode | DeleteRegistrationCode | \$1 | 
| IOT: DeleteRoleAlias | DeleteRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| IOT: DeleteThing | DeleteThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: DeleteThingGroup | DeleteThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: DeleteThingType | DeleteThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| IOT: DeleteTopicRule | DeleteTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IoT: DeleteV2 LoggingLevel | HapusEv2 LoggingLevel |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: DeprecateThingType | DeprecateThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| IOT: DescribeAuthorizer | DescribeAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name` (parameter: AuthorizerName) none  | 
| IoT: jelaskan CACertificate | Jelaskan CACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| IOT: DescribeCertificate | DescribeCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: DescribeDefaultAuthorizer | DescribeDefaultAuthorizer | Tidak ada  | 
| IOT: DescribeEndpoint | DescribeEndpoint | \$1 | 
| IOT: DescribeEventConfigurations | DescribeEventConfigurations | none  | 
| IOT: DescribeIndex | DescribeIndex |  `arn:aws:iot:region:account-id:index/index-name`  | 
| IOT: DescribeJob | DescribeJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| IOT: DescribeJobExecution | DescribeJobExecution | Tidak ada | 
| IOT: DescribeJobTemplate | DescribeJobTemplate |  `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| IOT: DescribeRoleAlias | DescribeRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| IOT: DescribeThing | DescribeThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: DescribeThingGroup | DescribeThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: DescribeThingRegistrationTask | DescribeThingRegistrationTask | Tidak ada | 
| IOT: DescribeThingType | DescribeThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| IOT: DetachPolicy | DetachPolicy |  `arn:aws:iot:region:account-id:cert/cert-id` atau `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: DetachPrincipalPolicy | DetachPrincipalPolicy |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: DetachThingPrincipal | DetachThingPrincipal |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: DisableTopicRule | DisableTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: EnableTopicRule | EnableTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: GetEffectivePolicies | GetEffectivePolicies |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: GetIndexingConfiguration | GetIndexingConfiguration | Tidak ada | 
| IOT: GetJobDocument | GetJobDocument |  `arn:aws:iot:region:account-id:job/job-id`  | 
| IOT: GetLoggingOptions | GetLoggingOptions | \$1 | 
| IOT: GetPolicy | GetPolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: GetPolicyVersion | GetPolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: GetRegistrationCode | GetRegistrationCode | \$1 | 
| IOT: GetTopicRule | GetTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: ListAttachedPolicies | ListAttachedPolicies |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` atau `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: ListAuthorizers | ListAuthorizers | Tidak ada | 
| IoT: Daftar CACertificates | Daftar CACertificates | \$1 | 
| IOT: ListCertificates | ListCertificates | \$1 | 
| IoT: CA ListCertificatesBy | ListCertificatesByCA | \$1 | 
| IOT: ListIndices | ListIndices | Tidak ada | 
| IOT: ListJobExecutionsForJob | ListJobExecutionsForJob | Tidak ada | 
| IOT: ListJobExecutionsForThing | ListJobExecutionsForThing | Tidak ada | 
| IOT: ListJobs | ListJobs |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` jika thingGroupName parameter yang digunakan  | 
| IOT: ListJobTemplates | ListJobTemplates | Tidak ada | 
| IOT: ListOutgoingCertificates | ListOutgoingCertificates | \$1 | 
| IOT: ListPolicies | ListPolicies | \$1 | 
| IOT: ListPolicyPrincipals | ListPolicyPrincipals |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: ListPolicyVersions | ListPolicyVersions |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: ListPrincipalPolicies | ListPrincipalPolicies |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: ListPrincipalThings | ListPrincipalThings |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: ListRoleAliases | ListRoleAliases | Tidak ada | 
| IOT: ListTargetsForPolicy | ListTargetsForPolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: ListThingGroups | ListThingGroups | Tidak ada | 
| IOT: ListThingGroupsForThing | ListThingGroupsForThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: ListThingPrincipals | ListThingPrincipals |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: ListThingRegistrationTaskReports | ListThingRegistrationTaskReports | Tidak ada | 
| IOT: ListThingRegistrationTasks | ListThingRegistrationTasks | Tidak ada | 
| IOT: ListThingTypes | ListThingTypes | \$1 | 
| IOT: ListThings | ListThings | \$1 | 
| IOT: ListThingsInThingGroup | ListThingsInThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: ListTopicRules | ListTopicRules | \$1 | 
| IoT: Listv2 LoggingLevels | ListV2 LoggingLevels | Tidak ada | 
| IoT: Daftar CACertificate | Daftar CACertificate | \$1 | 
| IOT: RegisterCertificate | RegisterCertificate | \$1 | 
| IOT: RegisterThing | RegisterThing | Tidak ada | 
| IOT: RejectCertificateTransfer | RejectCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: RemoveThingFromThingGroup | RemoveThingFromThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: ReplaceTopicRule | ReplaceTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| IOT: SearchIndex | SearchIndex |  `arn:aws:iot:region:account-id:index/index-id`  | 
| IOT: SetDefaultAuthorizer | SetDefaultAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name`  | 
| IOT: SetDefaultPolicyVersion | SetDefaultPolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| IOT: SetLoggingOptions | SetLoggingOptions | \$1 | 
| IoT: Setv2 LoggingLevel | SETv2 LoggingLevel | \$1 | 
| IoT: Setv2 LoggingOptions | SETv2 LoggingOptions | \$1 | 
| IOT: StartThingRegistrationTask | StartThingRegistrationTask | Tidak ada | 
| IOT: StopThingRegistrationTask | StopThingRegistrationTask | Tidak ada | 
| IOT: TestAuthorization | TestAuthorization |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: TestInvokeAuthorizer | TestInvokeAuthorizer | Tidak ada | 
| IOT: TransferCertificate | TransferCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: UpdateAuthorizer | UpdateAuthorizer |  `arn:aws:iot:region:account-id:authorizerfunction/authorizer-function-name`  | 
| IoT: Perbarui CACertificate | Perbarui CACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| IOT: UpdateCertificate | UpdateCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| IOT: UpdateEventConfigurations | UpdateEventConfigurations | Tidak ada | 
| IOT: UpdateIndexingConfiguration | UpdateIndexingConfiguration | Tidak ada | 
| IOT: UpdateRoleAlias | UpdateRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| IOT: UpdateThing | UpdateThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| IOT: UpdateThingGroup | UpdateThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| IOT: UpdateThingGroupsForThing | UpdateThingGroupsForThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 

Untuk informasi selengkapnya tentang format ARNs, lihat [Amazon Resource Names (ARNs) dan Ruang Nama AWS Layanan](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).

Beberapa AWS IoT tindakan, seperti untuk membuat sumber daya, tidak dapat dilakukan pada sumber daya tertentu. Dalam kasus tersebut, Anda harus menggunakan wildcard (\$1).

```
"Resource": "*"
```

Untuk melihat daftar jenis sumber daya dan jenis AWS IoT sumber daya ARNs, lihat [Sumber Daya yang Ditentukan oleh AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-resources-for-iam-policies) dalam *Panduan Pengguna IAM*. Untuk mempelajari dengan tindakan mana Anda dapat menentukan ARN setiap sumber daya, lihat [Tindakan yang ditentukan oleh AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions).

#### Sumber daya Penasihat Perangkat
<a name="security_iam_service-device-advisor-resources"></a>

Untuk menentukan batasan tingkat sumber daya untuk kebijakan IAM AWS IoT Device Advisor, gunakan format ARN sumber daya berikut untuk definisi suite dan rangkaian berjalan.

Format ARN sumber daya definisi suite  
`arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`

Suite menjalankan format ARN sumber daya  
`arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`

### Kunci syarat
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

Administrator dapat menggunakan kebijakan AWS JSON untuk menentukan siapa yang memiliki akses ke apa. Yaitu, **principal** dapat melakukan **tindakan** pada suatu **sumber daya**, dan dalam suatu **syarat**.

Elemen `Condition` menentukan ketika pernyataan dieksekusi berdasarkan kriteria yang ditetapkan. Anda dapat membuat ekspresi bersyarat yang menggunakan [operator kondisi](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html), misalnya sama dengan atau kurang dari, untuk mencocokkan kondisi dalam kebijakan dengan nilai-nilai yang diminta. Untuk melihat semua kunci kondisi AWS global, lihat [kunci konteks kondisi AWS global](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) di *Panduan Pengguna IAM*.

AWS IoT mendefinisikan kumpulan kunci kondisinya sendiri dan juga mendukung penggunaan beberapa kunci kondisi global. Untuk melihat semua kunci kondisi AWS global, lihat [Kunci Konteks Kondisi AWS Global](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_condition-keys.html) di *Panduan Pengguna IAM*. 


**AWS IoT kunci kondisi**  

| AWS IoT kunci kondisi | Deskripsi | Tipe | 
| --- | --- | --- | 
| aws:RequestTag/\$1\$1tag-key\$1 | Kunci tag yang ada dalam permintaan yang dibuat pengguna AWS IoT. | String | 
| aws:ResourceTag/\$1\$1tag-key\$1 | Komponen kunci tag dari tag yang dilampirkan ke AWS IoT sumber daya. | String | 
| aws:TagKeys | Daftar semua nama kunci tag yang terkait dengan sumber daya dalam permintaan. | String | 

Untuk melihat daftar kunci AWS IoT kondisi, lihat [Condition Keys untuk AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-policy-keys) di *Panduan Pengguna IAM*. Untuk mempelajari tindakan dan sumber daya yang dapat Anda gunakan kunci kondisi, lihat [Tindakan yang Ditentukan oleh AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions).

### Contoh
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



Untuk melihat contoh kebijakan AWS IoT berbasis identitas, lihat. [AWS IoT contoh kebijakan berbasis identitas](security_iam_id-based-policy-examples.md)

## AWS IoT kebijakan berbasis sumber daya
<a name="security_iam_service-with-iam-resource-based-policies"></a>

Kebijakan berbasis sumber daya adalah dokumen kebijakan JSON yang menentukan tindakan apa yang dapat dilakukan oleh prinsipal tertentu pada AWS IoT sumber daya dan dalam kondisi apa.

AWS IoT tidak mendukung kebijakan berbasis sumber daya IAM. Namun, itu mendukung kebijakan berbasis AWS IoT sumber daya. Untuk informasi selengkapnya, lihat [AWS IoT Core kebijakan](iot-policies.md).

## Otorisasi berdasarkan tag AWS IoT
<a name="security_iam_service-with-iam-tags"></a>

Anda dapat melampirkan tag ke AWS IoT sumber daya atau meneruskan tag dalam permintaan AWS IoT. Untuk mengendalikan akses berdasarkan tanda, berikan informasi tentang tanda di [elemen kondisi](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_elements_condition.html) dari kebijakan menggunakan kunci kondisi `iot:ResourceTag/key-name`, `aws:RequestTag/key-name`, atau `aws:TagKeys`. Untuk informasi selengkapnya, lihat [Menggunakan tanda dengan kebijakan IAM](tagging-iot-iam.md). Untuk informasi selengkapnya tentang menandai AWS IoT sumber daya, lihat[Menandai sumber daya Anda AWS IoT](tagging-iot.md).

Untuk melihat contoh kebijakan berbasis identitas untuk membatasi akses ke sumber daya berdasarkan tag pada sumber daya tersebut, lihat [Melihat AWS IoT sumber daya berdasarkan tag](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-view-thing-tags).

## AWS IoT Peran IAM
<a name="security_iam_service-with-iam-roles"></a>

[Peran IAM](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles.html) adalah entitas di dalam Anda Akun AWS yang memiliki izin khusus.

### Menggunakan kredensyal sementara dengan AWS IoT
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

Anda dapat menggunakan kredensial sementara untuk masuk dengan gabungan, menjalankan IAM role, atau menjalankan peran lintas akun. Anda memperoleh kredensyal keamanan sementara dengan memanggil operasi AWS STS API seperti [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)atau. [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) 

AWS IoT mendukung menggunakan kredensial sementara. 

### Peran terkait layanan
<a name="security_iam_service-with-iam-roles-service-linked"></a>

[Peran terkait AWS layanan](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles_terms-and-concepts.html#iam-term-service-linked-role) memungkinkan layanan mengakses sumber daya di layanan lain untuk menyelesaikan tindakan atas nama Anda. Peran terkait layanan muncul di akun IAM Anda dan dimiliki oleh layanan tersebut. Administrator IAM dapat melihat tetapi tidak dapat mengedit izin untuk peran terkait layanan.

AWS IoT tidak mendukung peran terkait layanan.

### Peran layanan
<a name="security_iam_service-with-iam-roles-service"></a>

Fitur ini memungkinkan layanan untuk menerima [peran layanan](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles_terms-and-concepts.html#iam-term-service-role) atas nama Anda. Peran ini mengizinkan layanan untuk mengakses sumber daya di layanan lain untuk menyelesaikan tindakan atas nama Anda. Peran layanan muncul di akun IAM Anda dan dimiliki oleh akun tersebut. Ini berarti administrator IAM dapat mengubah izin untuk peran ini. Namun, melakukan hal itu dapat merusak fungsionalitas layanan.

# AWS IoT contoh kebijakan berbasis identitas
<a name="security_iam_id-based-policy-examples"></a>

Secara default, pengguna dan peran IAM tidak memiliki izin untuk membuat atau memodifikasi sumber daya AWS IoT . Mereka juga tidak dapat melakukan tugas menggunakan Konsol Manajemen AWS, AWS CLI, atau AWS API. Administrator IAM harus membuat kebijakan IAM yang memberikan izin kepada pengguna dan peran untuk melakukan operasi API tertentu pada sumber daya yang diperlukan. Administrator kemudian harus melampirkan kebijakan tersebut ke pengguna atau grup yang memerlukan izin tersebut.

Untuk mempelajari cara membuat kebijakan berbasis identitas IAM menggunakan contoh dokumen kebijakan JSON ini, lihat [Membuat Kebijakan pada Tab JSON](https://docs.aws.amazon.com/service-authorization/latest/reference/access_policies_create.html#access_policies_create-json-editor) dalam *Panduan Pengguna IAM*.

**Topics**
+ [Praktik terbaik kebijakan](#security_iam_service-with-iam-policy-best-practices)
+ [Menggunakan AWS IoT konsol](#security_iam_id-based-policy-examples-console)
+ [Izinkan para pengguna untuk melihat izin mereka sendiri](#security_iam_id-based-policy-examples-view-own-permissions)
+ [Melihat AWS IoT sumber daya berdasarkan tag](#security_iam_id-based-policy-examples-view-thing-tags)
+ [Melihat sumber daya AWS IoT Device Advisor berdasarkan tag](#security_iam-device-advisor-tags)

## Praktik terbaik kebijakan
<a name="security_iam_service-with-iam-policy-best-practices"></a>

Kebijakan berbasis identitas menentukan apakah seseorang dapat membuat, mengakses, atau menghapus AWS IoT sumber daya di akun Anda. Tindakan ini membuat Akun AWS Anda dikenai biaya. Ketika Anda membuat atau mengedit kebijakan berbasis identitas, ikuti panduan dan rekomendasi ini:
+ **Mulailah dengan kebijakan AWS terkelola dan beralih ke izin hak istimewa paling sedikit — Untuk mulai memberikan izin** kepada pengguna dan beban kerja Anda, gunakan *kebijakan AWS terkelola* yang memberikan izin untuk banyak kasus penggunaan umum. Mereka tersedia di Anda Akun AWS. Kami menyarankan Anda mengurangi izin lebih lanjut dengan menentukan kebijakan yang dikelola AWS pelanggan yang khusus untuk kasus penggunaan Anda. Untuk informasi selengkapnya, lihat [Kebijakan yang dikelola AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) atau [Kebijakan yang dikelola AWS untuk fungsi tugas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) dalam *Panduan Pengguna IAM*.
+ **Menerapkan izin dengan hak akses paling rendah** – Ketika Anda menetapkan izin dengan kebijakan IAM, hanya berikan izin yang diperlukan untuk melakukan tugas. Anda melakukannya dengan mendefinisikan tindakan yang dapat diambil pada sumber daya tertentu dalam kondisi tertentu, yang juga dikenal sebagai *izin dengan hak akses paling rendah*. Untuk informasi selengkapnya tentang cara menggunakan IAM untuk mengajukan izin, lihat [Kebijakan dan izin dalam IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) dalam *Panduan Pengguna IAM*.
+ **Gunakan kondisi dalam kebijakan IAM untuk membatasi akses lebih lanjut** – Anda dapat menambahkan suatu kondisi ke kebijakan Anda untuk membatasi akses ke tindakan dan sumber daya. Sebagai contoh, Anda dapat menulis kondisi kebijakan untuk menentukan bahwa semua permintaan harus dikirim menggunakan SSL. Anda juga dapat menggunakan ketentuan untuk memberikan akses ke tindakan layanan jika digunakan melalui yang spesifik Layanan AWS, seperti CloudFormation. Untuk informasi selengkapnya, lihat [Elemen kebijakan JSON IAM: Kondisi](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) dalam *Panduan Pengguna IAM*.
+ **Gunakan IAM Access Analyzer untuk memvalidasi kebijakan IAM Anda untuk memastikan izin yang aman dan fungsional** – IAM Access Analyzer memvalidasi kebijakan baru dan yang sudah ada sehingga kebijakan tersebut mematuhi bahasa kebijakan IAM (JSON) dan praktik terbaik IAM. IAM Access Analyzer menyediakan lebih dari 100 pemeriksaan kebijakan dan rekomendasi yang dapat ditindaklanjuti untuk membantu Anda membuat kebijakan yang aman dan fungsional. Untuk informasi selengkapnya, lihat [Validasi kebijakan dengan IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) dalam *Panduan Pengguna IAM*.
+ **Memerlukan otentikasi multi-faktor (MFA)** - Jika Anda memiliki skenario yang mengharuskan pengguna IAM atau pengguna root di Anda, Akun AWS aktifkan MFA untuk keamanan tambahan. Untuk meminta MFA ketika operasi API dipanggil, tambahkan kondisi MFA pada kebijakan Anda. Untuk informasi selengkapnya, lihat [Amankan akses API dengan MFA](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) dalam *Panduan Pengguna IAM*.

Untuk informasi selengkapnya tentang praktik terbaik dalam IAM, lihat [Praktik terbaik keamanan di IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam *Panduan Pengguna IAM*.

## Menggunakan AWS IoT konsol
<a name="security_iam_id-based-policy-examples-console"></a>

Untuk mengakses AWS IoT konsol, Anda harus memiliki set izin minimum. Izin ini harus memungkinkan Anda untuk membuat daftar dan melihat detail tentang AWS IoT sumber daya di Anda Akun AWS. Jika Anda membuat kebijakan berbasis identitas yang lebih ketat daripada izin minimum yang diperlukan, konsol tidak akan berfungsi sebagaimana mestinya untuk entitas (pengguna atau peran) dengan kebijakan tersebut.

Untuk memastikan bahwa entitas tersebut masih dapat menggunakan AWS IoT konsol, lampirkan juga kebijakan AWS terkelola berikut ke entitas:`AWSIoTFullAccess`. Untuk informasi selengkapnya, lihat [Menambahkan Izin ke Pengguna](https://docs.aws.amazon.com/service-authorization/latest/reference/id_users_change-permissions.html#users_change_permissions-add-console) dalam *Panduan Pengguna IAM*.

Anda tidak perlu mengizinkan izin konsol minimum untuk pengguna yang melakukan panggilan hanya ke AWS CLI atau AWS API. Sebagai alternatif, hanya izinkan akses ke tindakan yang cocok dengan operasi API yang sedang Anda coba lakukan.

## Izinkan para pengguna untuk melihat izin mereka sendiri
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

Contoh ini menunjukkan cara membuat kebijakan yang mengizinkan pengguna IAM melihat kebijakan inline dan terkelola yang dilampirkan ke identitas pengguna mereka. Kebijakan ini mencakup izin untuk menyelesaikan tindakan ini di konsol atau menggunakan API atau secara terprogram. AWS CLI AWS 

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## Melihat AWS IoT sumber daya berdasarkan tag
<a name="security_iam_id-based-policy-examples-view-thing-tags"></a>

Anda dapat menggunakan syarat dalam kebijakan berbasis identitas Anda untuk mengontrol akses ke sumber daya AWS IoT berdasarkan tanda. Contoh ini menunjukkan bagaimana Anda dapat membuat kebijakan yang memungkinkan melihat sesuatu. Namun, izin diberikan hanya jika tag benda `Owner` memiliki nilai nama pengguna pengguna tersebut. Kebijakan ini juga memberi izin yang diperlukan untuk menyelesaikan tindakan ini pada konso tersebutl.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ListBillingGroupsInConsole",
            "Effect": "Allow",
            "Action": "iot:ListBillingGroups",
            "Resource": "*"
        },
        {
            "Sid": "ViewBillingGroupsIfOwner",
            "Effect": "Allow",
           "Action": "iot:DescribeBillingGroup",
            "Resource": "arn:aws:iot:*:*:billinggroup/*",
            "Condition": {
                "StringEquals": {"aws:ResourceTag/Owner": "${aws:username}"}
        }
        }
    ]
}
```

Anda dapat melampirkan kebijakan ini ke pengguna IAM di akun Anda. Jika pengguna bernama `richard-roe` mencoba untuk melihat grup AWS IoT penagihan, grup penagihan harus diberi tag `Owner=richard-roe` atau. `owner=richard-roe` Jika tidak, aksesnya akan ditolak. Kunci tanda syarat `Owner` sama dengan kedua `Owner` dan `owner` karena nama kunci syarat tidak terpengaruh huruf besar/kecil. Untuk informasi lebih lanjut, lihat [Elemen Kebijakan IAM JSON: Persyaratan](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_elements_condition.html) dalam *Panduan Pengguna IAM*.

## Melihat sumber daya AWS IoT Device Advisor berdasarkan tag
<a name="security_iam-device-advisor-tags"></a>

Anda dapat menggunakan kondisi dalam kebijakan berbasis identitas untuk mengontrol akses ke sumber daya AWS IoT Device Advisor berdasarkan tag. Contoh berikut menunjukkan bagaimana Anda dapat membuat kebijakan yang memungkinkan melihat definisi suite tertentu. Namun, izin diberikan hanya jika tag definisi suite telah `SuiteType` disetel ke nilai`MQTT`. Kebijakan ini juga memberi izin yang diperlukan untuk menyelesaikan tindakan ini pada konsol tersebut.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewSuiteDefinition",
            "Effect": "Allow",
            "Action": "iotdeviceadvisor:GetSuiteDefinition",
            "Resource": "arn:aws:iotdeviceadvisor:*:*:suitedefinition/*",
            "Condition": {
                "StringEquals": {"aws:ResourceTag/SuiteType": "MQTT"}
        }
        }
    ]
}
```

# AWS kebijakan terkelola untuk AWS IoT
<a name="security-iam-awsmanpol"></a>







Untuk menambahkan izin ke pengguna, grup, dan peran, lebih mudah menggunakan kebijakan AWS terkelola daripada menulis kebijakan sendiri. Dibutuhkan waktu dan keahlian untuk [membuat kebijakan yang dikelola pelanggan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html) yang hanya memberi tim Anda izin yang mereka butuhkan. Untuk memulai dengan cepat, Anda dapat menggunakan kebijakan AWS terkelola kami. Kebijakan ini mencakup kasus penggunaan umum dan tersedia di Akun AWS Anda. Untuk informasi selengkapnya tentang kebijakan AWS [AWS terkelola, lihat kebijakan terkelola](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) di *Panduan Pengguna IAM*.

AWS layanan memelihara dan memperbarui kebijakan AWS terkelola. Anda tidak dapat mengubah izin dalam kebijakan AWS terkelola. Layanan terkadang menambahkan izin tambahan ke kebijakan yang dikelola AWS untuk mendukung fitur-fitur baru. Jenis pembaruan ini akan memengaruhi semua identitas (pengguna, grup, dan peran) di mana kebijakan tersebut dilampirkan. Layanan kemungkinan besar akan memperbarui kebijakan yang dikelola AWS saat ada fitur baru yang diluncurkan atau saat ada operasi baru yang tersedia. Layanan tidak menghapus izin dari kebijakan AWS terkelola, sehingga pembaruan kebijakan tidak akan merusak izin yang ada.

Selain itu, AWS mendukung kebijakan terkelola untuk fungsi pekerjaan yang mencakup beberapa layanan. Misalnya, kebijakan **ReadOnlyAccess** AWS terkelola menyediakan akses hanya-baca ke semua AWS layanan dan sumber daya. Saat layanan meluncurkan fitur baru, AWS menambahkan izin hanya-baca untuk operasi dan sumber daya baru. Untuk melihat daftar dan deskripsi dari kebijakan fungsi tugas, lihat [kebijakan yang dikelola AWS untuk fungsi tugas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) di *Panduan Pengguna IAM*.

**catatan**  
AWS IoT bekerja dengan kebijakan keduanya AWS IoT dan IAM. Topik ini hanya membahas kebijakan IAM, yang mendefinisikan tindakan kebijakan untuk operasi API bidang kontrol dan bidang data. Lihat juga [AWS IoT Core kebijakan](iot-policies.md).









## AWS kebijakan terkelola: AWSIo TConfig Akses
<a name="security-iam-awsmanpol-AWSIoTConfigAccess"></a>





Anda dapat melampirkan kebijakan `AWSIoTConfigAccess` ke identitas IAM Anda.



Kebijakan ini memberikan izin identitas terkait yang memungkinkan akses ke semua operasi AWS IoT konfigurasi. Kebijakan ini dapat memengaruhi pemrosesan dan penyimpanan data. Untuk melihat kebijakan ini di bagian Konsol Manajemen AWS, lihat [AWSIoTConfigAkses](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTConfigAccess$jsonEditor?section=permissions).



**Detail izin**

Kebijakan ini mencakup izin berikut.




+ `iot`— Mengambil AWS IoT data dan melakukan tindakan konfigurasi IoT.



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:AcceptCertificateTransfer",
                "iot:AddThingToThingGroup",
                "iot:AssociateTargetsWithJob",
                "iot:AttachPolicy",
                "iot:AttachPrincipalPolicy",
                "iot:AttachThingPrincipal",
                "iot:CancelCertificateTransfer",
                "iot:CancelJob",
                "iot:CancelJobExecution",
                "iot:ClearDefaultAuthorizer",
                "iot:CreateAuthorizer",
                "iot:CreateCertificateFromCsr",
                "iot:CreateJob",
                "iot:CreateKeysAndCertificate",
                "iot:CreateOTAUpdate",
                "iot:CreatePolicy",
                "iot:CreatePolicyVersion",
                "iot:CreateRoleAlias",
                "iot:CreateStream",
                "iot:CreateThing",
                "iot:CreateThingGroup",
                "iot:CreateThingType",
                "iot:CreateTopicRule",
                "iot:DeleteAuthorizer",
                "iot:DeleteCACertificate",
                "iot:DeleteCertificate",
                "iot:DeleteJob",
                "iot:DeleteJobExecution",
                "iot:DeleteOTAUpdate",
                "iot:DeletePolicy",
                "iot:DeletePolicyVersion",
                "iot:DeleteRegistrationCode",
                "iot:DeleteRoleAlias",
                "iot:DeleteStream",
                "iot:DeleteThing",
                "iot:DeleteThingGroup",
                "iot:DeleteThingType",
                "iot:DeleteTopicRule",
                "iot:DeleteV2LoggingLevel",
                "iot:DeprecateThingType",
                "iot:DescribeAuthorizer",
                "iot:DescribeCACertificate",
                "iot:DescribeCertificate",
                "iot:DescribeDefaultAuthorizer",
                "iot:DescribeEndpoint",
                "iot:DescribeEventConfigurations",
                "iot:DescribeIndex",
                "iot:DescribeJob",
                "iot:DescribeJobExecution",
                "iot:DescribeRoleAlias",
                "iot:DescribeStream",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:DescribeThingRegistrationTask",
                "iot:DescribeThingType",
                "iot:DetachPolicy",
                "iot:DetachPrincipalPolicy",
                "iot:DetachThingPrincipal",
                "iot:DisableTopicRule",
                "iot:EnableTopicRule",
                "iot:GetEffectivePolicies",
                "iot:GetIndexingConfiguration",
                "iot:GetJobDocument",
                "iot:GetLoggingOptions",
                "iot:GetOTAUpdate",
                "iot:GetPolicy",
                "iot:GetPolicyVersion",
                "iot:GetRegistrationCode",
                "iot:GetTopicRule",
                "iot:GetV2LoggingOptions",
                "iot:ListAttachedPolicies",
                "iot:ListAuthorizers",
                "iot:ListCACertificates",
                "iot:ListCertificates",
                "iot:ListCertificatesByCA",
                "iot:ListIndices",
                "iot:ListJobExecutionsForJob",
                "iot:ListJobExecutionsForThing",
                "iot:ListJobs",
                "iot:ListOTAUpdates",
                "iot:ListOutgoingCertificates",
                "iot:ListPolicies",
                "iot:ListPolicyPrincipals",
                "iot:ListPolicyVersions",
                "iot:ListPrincipalPolicies",
                "iot:ListPrincipalThings",
                "iot:ListRoleAliases",
                "iot:ListStreams",
                "iot:ListTargetsForPolicy",
                "iot:ListThingGroups",
                "iot:ListThingGroupsForThing",
                "iot:ListThingPrincipals",
                "iot:ListThingRegistrationTaskReports",
                "iot:ListThingRegistrationTasks",
                "iot:ListThings",
                "iot:ListThingsInThingGroup",
                "iot:ListThingTypes",
                "iot:ListTopicRules",
                "iot:ListV2LoggingLevels",
                "iot:RegisterCACertificate",
                "iot:RegisterCertificate",
                "iot:RegisterThing",
                "iot:RejectCertificateTransfer",
                "iot:RemoveThingFromThingGroup",
                "iot:ReplaceTopicRule",
                "iot:SearchIndex",
                "iot:SetDefaultAuthorizer",
                "iot:SetDefaultPolicyVersion",
                "iot:SetLoggingOptions",
                "iot:SetV2LoggingLevel",
                "iot:SetV2LoggingOptions",
                "iot:StartThingRegistrationTask",
                "iot:StopThingRegistrationTask",
                "iot:TestAuthorization",
                "iot:TestInvokeAuthorizer",
                "iot:TransferCertificate",
                "iot:UpdateAuthorizer",
                "iot:UpdateCACertificate",
                "iot:UpdateCertificate",
                "iot:UpdateEventConfigurations",
                "iot:UpdateIndexingConfiguration",
                "iot:UpdateRoleAlias",
                "iot:UpdateStream",
                "iot:UpdateThing",
                "iot:UpdateThingGroup",
                "iot:UpdateThingGroupsForThing",
                "iot:UpdateAccountAuditConfiguration",
                "iot:DescribeAccountAuditConfiguration",
                "iot:DeleteAccountAuditConfiguration",
                "iot:StartOnDemandAuditTask",
                "iot:CancelAuditTask",
                "iot:DescribeAuditTask",
                "iot:ListAuditTasks",
                "iot:CreateScheduledAudit",
                "iot:UpdateScheduledAudit",
                "iot:DeleteScheduledAudit",
                "iot:DescribeScheduledAudit",
                "iot:ListScheduledAudits",
                "iot:ListAuditFindings",
                "iot:CreateSecurityProfile",
                "iot:DescribeSecurityProfile",
                "iot:UpdateSecurityProfile",
                "iot:DeleteSecurityProfile",
                "iot:AttachSecurityProfile",
                "iot:DetachSecurityProfile",
                "iot:ListSecurityProfiles",
                "iot:ListSecurityProfilesForTarget",
                "iot:ListTargetsForSecurityProfile",
                "iot:ListActiveViolations",
                "iot:ListViolationEvents",
                "iot:ValidateSecurityProfileBehaviors"
            ],
            "Resource": "*"
        }
    ]
}
```

## AWS kebijakan terkelola: AWSIo TConfig ReadOnlyAccess
<a name="security-iam-awsmanpol-AWSIoTConfigReadOnlyAccess"></a>





Anda dapat melampirkan kebijakan `AWSIoTConfigReadOnlyAccess` ke identitas IAM Anda.



Kebijakan ini memberikan izin identitas terkait yang memungkinkan akses hanya-baca ke semua operasi konfigurasi. AWS IoT Untuk melihat kebijakan ini di Konsol Manajemen AWS, lihat [AWSIoTConfigReadOnlyAccess](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTConfigReadOnlyAccess$jsonEditor?section=permissions).



**Detail izin**

Kebijakan ini mencakup izin berikut.




+ `iot`— Lakukan operasi read-only dari tindakan konfigurasi IoT.



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:DescribeAuthorizer",
                "iot:DescribeCACertificate",
                "iot:DescribeCertificate",
                "iot:DescribeDefaultAuthorizer",
                "iot:DescribeEndpoint",
                "iot:DescribeEventConfigurations",
                "iot:DescribeIndex",
                "iot:DescribeJob",
                "iot:DescribeJobExecution",
                "iot:DescribeRoleAlias",
                "iot:DescribeStream",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:DescribeThingRegistrationTask",
                "iot:DescribeThingType",
                "iot:GetEffectivePolicies",
                "iot:GetIndexingConfiguration",
                "iot:GetJobDocument",
                "iot:GetLoggingOptions",
                "iot:GetOTAUpdate",
                "iot:GetPolicy",
                "iot:GetPolicyVersion",
                "iot:GetRegistrationCode",
                "iot:GetTopicRule",
                "iot:GetV2LoggingOptions",
                "iot:ListAttachedPolicies",
                "iot:ListAuthorizers",
                "iot:ListCACertificates",
                "iot:ListCertificates",
                "iot:ListCertificatesByCA",
                "iot:ListIndices",
                "iot:ListJobExecutionsForJob",
                "iot:ListJobExecutionsForThing",
                "iot:ListJobs",
                "iot:ListOTAUpdates",
                "iot:ListOutgoingCertificates",
                "iot:ListPolicies",
                "iot:ListPolicyPrincipals",
                "iot:ListPolicyVersions",
                "iot:ListPrincipalPolicies",
                "iot:ListPrincipalThings",
                "iot:ListRoleAliases",
                "iot:ListStreams",
                "iot:ListTargetsForPolicy",
                "iot:ListThingGroups",
                "iot:ListThingGroupsForThing",
                "iot:ListThingPrincipals",
                "iot:ListThingRegistrationTaskReports",
                "iot:ListThingRegistrationTasks",
                "iot:ListThings",
                "iot:ListThingsInThingGroup",
                "iot:ListThingTypes",
                "iot:ListTopicRules",
                "iot:ListV2LoggingLevels",
                "iot:SearchIndex",
                "iot:TestAuthorization",
                "iot:TestInvokeAuthorizer",
                "iot:DescribeAccountAuditConfiguration",
                "iot:DescribeAuditTask",
                "iot:ListAuditTasks",
                "iot:DescribeScheduledAudit",
                "iot:ListScheduledAudits",
                "iot:ListAuditFindings",
                "iot:DescribeSecurityProfile",
                "iot:ListSecurityProfiles",
                "iot:ListSecurityProfilesForTarget",
                "iot:ListTargetsForSecurityProfile",
                "iot:ListActiveViolations",
                "iot:ListViolationEvents",
                "iot:ValidateSecurityProfileBehaviors"
            ],
            "Resource": "*"
        }
    ]
}
```

## AWS kebijakan terkelola: AWSIo TData Akses
<a name="security-iam-awsmanpol-AWSIoTDataAccess"></a>





Anda dapat melampirkan kebijakan `AWSIoTDataAccess` ke identitas IAM Anda.



Kebijakan ini memberikan izin identitas terkait yang memungkinkan akses ke semua operasi AWS IoT data. Operasi data mengirim data melalui protokol MQTT atau HTTP. Untuk melihat kebijakan ini di Konsol Manajemen AWS, lihat [https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDataAccess?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDataAccess?section=permissions).



**Detail izin**

Kebijakan ini mencakup izin berikut.




+ `iot`— Ambil AWS IoT data dan izinkan akses penuh ke tindakan AWS IoT pengiriman pesan.



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect",
                "iot:Publish",
                "iot:Subscribe",
                "iot:Receive",
                "iot:GetThingShadow",
                "iot:UpdateThingShadow",
                "iot:DeleteThingShadow",
                "iot:ListNamedShadowsForThing"
            ],
            "Resource": "*"
        }
    ]
}
```

## AWS kebijakan terkelola: AWSIo TFull Akses
<a name="security-iam-awsmanpol-AWSIoTFullAccess"></a>





Anda dapat melampirkan kebijakan `AWSIoTFullAccess` ke identitas IAM Anda.



Kebijakan ini memberikan izin identitas terkait yang memungkinkan akses ke semua operasi AWS IoT konfigurasi dan pesan. Untuk melihat kebijakan ini di Konsol Manajemen AWS, lihat [https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTFullAccess?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTFullAccess?section=permissions).



**Detail izin**

Kebijakan ini mencakup izin berikut.




+ `iot`— Ambil AWS IoT data dan izinkan akses penuh ke AWS IoT konfigurasi dan tindakan pengiriman pesan.
+ `iotjobsdata`— Ambil data AWS IoT Jobs dan izinkan akses penuh ke operasi API pesawat data AWS IoT Jobs.



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:*",
                "iotjobsdata:*"
            ],
            "Resource": "*"
        }
    ]
}
```

## AWS kebijakan terkelola: AWSIo TLogging
<a name="security-iam-awsmanpol-AWSIoTLogging"></a>





Anda dapat melampirkan kebijakan `AWSIoTLogging` ke identitas IAM Anda.



Kebijakan ini memberikan izin identitas terkait yang memungkinkan akses untuk membuat grup Amazon CloudWatch Logs dan mengalirkan log ke grup. Kebijakan ini dilampirkan pada peran CloudWatch pencatatan Anda. Untuk melihat kebijakan ini di Konsol Manajemen AWS, lihat [https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTLogging?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTLogging?section=permissions).



**Detail izin**

Kebijakan ini mencakup izin berikut.




+ `logs`— Ambil CloudWatch log. Juga memungkinkan pembuatan grup CloudWatch Log dan streaming log ke grup.



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:PutMetricFilter",
                "logs:PutRetentionPolicy",
                "logs:GetLogEvents",
                "logs:DeleteLogStream"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

## AWS kebijakan terkelola: AWSIo TOTAUpdate
<a name="security-iam-awsmanpol-AWSIoTOTAUpdate"></a>





Anda dapat melampirkan kebijakan `AWSIoTOTAUpdate` ke identitas IAM Anda.



Kebijakan ini memberikan izin identitas terkait yang memungkinkan akses untuk membuat AWS IoT lowongan, pekerjaan penandatanganan AWS IoT kode, dan menjelaskan pekerjaan penandatangan AWS kode. Untuk melihat kebijakan ini di Konsol Manajemen AWS, lihat [`AWSIoTOTAUpdate`.](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTOTAUpdate?section=permissions)



**Detail izin**

Kebijakan ini mencakup izin berikut.




+ `iot`— Buat AWS IoT pekerjaan dan pekerjaan penandatanganan kode.
+ `signer`— Lakukan pembuatan pekerjaan penandatangan AWS kode.



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "iot:CreateJob",
            "signer:DescribeSigningJob"
        ],
        "Resource": "*"
    }
}
```

## AWS kebijakan terkelola: AWSIo TRule Tindakan
<a name="security-iam-awsmanpol-AWSIoTRuleActions"></a>





Anda dapat melampirkan kebijakan `AWSIoTRuleActions` ke identitas IAM Anda.



Kebijakan ini memberikan izin identitas terkait yang memungkinkan akses ke semua Layanan AWS s yang didukung dalam tindakan AWS IoT aturan. Untuk melihat kebijakan ini di Konsol Manajemen AWS, lihat [https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTRuleActions?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTRuleActions?section=permissions).



**Detail izin**

Kebijakan ini mencakup izin berikut.




+ `iot`- Lakukan tindakan untuk menerbitkan pesan tindakan aturan.
+ `dynamodb`- Masukkan pesan ke dalam tabel DynamoDB atau membagi pesan menjadi beberapa kolom tabel DynamoDB.
+ `s3`- Simpan objek di ember Amazon S3.
+ `kinesis`- Kirim pesan ke objek aliran Amazon Kinesis.
+ `firehose`- Masukkan catatan dalam objek aliran Firehose.
+ `cloudwatch`- Ubah status CloudWatch alarm atau kirim data pesan ke CloudWatch metrik.
+ `sns`- Lakukan operasi untuk mempublikasikan pemberitahuan menggunakan Amazon SNS. Operasi ini mencakup topik AWS IoT SNS.
+ `sqs`- Masukkan pesan untuk ditambahkan ke antrian SQS.
+ `es`- Kirim pesan ke OpenSearch layanan Layanan.



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "dynamodb:PutItem",
            "kinesis:PutRecord",
            "iot:Publish",
            "s3:PutObject",
            "sns:Publish",
            "sqs:SendMessage*",
            "cloudwatch:SetAlarmState",
            "cloudwatch:PutMetricData",
            "es:ESHttpPut",
            "firehose:PutRecord"
        ],
        "Resource": "*"
    }
}
```

## AWS kebijakan terkelola: AWSIo TThings Pendaftaran
<a name="security-iam-awsmanpol-AWSIoTThingsRegistration"></a>





Anda dapat melampirkan kebijakan `AWSIoTThingsRegistration` ke identitas IAM Anda.



Kebijakan ini memberikan izin identitas terkait yang memungkinkan akses untuk mendaftarkan sesuatu secara massal menggunakan API. `StartThingRegistrationTask` Kebijakan ini dapat memengaruhi pemrosesan dan penyimpanan data. Untuk melihat kebijakan ini di Konsol Manajemen AWS, lihat [https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTThingsRegistration?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTThingsRegistration?section=permissions).



**Detail izin**

Kebijakan ini mencakup izin berikut.




+ `iot`- Lakukan tindakan untuk membuat sesuatu dan melampirkan kebijakan dan sertifikat saat mendaftar secara massal.



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:AddThingToThingGroup",
                "iot:AttachPolicy",
                "iot:AttachPrincipalPolicy",
                "iot:AttachThingPrincipal",
                "iot:CreateCertificateFromCsr",
                "iot:CreatePolicy",
                "iot:CreateThing",
                "iot:DescribeCertificate",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:DescribeThingType",
                "iot:DetachPolicy",
                "iot:DetachThingPrincipal",
                "iot:GetPolicy",
                "iot:ListAttachedPolicies",
                "iot:ListPolicyPrincipals",
                "iot:ListPrincipalPolicies",
                "iot:ListPrincipalThings",
                "iot:ListTargetsForPolicy",
                "iot:ListThingGroupsForThing",
                "iot:ListThingPrincipals",
                "iot:RegisterCertificate",
                "iot:RegisterThing",
                "iot:RemoveThingFromThingGroup",
                "iot:UpdateCertificate",
                "iot:UpdateThing",
                "iot:UpdateThingGroupsForThing",
                "iot:AddThingToBillingGroup",
                "iot:DescribeBillingGroup",
                "iot:RemoveThingFromBillingGroup"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```





## AWS IoT pembaruan kebijakan AWS terkelola
<a name="security-iam-awsmanpol-updates"></a>



Lihat detail tentang pembaruan kebijakan AWS terkelola AWS IoT sejak layanan ini mulai melacak perubahan ini. Untuk peringatan otomatis tentang perubahan pada halaman ini, berlangganan umpan RSS di halaman Riwayat AWS IoT dokumen.




| Ubah | Deskripsi | Date | 
| --- | --- | --- | 
|  [AWSIoTFullAkses](#security-iam-awsmanpol-AWSIoTFullAccess) — Perbarui ke kebijakan yang ada  |  AWS IoT menambahkan izin baru untuk memungkinkan pengguna mengakses operasi API bidang data AWS IoT Jobs menggunakan protokol HTTP. Awalan kebijakan IAM baru,`iotjobsdata:`, memberi Anda kontrol akses berbutir lebih halus untuk mengakses titik akhir bidang data AWS IoT Jobs. Untuk operasi API bidang kontrol, Anda masih menggunakan `iot:` awalan. Untuk informasi selengkapnya, lihat [AWS IoT Core kebijakan untuk protokol HTTPS](iot-data-plane-jobs.md#iot-jobs-data-http).  | Mei 11, 2022 | 
|  AWS IoT mulai melacak perubahan  |  AWS IoT mulai melacak perubahan untuk kebijakan AWS terkelolanya.  | Mei 11, 2022 | 

# Memecahkan masalah AWS IoT identitas dan akses
<a name="security_iam_troubleshoot"></a>

Gunakan informasi berikut untuk membantu Anda mendiagnosis dan memperbaiki masalah umum yang mungkin Anda temui saat bekerja dengan AWS IoT dan IAM.

**Topics**
+ [Saya tidak berwenang untuk melakukan tindakan di AWS IoT](#security_iam_troubleshoot-no-permissions)
+ [Saya tidak berwenang untuk melakukan iam: PassRole](#security_iam_troubleshoot-passrole)
+ [Saya ingin mengizinkan orang di luar saya Akun AWS untuk mengakses AWS IoT sumber daya saya](#security_iam_troubleshoot-cross-account-access)

## Saya tidak berwenang untuk melakukan tindakan di AWS IoT
<a name="security_iam_troubleshoot-no-permissions"></a>

Jika Anda menerima pesan kesalahan bahwa Anda tidak memiliki otorisasi untuk melakukan tindakan, kebijakan Anda harus diperbarui agar Anda dapat melakukan tindakan tersebut.

Contoh kesalahan berikut terjadi ketika pengguna IAM,`mateojackson`, mencoba menggunakan konsol untuk melihat detail tentang sumber daya sesuatu tetapi tidak memiliki `iot:DescribeThing` izin.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: iot:DescribeThing on resource: MyIoTThing
```

Dalam hal ini, kebijakan untuk `mateojackson` pengguna harus diperbarui untuk mengizinkan akses ke sumber daya benda dengan menggunakan `iot:DescribeThing` tindakan. 

Jika Anda memerlukan bantuan, hubungi AWS administrator Anda. Administrator Anda adalah orang yang memberi Anda kredensial masuk.

Menggunakan AWS IoT Device Advisor  
Jika Anda menggunakan AWS IoT Device Advisor, contoh error berikut terjadi saat pengguna `mateojackson` mencoba menggunakan konsol untuk melihat detail tentang definisi suite tetapi tidak memiliki `iotdeviceadvisor:GetSuiteDefinition` izin.  

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: iotdeviceadvisor:GetSuiteDefinition on resource: MySuiteDefinition
```
Dalam hal ini, kebijakan untuk `mateojackson` pengguna harus diperbarui untuk mengizinkan akses ke *`MySuiteDefinition`* sumber daya menggunakan `iotdeviceadvisor:GetSuiteDefinition` tindakan.

## Saya tidak berwenang untuk melakukan iam: PassRole
<a name="security_iam_troubleshoot-passrole"></a>

Jika Anda menerima kesalahan yang tidak diizinkan untuk melakukan `iam:PassRole` tindakan, kebijakan Anda harus diperbarui agar Anda dapat meneruskan peran AWS IoT.

Beberapa Layanan AWS memungkinkan Anda untuk meneruskan peran yang ada ke layanan tersebut alih-alih membuat peran layanan baru atau peran terkait layanan. Untuk melakukannya, Anda harus memiliki izin untuk meneruskan peran ke layanan.

Contoh kesalahan berikut terjadi ketika pengguna IAM bernama `marymajor` mencoba menggunakan konsol tersebut untuk melakukan tindakan di AWS IoT. Namun, tindakan tersebut memerlukan layanan untuk mendapatkan izin yang diberikan oleh peran layanan. Mary tidak memiliki izin untuk meneruskan peran tersebut pada layanan.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

Dalam kasus ini, kebijakan Mary harus diperbarui agar dia mendapatkan izin untuk melakukan tindakan `iam:PassRole` tersebut.

Jika Anda memerlukan bantuan, hubungi AWS administrator Anda. Administrator Anda adalah orang yang memberi Anda kredensial masuk.

## Saya ingin mengizinkan orang di luar saya Akun AWS untuk mengakses AWS IoT sumber daya saya
<a name="security_iam_troubleshoot-cross-account-access"></a>

Anda dapat membuat peran yang dapat digunakan pengguna di akun lain atau orang-orang di luar organisasi Anda untuk mengakses sumber daya Anda. Anda dapat menentukan siapa saja yang dipercaya untuk mengambil peran tersebut. Untuk layanan yang mendukung kebijakan berbasis sumber daya atau daftar kontrol akses (ACLs), Anda dapat menggunakan kebijakan tersebut untuk memberi orang akses ke sumber daya Anda.

Untuk mempelajari selengkapnya, periksa referensi berikut:
+ Untuk mempelajari apakah AWS IoT mendukung fitur-fitur ini, lihat[Bagaimana AWS IoT bekerja dengan IAM](security_iam_service-with-iam.md).
+ Untuk mempelajari cara menyediakan akses ke sumber daya Anda di seluruh sumber daya Akun AWS yang Anda miliki, lihat [Menyediakan akses ke pengguna IAM di pengguna lain Akun AWS yang Anda miliki](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) di *Panduan Pengguna IAM*.
+ Untuk mempelajari cara menyediakan akses ke sumber daya Anda kepada pihak ketiga Akun AWS, lihat [Menyediakan akses yang Akun AWS dimiliki oleh pihak ketiga](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html) dalam *Panduan Pengguna IAM*.
+ Untuk mempelajari cara memberikan akses melalui federasi identitas, lihat [Menyediakan akses ke pengguna terautentikasi eksternal (federasi identitas)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) dalam *Panduan Pengguna IAM*.
+ *Untuk mempelajari perbedaan antara menggunakan peran dan kebijakan berbasis sumber daya untuk akses lintas akun, lihat [Akses sumber daya lintas akun di IAM di Panduan Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html).*

# Pembuatan Log dan Pemantauan
<a name="security-logging"></a>

Pemantauan adalah bagian penting dari menjaga keandalan, ketersediaan, dan kinerja AWS IoT dan AWS solusi Anda. Anda harus mengumpulkan data pemantauan dari semua bagian AWS solusi Anda sehingga Anda dapat lebih mudah men-debug kegagalan multi-titik, jika terjadi. Untuk informasi tentang prosedur pencatatan dan pemantauan, lihat [Pemantauan AWS IoT](monitoring_overview.md)

## Alat Pemantauan
<a name="monitoring_automated_manual"></a>

AWS menyediakan alat yang dapat Anda gunakan untuk memantau AWS IoT. Anda dapat mengonfigurasi beberapa alat ini agar melakukan pemantauan untuk Anda. Beberapa alat memerlukan intervensi manual. Sebaiknya Anda mengotomatisasi tugas pemantauan sebanyak mungkin.

### Alat Pemantauan Otomatis
<a name="monitoring_automated_tools"></a>

Anda dapat menggunakan alat pemantauan otomatis berikut untuk menonton AWS IoT dan melaporkan ketika ada sesuatu yang salah:
+ ** CloudWatch Alarm Amazon** — Tonton satu metrik selama periode waktu yang Anda tentukan, dan lakukan satu atau beberapa tindakan berdasarkan nilai metrik relatif terhadap ambang batas tertentu selama beberapa periode waktu. Tindakannya adalah pemberitahuan yang dikirim ke topik Amazon Simple Notification Service (Amazon SNS) atau kebijakan Amazon EC2 Auto Scaling. CloudWatch alarm tidak memanggil tindakan hanya karena mereka berada dalam keadaan tertentu. Status harus diubah dan dipelihara selama jangka waktu tertentu. Untuk informasi selengkapnya, lihat [Pantau AWS IoT alarm dan metrik menggunakan Amazon CloudWatch](monitoring-cloudwatch.md).
+ **Amazon CloudWatch Logs** — Pantau, simpan, dan akses file log Anda dari AWS CloudTrail atau sumber lain. Amazon CloudWatch Logs juga memungkinkan Anda melihat langkah-langkah penting yang diambil oleh kasus pengujian AWS IoT Device Advisor, peristiwa yang dihasilkan, dan pesan MQTT yang dikirim dari perangkat Anda atau AWS IoT Core selama eksekusi pengujian. Log ini memungkinkan untuk men-debug dan mengambil tindakan korektif pada perangkat Anda. Untuk informasi selengkapnya, lihat [Monitor AWS IoT menggunakan CloudWatch Log](cloud-watch-logs.md) Untuk informasi selengkapnya tentang menggunakan Amazon CloudWatch, lihat [Memantau File Log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html) di *Panduan CloudWatch Pengguna Amazon*.
+ ** CloudWatch Acara Amazon** — Cocokkan peristiwa dan arahkan ke satu atau beberapa fungsi atau aliran target untuk membuat perubahan, menangkap informasi status, dan mengambil tindakan korektif. Untuk informasi selengkapnya, lihat [Apa Itu CloudWatch Acara Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchEvents.html) *di Panduan CloudWatch Pengguna Amazon*.
+ **AWS CloudTrail Pemantauan Log** - Bagikan file log antar akun, pantau file CloudTrail log secara real time dengan mengirimkannya ke CloudWatch Log, menulis aplikasi pemrosesan log di Java, dan validasi bahwa file log Anda tidak berubah setelah pengiriman oleh CloudTrail. Untuk informasi selengkapnya, lihat [Pencatatan panggilan AWS IoT API menggunakan AWS CloudTrail](iot-using-cloudtrail.md) dan juga [Bekerja dengan File CloudTrail Log](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-working-with-log-files.html) di *Panduan AWS CloudTrail Pengguna*. 

### Alat Pemantauan Manual
<a name="monitoring_manual_tools"></a>

Bagian penting lainnya dari pemantauan AWS IoT melibatkan pemantauan secara manual item-item yang tidak tercakup oleh CloudWatch alarm. Dasbor AWS IoT CloudWatch,, dan konsol AWS layanan lainnya memberikan at-a-glance tampilan status AWS lingkungan Anda. Kami menyarankan Anda juga memeriksa file log AWS IoT.
+ AWS IoT dasbor menunjukkan:
  + Sertifikat CA
  + Sertifikat
  + Kebijakan
  + Aturan
  + Benda
+ CloudWatch halaman rumah menunjukkan:
  + Alarm dan status saat ini.
  + Grafik alarm dan sumber daya.
  + Status kesehatan layanan.

  Anda dapat menggunakan CloudWatch untuk melakukan hal berikut: 
  + Buat [dasbor yang disesuaikan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CloudWatch_Dashboards.html) untuk memantau layanan yang Anda pedulikan.
  + Data metrik grafik untuk memecahkan masalah dan menemukan tren.
  + Cari dan telusuri semua metrik AWS sumber daya Anda.
  + Membuat dan mengedit alarm untuk menerima notifikasi terkait masalah.

# Validasi kepatuhan untuk Core AWS IoT
<a name="compliance"></a>

Untuk mempelajari apakah an Layanan AWS berada dalam lingkup program kepatuhan tertentu, lihat [Layanan AWS di Lingkup oleh Program Kepatuhan Layanan AWS](https://aws.amazon.com/compliance/services-in-scope/) dan pilih program kepatuhan yang Anda minati. Untuk informasi umum, lihat [Program AWS Kepatuhan Program AWS](https://aws.amazon.com/compliance/programs/) .

Anda dapat mengunduh laporan audit pihak ketiga menggunakan AWS Artifact. Untuk informasi selengkapnya, lihat [Mengunduh Laporan di AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html) .

Tanggung jawab kepatuhan Anda saat menggunakan Layanan AWS ditentukan oleh sensitivitas data Anda, tujuan kepatuhan perusahaan Anda, dan hukum dan peraturan yang berlaku. Untuk informasi selengkapnya tentang tanggung jawab kepatuhan Anda saat menggunakan Layanan AWS, lihat [Dokumentasi AWS Keamanan](https://docs.aws.amazon.com/security/).

# Ketahanan dalam IoT Core AWS
<a name="disaster-recovery-resiliency"></a>

Infrastruktur AWS global dibangun di sekitar Wilayah AWS s dan Availability Zone. Wilayah AWS s menyediakan beberapa Availability Zone yang terpisah secara fisik dan terisolasi, yang terhubung dengan latensi rendah, throughput tinggi, dan jaringan yang sangat redundan. Dengan Zona Ketersediaan, Anda dapat merancang dan mengoperasikan aplikasi dan basis data yang secara otomatis melakukan failover di antara Zona Ketersediaan tanpa gangguan. Zona Ketersediaan memiliki ketersediaan dan toleransi kesalahan yang lebih baik, dan dapat diskalakan dibandingkan infrastruktur biasa yang terdiri dari satu atau beberapa pusat data. 

Untuk informasi selengkapnya tentang Wilayah AWS s dan Availability Zone, lihat [Infrastruktur AWS Global](https://aws.amazon.com/about-aws/global-infrastructure/).

AWS IoT Core menyimpan informasi tentang perangkat Anda di registri perangkat. Ini juga menyimpan sertifikat CA, sertifikat perangkat, dan data bayangan perangkat. Jika terjadi kegagalan perangkat keras atau jaringan, data ini secara otomatis direplikasi di seluruh Availability Zone tetapi tidak di seluruh Wilayah.

AWS IoT Core menerbitkan peristiwa MQTT saat registri perangkat diperbarui. Anda dapat menggunakan pesan-pesan ini untuk mencadangkan data registri Anda dan menyimpannya di suatu tempat, seperti tabel DynamoDB. Anda bertanggung jawab untuk menyimpan sertifikat yang AWS IoT Core dibuat untuk Anda atau yang Anda buat sendiri. Device shadow menyimpan data status tentang perangkat Anda dan dapat di-resent saat perangkat kembali online. AWS IoT Device Advisor menyimpan informasi tentang konfigurasi rangkaian pengujian Anda. Data ini secara otomatis direplikasi jika terjadi kegagalan perangkat keras atau jaringan.

AWS IoT Core sumber daya bersifat spesifik Wilayah dan tidak direplikasi Wilayah AWS kecuali Anda secara khusus melakukannya.

Untuk informasi tentang praktik terbaik Keamanan, lihat[Praktik terbaik keamanan di AWS IoT Core](security-best-practices.md).

# Menggunakan AWS IoT Core dengan antarmuka VPC endpoint
<a name="IoTCore-VPC"></a>

[Dengan AWS IoT Core, Anda dapat membuat titik [akhir bidang kontrol IoT dan titik akhir](https://docs.aws.amazon.com//iot/latest/developerguide/connect-to-iot.html#iot-service-endpoint-intro)[data IoT dalam cloud pribadi virtual (VPC) Anda dengan menggunakan titik akhir](https://docs.aws.amazon.com//iot/latest/developerguide/iot-connect-devices.html) VPC antarmuka.](https://docs.aws.amazon.com//vpc/latest/userguide/vpce-interface.html#create-interface-endpoint) Endpoint VPC antarmuka didukung oleh AWS PrivateLink, sebuah AWS teknologi yang dapat Anda gunakan untuk mengakses layanan yang berjalan AWS dengan menggunakan alamat IP pribadi. Untuk informasi selengkapnya, lihat [Amazon Virtual Private Cloud](https://docs.aws.amazon.com//AmazonVPC/latest/UserGuide/VPC_Introduction.html). 

Untuk menghubungkan perangkat di lapangan pada jaringan jarak jauh, seperti jaringan perusahaan ke VPC Amazon Anda, lihat opsi yang tercantum dalam matriks konektivitas [Network-to-Amazon VPC](https://docs.aws.amazon.com//whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html). 

**Topics**
+ [Membuat titik akhir VPC untuk bidang kontrol AWS IoT Core](#Create-VPC-endpoints-CP)
+ [Membuat titik akhir VPC untuk bidang data AWS IoT Core](#Create-VPC-endpoints)
+ [Membuat titik akhir VPC untuk penyedia kredensi AWS IoT Core](#Create-VPC-endpoints-credential-provider)
+ [Membuat titik akhir antarmuka VPC Amazon](#Create-VPC-endpoints-core-create-vpc)
+ [Konfigurasikan zona yang dihosting pribadi](#connect-iot-core-create-phz-lns)
+ [Mengontrol Akses ke AWS IoT Core lebih dari titik akhir VPC](#Control-VPC-access)
+ [Batasan](#VPC-limitations)
+ [Menskalakan titik akhir VPC dengan AWS IoT Core](#Scaling-VPC-endpoints)
+ [Menggunakan domain khusus dengan titik akhir VPC](#VPC-custom-domains)
+ [Ketersediaan titik akhir VPC untuk AWS IoT Core](#VPC-availability)
+ [Menggunakan tunneling AWS IoT Device Management aman dengan titik akhir VPC antarmuka](IoTCore-ST-VPC.md)

## Membuat titik akhir VPC untuk bidang kontrol AWS IoT Core
<a name="Create-VPC-endpoints-CP"></a>

Anda dapat membuat titik akhir VPC untuk API bidang AWS IoT Core kontrol untuk menghubungkan perangkat Anda ke AWS IoT layanan dan layanan lainnya. AWS Untuk memulai dengan titik akhir VPC, [buat antarmuka VPC endpoint](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint) dan pilih sebagai layanan. AWS IoT Core AWS Jika Anda menggunakan CLI, hubungi terlebih dahulu [describe-vpc-endpoint-services](https://docs.aws.amazon.com//cli/latest/reference/ec2/describe-vpc-endpoint-services.html)untuk memastikan bahwa Anda memilih Availability Zone yang AWS IoT Core ada di area khusus Anda. Wilayah AWS Misalnya, di us-east-1, perintah ini akan terlihat seperti:

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.iot.api
```

Lihat petunjuk terperinci di bawah ini untuk [Membuat titik akhir antarmuka VPC Amazon](#Create-VPC-endpoints-core-create-vpc) untuk AWS IoT Core bidang kontrol.

## Membuat titik akhir VPC untuk bidang data AWS IoT Core
<a name="Create-VPC-endpoints"></a>

Anda dapat membuat titik akhir VPC untuk API bidang AWS IoT Core data untuk menghubungkan perangkat Anda ke AWS IoT layanan dan layanan lainnya. AWS Untuk memulai dengan titik akhir VPC, [buat antarmuka VPC endpoint](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint) dan pilih sebagai layanan. AWS IoT Core AWS Jika Anda menggunakan CLI, hubungi terlebih dahulu [describe-vpc-endpoint-services](https://docs.aws.amazon.com//cli/latest/reference/ec2/describe-vpc-endpoint-services.html)untuk memastikan bahwa Anda memilih Availability Zone yang AWS IoT Core ada di area khusus Anda. Wilayah AWS Misalnya, di us-east-1, perintah ini akan terlihat seperti:

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.iot.data
```

**catatan**  
Fitur VPC untuk membuat catatan DNS secara otomatis dinonaktifkan. Untuk terhubung ke titik akhir ini, Anda harus membuat catatan DNS Pribadi secara manual. Untuk informasi selengkapnya tentang catatan DNS VPC Pribadi, lihat DNS [pribadi untuk titik akhir](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#vpce-private-dns) antarmuka. Untuk informasi selengkapnya tentang batasan AWS IoT Core VPC, lihat. [Batasan](#VPC-limitations)

Untuk menghubungkan klien MQTT ke antarmuka titik akhir VPC:
+ Anda harus membuat catatan DNS secara manual di zona host pribadi yang dilampirkan ke VPC Anda. Untuk memulai, lihat [Membuat zona host pribadi](https://docs.aws.amazon.com//Route53/latest/DeveloperGuide/hosted-zone-private-creating.html). 
+ Dalam zona host pribadi Anda, buat catatan alias untuk setiap IP antarmuka network elastis untuk titik akhir VPC. Jika Anda memiliki beberapa antarmuka jaringan IPs untuk beberapa titik akhir VPC, buat catatan DNS tertimbang dengan bobot yang sama di semua catatan tertimbang. Alamat IP ini tersedia dari panggilan [DescribeNetworkInterfaces](https://docs.aws.amazon.com//AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)API saat difilter oleh ID titik akhir VPC di bidang deskripsi.

Lihat petunjuk terperinci di bawah ini untuk [Membuat titik akhir antarmuka VPC Amazon](#Create-VPC-endpoints-core-create-vpc) dan [Mengonfigurasi zona host pribadi](#connect-iot-core-create-phz-lns) untuk AWS IoT Core bidang data.

## Membuat titik akhir VPC untuk penyedia kredensi AWS IoT Core
<a name="Create-VPC-endpoints-credential-provider"></a>

[Anda dapat membuat titik akhir VPC untuk [penyedia AWS IoT Core kredensi untuk menghubungkan perangkat menggunakan otentikasi berbasis sertifikat klien dan mendapatkan kredensyal](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html) sementara dalam format Signature Version 4. AWSAWS](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_aws-signing.html) Untuk memulai dengan titik akhir VPC untuk penyedia AWS IoT Core kredensi, jalankan perintah [create-vpc-endpoint](https://docs.aws.amazon.com//cli/latest/reference/ec2/create-vpc-endpoint.html)CLI untuk membuat titik [akhir VPC antarmuka](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint) dan pilih penyedia kredensi sebagai layanan. AWS IoT Core AWS Untuk memastikan bahwa Anda memilih Availability Zone yang AWS IoT Core ada di area khusus Anda Wilayah AWS, jalankan [describe-vpc-endpoint-services](https://docs.aws.amazon.com//cli/latest/reference/ec2/describe-vpc-endpoint-services.html)perintah terlebih dahulu. Misalnya, di us-east-1, perintah ini akan terlihat seperti:

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.iot.credentials
```

**catatan**  
Fitur VPC untuk membuat catatan DNS secara otomatis dinonaktifkan. Untuk terhubung ke titik akhir ini, Anda harus membuat catatan DNS Pribadi secara manual. Untuk informasi selengkapnya tentang catatan DNS VPC Pribadi, lihat DNS [pribadi untuk titik akhir](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#vpce-private-dns) antarmuka. Untuk informasi selengkapnya tentang batasan AWS IoT Core VPC, lihat. [Batasan](#VPC-limitations)

Untuk menghubungkan klien HTTP ke antarmuka titik akhir VPC:
+ Anda harus membuat catatan DNS secara manual di zona host pribadi yang dilampirkan ke VPC Anda. Untuk memulai, lihat [Membuat zona host pribadi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html). 
+ Dalam zona host pribadi Anda, buat catatan alias untuk setiap IP antarmuka network elastis untuk titik akhir VPC. Jika Anda memiliki beberapa antarmuka jaringan IPs untuk beberapa titik akhir VPC, buat catatan DNS tertimbang dengan bobot yang sama di semua catatan tertimbang. Alamat IP ini tersedia dari panggilan [DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)API saat difilter oleh ID titik akhir VPC di bidang deskripsi.

Lihat petunjuk terperinci di bawah ini untuk [Membuat titik akhir antarmuka VPC Amazon](#Create-VPC-endpoints-core-create-vpc) dan [Mengonfigurasi zona host pribadi](#connect-iot-core-create-phz-lns) untuk AWS IoT Core penyedia kredensi.

## Membuat titik akhir antarmuka VPC Amazon
<a name="Create-VPC-endpoints-core-create-vpc"></a>

Anda dapat membuat titik akhir VPC antarmuka untuk terhubung ke AWS layanan yang didukung oleh. AWS PrivateLink Gunakan prosedur berikut untuk membuat titik akhir VPC antarmuka yang terhubung ke bidang AWS IoT Core data atau AWS IoT Core penyedia kredensi. Untuk informasi selengkapnya, lihat [Mengakses AWS layanan menggunakan titik akhir VPC antarmuka](https://docs.aws.amazon.com//vpc/latest/privatelink/create-interface-endpoint.html). 

**catatan**  
Proses untuk membuat titik akhir antarmuka VPC Amazon untuk bidang AWS IoT Core data dan penyedia AWS IoT Core kredensi serupa, tetapi Anda harus membuat perubahan spesifik titik akhir untuk membuat koneksi berfungsi.

 **[https://console.aws.amazon.com/vpc/home#/endpoints](https://console.aws.amazon.com/vpc/home#/endpoints)** 

1. **Arahkan ke konsol [VPC](https://console.aws.amazon.com/vpc/home#/endpoints) **Endpoints**, di bawah **Virtual private cloud** di menu sebelah kiri, pilih **Endpoints lalu Create Endpoint**.** 

1. Di halaman **Buat titik akhir**, tentukan informasi berikut.
   + Pilih **Layanan AWS s** untuk **kategori Layanan**. 
   + Untuk **Nama Layanan**, cari dengan memasukkan kata kunci`iot`. Dalam daftar `iot` layanan yang ditampilkan, pilih titik akhir. 

     Jika Anda membuat titik akhir VPC untuk bidang AWS IoT Core kontrol, pilih titik akhir API bidang AWS IoT Core kontrol untuk Anda. Wilayah AWS Titik akhir akan menjadi format`com.amazonaws.region.iot.api`. 

     Jika Anda membuat titik akhir VPC untuk bidang AWS IoT Core data, pilih titik akhir API bidang AWS IoT Core data untuk Wilayah Anda. Titik akhir akan menjadi format`com.amazonaws.region.iot.data`. 

     Jika Anda membuat titik akhir VPC untuk penyedia AWS IoT Core kredensi, pilih titik akhir penyedia AWS IoT Core kredensyal untuk Wilayah Anda. Titik akhir akan menjadi format`com.amazonaws.region.iot.credentials`. 

     Jika Anda membuat titik akhir VPC untuk wilayah Federal Information Processing Standard (FIPS), pilih endpoint API FIPS untuk wilayah Anda. Wilayah AWS Titik akhir akan menjadi format`com.amazonaws.region.iot-fips.api`. Ini hanya untuk pesawat kontrol.
**catatan**  
Nama layanan untuk pesawat AWS IoT Core data di Wilayah Tiongkok akan menjadi `cn.com.amazonaws.region.iot.data` format. Nama layanan untuk pesawat AWS IoT Core kontrol di Wilayah Tiongkok akan menjadi `com.amazonaws.region.iot.api` format. 
   + Untuk **VPC** dan **Subnet**, pilih VPC tempat Anda ingin membuat titik akhir, dan Availability Zones (AZs) tempat Anda ingin membuat jaringan endpoint.
   + Untuk **Aktifkan nama DNS**, pastikan bahwa **Aktifkan untuk titik akhir ini** tidak dipilih untuk bidang AWS IoT Core data dan penyedia AWS IoT Core kredensi. Baik pesawat AWS IoT Core data maupun penyedia AWS IoT Core kredensi belum mendukung nama DNS pribadi.

     Untuk bidang AWS IoT Core kontrol, **Aktifkan nama DNS** dipilih secara default. Ini memastikan bahwa setiap permintaan ke titik akhir publik bidang AWS IoT Core kontrol akan dirutekan melalui titik akhir VPC sebagai gantinya. Saat ini diaktifkan, Anda tidak perlu mengonfigurasi zona host yang diprivat.
   + Untuk **grup Keamanan**, pilih grup keamanan yang ingin Anda kaitkan dengan antarmuka jaringan titik akhir.
   + Secara opsional, Anda dapat menambah atau menghapus tag. Tag adalah pasangan nama-nilai yang Anda gunakan untuk mengasosiasikan dengan titik akhir Anda. 

1. **Untuk membuat titik akhir VPC Anda, pilih Buat titik akhir.** 

Setelah Anda membuat AWS PrivateLink titik akhir, di tab **Detail** titik akhir Anda, Anda akan melihat daftar nama DNS. Anda dapat menggunakan salah satu nama DNS yang Anda buat di bagian ini untuk [mengonfigurasi zona host pribadi Anda](#connect-iot-core-create-phz-lns). Jika Anda menggunakan bidang AWS IoT Core kontrol, Anda tidak perlu mengkonfigurasi zona host pribadi.

## Konfigurasikan zona yang dihosting pribadi
<a name="connect-iot-core-create-phz-lns"></a>

**catatan**  
Jika Anda menggunakan bidang AWS IoT Core kontrol dan **Aktifkan nama DNS** dipilih, Anda tidak perlu mengonfigurasi zona host pribadi. Jika Anda menonaktifkannya, Anda harus mengikuti prosedur ini untuk mengonfigurasi zona host pribadi.

Anda dapat menggunakan salah satu nama DNS yang Anda buat di bagian sebelumnya untuk mengonfigurasi zona host pribadi Anda.

 **Untuk pesawat AWS IoT Core data** 

Nama DNS harus berupa nama konfigurasi domain atau titik `IoT:Data-ATS` akhir Anda. Contoh nama DNS dapat berupa:` xxx-ats.data.iot.region.amazonaws.com`. 

 **Untuk penyedia AWS IoT Core kredensi** 

Nama DNS harus menjadi titik `iot:CredentialProvider` akhir Anda. Contoh nama DNS dapat berupa:` xxxx.credentials.iot.region.amazonaws.com`. 

 **Untuk pesawat AWS IoT Core kontrol** 

Nama DNS harus menjadi titik akhir bidang AWS IoT Core kontrol Anda. Contoh nama DNS untuk bidang AWS IoT Core kontrol adalah` xxxx.api.iot.region.amazonaws.com`. 

**catatan**  
Proses untuk mengonfigurasi zona host pribadi untuk bidang AWS IoT Core data dan penyedia AWS IoT Core kredensi serupa, tetapi Anda harus membuat perubahan spesifik titik akhir untuk membuat koneksi berfungsi.

### Buat zona yang dihosting pribadi
<a name="connect-iot-core-create-phz-lns-private-hosted-zone"></a>

 **Untuk membuat zona host pribadi menggunakan konsol Route 53** 

1. Arahkan ke konsol [Route 53](https://console.aws.amazon.com/route53/v2/hostedzones#/) **Zona yang dihosting** dan pilih **Buat zona yang dihosting**. 

1. Di halaman **Buat zona yang dihosting**, tentukan informasi berikut.
   + Untuk **nama Domain**, masukkan alamat titik akhir untuk titik akhir `iot:Data-ATS` atau titik `iot:CredentialProvider` akhir Anda. Perintah AWS CLI berikut menunjukkan cara mendapatkan titik akhir melalui jaringan publik:`aws iot describe-endpoint --endpoint-type iot:Data-ATS`, atau. `aws iot describe-endpoint --endpoint-type iot:CredentialProvider` 
**catatan**  
Jika Anda menggunakan domain kustom, lihat [Menggunakan domain kustom dengan titik akhir VPC](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html#VPC-custom-domains). Domain kustom tidak didukung untuk penyedia AWS IoT Core kredensi.
   + Untuk **Jenis**, pilih **Zona yang dihosting pribadi**. 
   + Secara opsional, Anda dapat menambahkan atau menghapus tag untuk dikaitkan dengan zona yang dihosting.

1. Untuk membuat zona host pribadi Anda, pilih **Buat zona yang dihosting**. 

Untuk informasi selengkapnya, lihat [Membuat zona yang dihosting pribadi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html). 

### Buat catatan
<a name="connect-iot-core-create-phz-lns-create-record"></a>

Setelah Anda membuat zona host pribadi, Anda dapat membuat catatan yang memberi tahu DNS bagaimana Anda ingin lalu lintas dialihkan ke domain tersebut. 

 **Untuk membuat catatan** 

1. Dalam daftar zona host yang ditampilkan, pilih zona host pribadi yang Anda buat sebelumnya dan pilih **Buat catatan**. 

1. Gunakan metode wizard untuk membuat catatan. Jika konsol menyajikan metode **Quick create**, pilih **Beralih ke wizard**. 

1. **Pilih **kebijakan **Perutean Sederhana** untuk Perutean** dan kemudian pilih Berikutnya.** 

1. Di halaman **Konfigurasikan catatan**, pilih **Tentukan catatan sederhana**. 

1. Di halaman **Tentukan catatan sederhana**:
   + Untuk **nama Rekam**, masukkan `iot:Data-ATS` titik akhir atau titik `iot:CredentialProvider` akhir. Ini harus sama dengan nama zona host pribadi.
   + Untuk **jenis Rekam**, jika Anda hanya menginginkan IPv4 dukungan, pertahankan nilainya sebagai`A - Routes traffic to an IPv4 address and some AWS resources`. Jika Anda hanya menginginkan IPv6 dukungan, pertahankan nilainya`AAAA - Routes traffic to an IPv6 address and some AWS resources`. Jika Anda menginginkan dukungan dual-stack (keduanya IPv4 dan IPv6), buat dua catatan (dan `AAAA` di zona yang dihosting dengan **nama Rekam `A`** dan lalu lintas **Nilai/Rute** yang sama ke. 
   + Untuk **lalu lintas Nilai/Rute ke**, pilih **Alias ke titik akhir VPC**. Kemudian pilih **Wilayah** Anda dan kemudian pilih titik akhir yang Anda buat sebelumnya, seperti yang dijelaskan [Membuat titik akhir antarmuka VPC Amazon](#Create-VPC-endpoints-core-create-vpc) dari daftar titik akhir yang ditampilkan.

1. Pilih **Tentukan catatan sederhana** untuk membuat catatan Anda.

## Mengontrol Akses ke AWS IoT Core lebih dari titik akhir VPC
<a name="Control-VPC-access"></a>

[Anda dapat membatasi akses perangkat AWS IoT Core agar diizinkan hanya melalui titik akhir VPC dengan menggunakan tombol konteks kondisi VPC.](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html) AWS IoT Core mendukung kunci konteks terkait VPC berikut:
+  [SourceVpc](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpc) 
+  [SourceVpce](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpce) 
+  [VPCSourceIp](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-vpcsourceip) 

**catatan**  
AWS IoT Core tidak mendukung [kebijakan Titik Akhir untuk titik akhir VPC](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-access.html#vpc-endpoint-policies). 

Misalnya, kebijakan berikut memberikan izin untuk terhubung AWS IoT Core menggunakan ID klien yang cocok dengan nama benda, dan memublikasikan ke topik apa pun yang diawali dengan nama benda, bergantung pada perangkat yang terhubung ke titik akhir VPC dengan ID Titik Akhir VPC tertentu. Kebijakan ini akan menolak upaya koneksi ke titik akhir data IoT publik Anda.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpce": "vpce-1a2b3c4d"
            }
        }
            
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}/*"
            ]
        }
    ]
}
```

## Batasan
<a name="VPC-limitations"></a>

[Titik akhir VPC saat ini didukung untuk titik akhir [bidang AWS IoT Core kontrol, titik akhir AWS IoT Core data, dan titik](https://docs.aws.amazon.com//iot/latest/developerguide/connect-to-iot.html#iot-service-endpoint-intro)[akhir penyedia kredensyal](https://docs.aws.amazon.com//iot/latest/developerguide/iot-connect-devices.html#iot-connect-device-endpoints).AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.htm) Titik akhir VPC hanya didukung untuk titik akhir [Federal Information Processing Standard (FIPS) saat menggunakan bidang kontrol](https://docs.aws.amazon.com//iot/latest/developerguide/iot-connect-fips.html). AWS IoT Core 

### Keterbatasan titik akhir VPC bidang kontrol IoT
<a name="VPC-limitations-iot-control"></a>

Bagian ini mencakup batasan titik akhir VPC bidang kontrol IoT.
+ Titik akhir VPC hanya akan melayani sertifikat ATS.
+ Domain kustom tidak didukung untuk titik akhir bidang kontrol.
+ Untuk informasi mengenai kebijakan keamanan FIPS, lihat Kebijakan [keamanan FIPS](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/describe-ssl-policies.html#fips-security-policies). 

### Keterbatasan titik akhir VPC data IoT
<a name="VPC-limitations-iot-data"></a>

Bagian ini mencakup batasan titik akhir VPC data IoT.
+ MQTT menjaga periode hidup dibatasi hingga 230 detik. Menjaga periode hidup lebih lama dari itu akan secara otomatis dikurangi menjadi 230 detik.
+ Setiap titik akhir VPC mendukung 100.000 total perangkat yang terhubung secara bersamaan. Jika Anda membutuhkan lebih banyak koneksi, lihat[Menskalakan titik akhir VPC dengan AWS IoT Core](#Scaling-VPC-endpoints).
+ Titik akhir VPC hanya akan melayani [sertifikat ATS](https://docs.aws.amazon.com//iot/latest/developerguide/server-authentication.html), kecuali untuk domain khusus.
+  [Kebijakan titik akhir VPC](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-access.html) tidak didukung.
+ Untuk titik akhir VPC yang dibuat untuk bidang AWS IoT Core data, AWS IoT Core tidak mendukung penggunaan catatan DNS publik zona atau regional.

### Batasan titik akhir penyedia kredensyal
<a name="VPC-limitations-credential-provider"></a>

Bagian ini mencakup batasan titik akhir VPC penyedia kredensyal.
+ Titik akhir VPC hanya akan melayani sertifikat [ATS](https://docs.aws.amazon.com//iot/latest/developerguide/server-authentication.html).
+  [Kebijakan titik akhir VPC](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-access.html) tidak didukung.
+ Domain kustom tidak didukung untuk titik akhir penyedia kredensyal.
+ Untuk titik akhir VPC yang dibuat untuk penyedia AWS IoT Core kredensi, AWS IoT Core tidak mendukung penggunaan catatan DNS publik zona atau regional.

## Menskalakan titik akhir VPC dengan AWS IoT Core
<a name="Scaling-VPC-endpoints"></a>

AWS IoT Core Endpoint VPC antarmuka dibatasi hingga 100.000 perangkat yang terhubung melalui satu titik akhir antarmuka. Jika kasus penggunaan Anda memerlukan lebih banyak koneksi bersamaan ke broker, sebaiknya gunakan beberapa titik akhir VPC dan merutekan perangkat Anda secara manual di seluruh titik akhir antarmuka Anda. Saat membuat catatan DNS pribadi untuk merutekan lalu lintas ke titik akhir VPC Anda, pastikan untuk membuat catatan tertimbang sebanyak Anda memiliki titik akhir VPC untuk mendistribusikan lalu lintas di beberapa titik akhir Anda. 

## Menggunakan domain khusus dengan titik akhir VPC
<a name="VPC-custom-domains"></a>

Jika Anda ingin menggunakan domain kustom dengan titik akhir VPC, Anda harus membuat catatan nama domain kustom Anda di zona yang dihosting pribadi dan membuat catatan perutean di Route53. Untuk informasi selengkapnya, lihat [Membuat zona yang dihosting pribadi](https://docs.aws.amazon.com//Route53/latest/DeveloperGuide/hosted-zone-private-creating.html). 

**catatan**  
Domain khusus hanya didukung untuk titik akhir AWS IoT Core data.

## Ketersediaan titik akhir VPC untuk AWS IoT Core
<a name="VPC-availability"></a>

AWS IoT Core [Titik akhir VPC antarmuka tersedia di semua AWS IoT Core wilayah yang didukung.](https://aws.amazon.com//about-aws/global-infrastructure/regional-product-services/) AWS IoT Core Titik akhir VPC antarmuka untuk penyedia AWS IoT Core kredensi tidak didukung di Wilayah Tiongkok dan. AWS GovCloud (US) Regions

# Menggunakan tunneling AWS IoT Device Management aman dengan titik akhir VPC antarmuka
<a name="IoTCore-ST-VPC"></a>

AWS IoT Device Management tunneling aman mendukung antarmuka titik akhir VPC. Anda dapat menggunakan titik akhir VPC untuk menjaga lalu lintas antara VPC Anda dan di AWS IoT Secure Tunneling dalam AWS jaringan, tanpa memerlukan gateway internet, perangkat NAT, koneksi VPN, atau koneksi. AWS Direct Connect 

Endpoint VPC Antarmuka didukung oleh [AWS PrivateLink](https://docs.aws.amazon.com//vpc/latest/privatelink/what-is-privatelink.html), teknologi yang memungkinkan Anda mengakses layanan secara pribadi dengan menggunakan alamat IP pribadi. Untuk informasi selengkapnya, lihat [Mengakses AWS layanan menggunakan titik akhir VPC antarmuka di Panduan](https://docs.aws.amazon.com//vpc/latest/privatelink/create-interface-endpoint.html). AWS PrivateLink 

**Topics**
+ [Prasyarat](#Create-ST-VPC-endpoints-prereq)
+ [Menerima notifikasi terowongan melalui titik akhir VPC](#ST-VPC-Receive-notifications)
+ [Membuat titik akhir VPC untuk tunneling yang aman](#Create-ST-VPC-endpoints-Create)
+ [Mengkonfigurasi kebijakan titik akhir VPC di Server Proxy](#Create-ST-VPC-endpoints-Configure)
+ [Langkah selanjutnya](#Create-ST-VPC-endpoints-Next)

## Prasyarat
<a name="Create-ST-VPC-endpoints-prereq"></a>

Sebelum Anda membuat titik akhir VPC AWS IoT Secure Tunneling, verifikasi bahwa Anda memiliki yang berikut:
+  AWS Akun dengan izin yang diperlukan untuk membuat titik akhir VPC.
+ VPC di akun Anda AWS .
+ Memahami konsep terowongan yang AWS IoT Device Management aman.
+ Keakraban dengan kebijakan AWS Identity and Access Management titik akhir VPC dan (IAM)

## Menerima notifikasi terowongan melalui titik akhir VPC
<a name="ST-VPC-Receive-notifications"></a>

Untuk menerima notifikasi terowongan melalui titik akhir VPC, perangkat Anda dapat terhubung ke pesawat AWS IoT Core data melalui titik akhir VPC dan berlangganan topik MQTT cadangan tunneling aman.

Untuk petunjuk tentang cara membuat dan mengonfigurasi titik akhir VPC di bidang AWS IoT Core data, lihat [Menggunakan dengan titik akhir VPC AWS IoT Core antarmuka](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html) di Panduan Pengembang. AWS IoT 

## Membuat titik akhir VPC untuk tunneling yang aman
<a name="Create-ST-VPC-endpoints-Create"></a>

Anda dapat membuat titik akhir VPC untuk bidang kontrol tunneling aman dan server proxy.

**Untuk membuat titik akhir VPC untuk tunneling yang aman**

1. Ikuti langkah-langkah dalam [Membuat titik akhir antarmuka di Panduan](https://docs.aws.amazon.com//vpc/latest/privatelink/create-interface-endpoint.html) Pengembang Amazon VPC

1. Untuk **nama Layanan**, pilih salah satu opsi berikut berdasarkan jenis titik akhir Anda:

**Bidang kontrol**
   + Standar: `com.amazonaws.<region>.iot.tunneling.api` 
   + FIPS (tersedia di wilayah FIPS): `com.amazonaws.<region>.iot-fips.tunneling.api` 

**Server proksi**
   + Standar: `com.amazonaws.<region>.iot.tunneling.data` 
   + FIPS (tersedia di wilayah FIPS): `com.amazonaws.<region>.iot-fips.tunneling.data` 

   Ganti *<region>* dengan Anda Wilayah AWS. Misalnya, `us-east-1`. 

1. Selesaikan langkah-langkah yang tersisa dalam proses pembuatan titik akhir VPC sesuai dengan kebutuhan jaringan Anda.

## Mengkonfigurasi kebijakan titik akhir VPC di Server Proxy
<a name="Create-ST-VPC-endpoints-Configure"></a>

Selain otorisasi berbasis token akses klien yang digunakan untuk mengotorisasi koneksi ke terowongan, Anda dapat menggunakan kebijakan titik akhir VPC untuk lebih membatasi bagaimana perangkat dapat menggunakan titik akhir VPC untuk terhubung ke Server Proxy Tunneling Aman. Kebijakan titik akhir VPC mengikuti sintaks mirip IAM dan dikonfigurasi pada titik akhir VPC itu sendiri.

Perhatikan bahwa satu-satunya tindakan IAM yang didukung untuk kebijakan titik akhir VPC server proxy adalah. `iot:ConnectToTunnel` 

Di bawah ini adalah contoh kebijakan titik akhir VPC yang berbeda.

### Contoh kebijakan titik akhir VPC server proxy
<a name="w2aac17c35c31c15b9"></a>

Contoh berikut menunjukkan konfigurasi kebijakan titik akhir VPC Server Proxy untuk kasus penggunaan umum.

**Example - Kebijakan default**  
Kebijakan ini memungkinkan perangkat dalam VPC Anda untuk terhubung ke terowongan apa pun di tempat titik akhir dibuat, di seluruh akun Wilayah AWS mana pun. AWS   

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": "*"
        }
    ]
}
```

**Example - Batasi akses ke akun tertentu AWS**  
Kebijakan ini memungkinkan titik akhir VPC untuk terhubung hanya ke terowongan di akun tertentu. AWS   

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": [
                "arn:aws:iot:us-east-1:111122223333:tunnel/*",
                "arn:aws:iot:us-east-1:444455556666:tunnel/*"
            ]
        }
    ]
}
```

**Example - Batasi koneksi dengan titik akhir terowongan**  
Anda dapat membatasi akses titik akhir VPC untuk hanya mengizinkan perangkat terhubung ke sumber atau ujung tujuan terowongan.  
Sumber saja:  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iot:ClientMode": "source"
                }
            }
        }
    ]
}
```

Tujuan saja:

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iot:ClientMode": "destination"
                }
            }
        }
    ]
}
```

**Example - Batasi akses berdasarkan tag sumber daya**  
Kebijakan ini memungkinkan titik akhir VPC untuk terhubung hanya ke terowongan yang ditandai dengan pasangan nilai kunci tertentu.  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Environment": "Production"
                }
            }
        }
    ]
}
```

**Example - Kondisi kebijakan gabungan**  
Kebijakan ini menunjukkan penggabungan beberapa elemen kebijakan. Ini memungkinkan koneksi ke terowongan apa pun di AWS akun tertentu, tetapi hanya jika terowongan ditandai dengan `AllowConnectionsThroughPrivateLink` set ke `true` dan klien tidak terhubung ke ujung tujuan terowongan.  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": [
                "arn:aws:iot:us-east-1:111122223333:tunnel/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AllowConnectionsThroughPrivateLink": "true"
                }
            }
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": [
                "arn:aws:iot:us-east-1:111122223333:tunnel/*"
            ],
            "Condition": {
                "StringEquals": {
                    "iot:ClientMode": "destination"
                }
            }
        }
    ]
}
```

## Langkah selanjutnya
<a name="Create-ST-VPC-endpoints-Next"></a>

Setelah Anda membuat dan mengonfigurasi titik akhir VPC AWS IoT Secure Tunneling, pertimbangkan hal berikut:
+ Uji konfigurasi titik akhir VPC Anda dengan menghubungkan perangkat melalui titik akhir.
+ Pantau penggunaan titik akhir VPC melalui metrik. Amazon CloudWatch 
+ Tinjau dan perbarui kebijakan titik akhir VPC Anda sesuai kebutuhan untuk persyaratan keamanan Anda.

Untuk informasi selengkapnya tentang terowongan AWS IoT Device Management aman, lihat. [AWS IoT Secure Tunneling](https://docs.aws.amazon.com//iot/latest/developerguide/secure-tunneling.html) 

# Keamanan infrastruktur di AWS IoT
<a name="infrastructure-security"></a>

Sebagai kumpulan layanan terkelola, AWS IoT dilindungi oleh prosedur keamanan jaringan AWS global yang dijelaskan dalam whitepaper [Amazon Web Services: Tinjauan Proses Keamanan](https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf).

Anda menggunakan panggilan API yang AWS dipublikasikan untuk mengakses AWS IoT melalui jaringan. Klien harus mendukung Keamanan Lapisan Pengangkutan (TLS) 1.2 atau versi yang lebih baru. Klien juga harus support suite cipher dengan Perfect Forward Secrecy (PFS) seperti Ephemeral Diffie-Hellman (DHE) atau Elliptic Curve Ephemeral Diffie-Hellman (ECDHE). Sebagian besar sistem modern, misalnya Java 7 dan versi yang lebih baru, mendukung mode ini. Untuk informasi selengkapnya, lihat [Keamanan transportasi di AWS IoT Core](transport-security.md).

Permintaan harus ditandatangani menggunakan access key ID dan secret access key yang terkait dengan prinsipal IAM. Atau Anda dapat menggunakan [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) untuk membuat kredensial keamanan sementara untuk menandatangani permintaan.

# Pemantauan keamanan armada produksi atau perangkat dengan Core AWS IoT
<a name="security-monitoring"></a>

Armada IoT dapat terdiri dari sejumlah besar perangkat yang memiliki kemampuan beragam, berumur panjang, dan didistribusikan secara geografis. Karakteristik ini membuat pengaturan armada rumit dan rentan terhadap kesalahan. Dan karena perangkat sering dibatasi dalam daya komputasi, memori, dan kemampuan penyimpanan, ini membatasi penggunaan enkripsi dan bentuk keamanan lainnya pada perangkat itu sendiri. Selain itu, perangkat sering menggunakan perangkat lunak dengan kerentanan yang diketahui. Faktor-faktor ini membuat armada IoT menjadi target yang menarik bagi peretas dan menyulitkan untuk mengamankan armada perangkat Anda secara berkelanjutan.

AWS IoT Device Defender mengatasi tantangan ini dengan menyediakan alat untuk mengidentifikasi masalah keamanan dan penyimpangan dari praktik terbaik. Anda dapat menggunakan AWS IoT Device Defender untuk menganalisis, mengaudit, dan memantau perangkat yang terhubung untuk mendeteksi perilaku abnormal, dan mengurangi risiko keamanan. AWS IoT Device Defender dapat mengaudit armada perangkat untuk memastikan mereka mematuhi praktik terbaik keamanan dan mendeteksi perilaku abnormal pada perangkat. Hal ini memungkinkan untuk menerapkan kebijakan keamanan yang konsisten di seluruh armada AWS IoT perangkat Anda dan merespons dengan cepat ketika perangkat dikompromikan. Untuk informasi selengkapnya, lihat [AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html).

AWS IoT Device Advisor mendorong pembaruan dan menambal armada Anda sesuai kebutuhan. AWS IoT Device Advisor memperbarui kasus uji secara otomatis. Kasus uji yang Anda pilih selalu dengan versi terbaru. Untuk informasi selengkapnya, lihat [Penasihat Perangkat](device-advisor.md).

# Praktik terbaik keamanan di AWS IoT Core
<a name="security-best-practices"></a>

Bagian ini berisi informasi tentang praktik terbaik keamanan untuk AWS IoT Core. Untuk informasi tentang aturan keamanan untuk solusi IoT Industri, lihat [Sepuluh aturan emas keamanan untuk solusi IoT](https://aws.amazon.com/blogs/iot/ten-security-golden-rules-for-industrial-iot-solutions/) Industri.

## Melindungi koneksi MQTT di AWS IoT
<a name="secure-mqtt"></a>

[AWS IoT Core](https://aws.amazon.com/iot-core/)adalah layanan cloud terkelola yang memungkinkan perangkat yang terhubung berinteraksi dengan aplikasi cloud dan perangkat lain dengan mudah dan aman. AWS IoT Core mendukung HTTP, [WebSocket](https://en.wikipedia.org/wiki/WebSocket), dan [MQTT](https://en.wikipedia.org/wiki/MQTT), protokol komunikasi ringan yang dirancang khusus untuk mentolerir koneksi intermiten. Jika Anda terhubung AWS IoT menggunakan MQTT, setiap koneksi Anda harus dikaitkan dengan pengenal yang dikenal sebagai ID klien. Klien MQTT secara IDs unik mengidentifikasi koneksi MQTT. Jika koneksi baru dibuat menggunakan ID klien yang sudah diklaim untuk koneksi lain, broker AWS IoT pesan menjatuhkan koneksi lama untuk memungkinkan koneksi baru. Klien IDs harus unik dalam masing-masing Akun AWS dan masing-masing Wilayah AWS. Ini berarti bahwa Anda tidak perlu menegakkan keunikan global klien IDs di luar Anda Akun AWS atau di seluruh Wilayah di dalam Anda. Akun AWS

Dampak dan tingkat keparahan terputusnya koneksi MQTT pada armada perangkat Anda bergantung pada banyak faktor. Ini termasuk:
+ Kasus penggunaan Anda (misalnya, data yang dikirim perangkat Anda AWS IoT, berapa banyak data, dan frekuensi pengiriman data).
+ [Konfigurasi klien MQTT Anda (misalnya, pengaturan penyambungan kembali otomatis, pengaturan waktu mundur terkait, dan penggunaan sesi persisten MQTT).](mqtt.md#mqtt-persistent-sessions)
+ Kendala sumber daya perangkat.
+ Akar penyebab pemutusan hubungan, agresivitas, dan ketekunannya.

Untuk menghindari konflik ID klien dan potensi dampak negatifnya, pastikan bahwa setiap perangkat atau aplikasi seluler memiliki kebijakan AWS IoT atau IAM yang membatasi klien mana yang IDs dapat digunakan untuk koneksi MQTT ke broker pesan. AWS IoT Misalnya, Anda dapat menggunakan kebijakan IAM untuk mencegah perangkat menutup sambungan perangkat lain secara tidak sengaja dengan menggunakan ID klien yang sudah digunakan. Untuk informasi selengkapnya, lihat [Otorisasi](iot-authorization.md).

Semua perangkat di armada Anda harus memiliki kredensyal dengan hak istimewa yang hanya mengizinkan tindakan yang dimaksudkan, yang mencakup (namun tidak terbatas pada) tindakan AWS IoT MQTT seperti memublikasikan pesan atau berlangganan topik dengan cakupan dan konteks tertentu. Kebijakan izin khusus dapat bervariasi untuk kasus penggunaan Anda. Identifikasi kebijakan izin yang paling memenuhi persyaratan bisnis dan keamanan Anda.

Untuk menyederhanakan pembuatan dan pengelolaan kebijakan izin, Anda dapat menggunakan [AWS IoT Core variabel kebijakan](iot-policy-variables.md) dan variabel [kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html). Variabel kebijakan dapat ditempatkan dalam kebijakan dan ketika kebijakan dievaluasi, variabel diganti dengan nilai yang berasal dari permintaan perangkat. Dengan menggunakan variabel kebijakan, Anda dapat membuat satu kebijakan untuk memberikan izin ke beberapa perangkat. Anda dapat mengidentifikasi variabel kebijakan yang relevan untuk kasus penggunaan Anda berdasarkan konfigurasi AWS IoT akun Anda, mekanisme otentikasi, dan protokol jaringan yang digunakan dalam menghubungkan ke broker AWS IoT pesan. Namun, untuk menulis kebijakan izin terbaik, pertimbangkan secara spesifik kasus penggunaan dan [model ancaman](https://en.wikipedia.org/wiki/Threat_model) Anda.

Misalnya, jika Anda mendaftarkan perangkat di AWS IoT registri, Anda dapat menggunakan [variabel kebijakan hal](thing-policy-variables.md) dalam AWS IoT kebijakan untuk memberikan atau menolak izin berdasarkan properti benda seperti nama benda, tipe benda, dan nilai atribut benda. Nama benda diperoleh dari ID klien dalam pesan koneksi MQTT yang dikirim ketika sesuatu terhubung ke. AWS IoT[Variabel kebijakan hal diganti ketika sesuatu terhubung ke AWS IoT lebih dari MQTT menggunakan otentikasi timbal balik TLS atau MQTT melalui protokol menggunakan identitas Amazon Cognito yang diautentikasi. WebSocket ](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identities.html) Anda dapat menggunakan [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html)API untuk melampirkan sertifikat dan identitas Amazon Cognito yang diautentikasi ke suatu hal. `iot:Connection.Thing.ThingName`adalah variabel kebijakan hal yang berguna untuk menegakkan pembatasan ID klien. Contoh AWS IoT kebijakan berikut memerlukan nama benda terdaftar untuk digunakan sebagai ID klien untuk koneksi MQTT ke broker pesan: AWS IoT 

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "iot:Connect",
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			]
		}
	]
}
```

Jika Anda ingin mengidentifikasi konflik ID klien yang sedang berlangsung, Anda dapat mengaktifkan dan menggunakan [CloudWatch Log untuk AWS IoT](cloud-watch-logs.md). Untuk setiap koneksi MQTT yang terputus oleh broker AWS IoT pesan karena konflik ID klien, catatan log yang serupa dengan berikut ini dihasilkan:

```
{
    "timestamp": "2019-04-28 22:05:30.105",
    "logLevel": "ERROR",
    "traceId": "02a04a93-0b3a-b608-a27c-1ae8ebdb032a",
    "accountId": "123456789012",
    "status": "Failure",
    "eventType": "Disconnect",
    "protocol": "MQTT",
    "clientId": "clientId01",
    "principalId": "1670fcf6de55adc1930169142405c4a2493d9eb5487127cd0091ca0193a3d3f6",
    "sourceIp": "203.0.113.1",
    "sourcePort": 21335,
    "reason": "DUPLICATE_CLIENT_ID",
    "details": "A new connection was established with the same client ID"
}
```

Anda dapat menggunakan [filter CloudWatch Log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html) seperti `{$.reason= "DUPLICATE_CLIENT_ID" }` untuk mencari contoh konflik ID klien atau untuk mengatur [filter CloudWatch metrik](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringPolicyExamples.html) dan CloudWatch alarm terkait untuk pemantauan dan pelaporan berkelanjutan.

Anda dapat menggunakan [AWS IoT Device Defender](https://aws.amazon.com/iot-device-defender/) untuk mengidentifikasi kebijakan yang terlalu permisif AWS IoT dan IAM. AWS IoT Device Defender juga menyediakan pemeriksaan audit yang memberi tahu Anda jika beberapa perangkat dalam armada Anda terhubung ke broker AWS IoT pesan menggunakan ID klien yang sama.

Anda dapat menggunakan AWS IoT Device Advisor untuk memvalidasi bahwa perangkat Anda dapat terhubung dengan andal AWS IoT Core dan mengikuti praktik terbaik keamanan.

### Lihat juga
<a name="mqtt-security-see-also"></a>
+ [AWS IoT Core](https://aws.amazon.com/iot-core/)
+ [AWS IoT Fitur Keamanan](authentication.md)
+ [AWS IoT Core variabel kebijakan](iot-policy-variables.md)
+ [Variabel Kebijakan IAM](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_variables.html)
+ [Identitas Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identities.html)
+ [AWS IoT Pembela Perangkat](https://aws.amazon.com/iot-device-defender/)
+ [CloudWatch Log untuk AWS IoT](cloud-watch-logs.md)

## Jaga agar jam perangkat Anda tetap sinkron
<a name="device-clock"></a>

Penting untuk memiliki waktu yang akurat di perangkat Anda. Sertifikat X.509 memiliki tanggal dan waktu kedaluwarsa. Jam di perangkat Anda digunakan untuk memverifikasi bahwa sertifikat server masih valid. Jika Anda sedang membangun perangkat IoT komersial, ingatlah bahwa produk Anda mungkin disimpan untuk waktu yang lama sebelum dijual. Jam waktu nyata dapat melayang selama waktu ini dan baterai dapat habis, sehingga pengaturan waktu di pabrik tidak cukup.

Untuk sebagian besar sistem, ini berarti bahwa perangkat lunak perangkat harus menyertakan klien protokol waktu jaringan (NTP). Perangkat harus menunggu hingga disinkronkan dengan server NTP sebelum mencoba untuk terhubung. AWS IoT Core Jika ini tidak memungkinkan, sistem harus menyediakan cara bagi pengguna untuk mengatur waktu perangkat sehingga koneksi berikutnya berhasil.

Setelah perangkat disinkronkan dengan server NTP, perangkat dapat membuka koneksi dengan. AWS IoT Core Berapa banyak kemiringan jam yang diizinkan tergantung pada apa yang Anda coba lakukan dengan koneksi. 

## Validasi sertifikat server
<a name="validate-server-cert"></a>

Hal pertama yang dilakukan perangkat untuk berinteraksi AWS IoT adalah membuka koneksi yang aman. Saat Anda menghubungkan perangkat Anda AWS IoT, pastikan bahwa Anda sedang berbicara AWS IoT dan bukan server lain yang meniru identitas AWS IoT. Setiap AWS IoT server disediakan dengan sertifikat yang dikeluarkan untuk domain. `iot.amazonaws.com` Sertifikat ini dikeluarkan AWS IoT oleh otoritas sertifikat tepercaya yang memverifikasi identitas dan kepemilikan domain kami.

Salah satu hal pertama yang AWS IoT Core dilakukan ketika perangkat terhubung adalah mengirim perangkat sertifikat server. Perangkat dapat memverifikasi bahwa mereka mengharapkan untuk terhubung `iot.amazonaws.com` dan bahwa server pada akhir koneksi tersebut memiliki sertifikat dari otoritas tepercaya untuk domain itu.

Sertifikat TLS dalam format X.509 dan mencakup berbagai informasi seperti nama organisasi, lokasi, nama domain, dan masa berlaku. Periode validitas ditentukan sebagai sepasang nilai waktu yang disebut `notBefore` dan`notAfter`. Layanan seperti AWS IoT Core menggunakan periode validitas terbatas (misalnya, satu tahun) untuk sertifikat server mereka dan mulai melayani yang baru sebelum yang lama kedaluwarsa.

## Gunakan satu identitas per perangkat
<a name="cert-per-device"></a>

Gunakan satu identitas per klien. Perangkat umumnya menggunakan sertifikat klien X.509. Aplikasi web dan seluler menggunakan Identitas Amazon Cognito. Ini memungkinkan Anda menerapkan izin berbutir halus ke perangkat Anda.

Misalnya, Anda memiliki aplikasi yang terdiri dari perangkat ponsel yang menerima pembaruan status dari dua objek rumah pintar yang berbeda - bola lampu dan termostat. Bola lampu mengirimkan status tingkat baterainya, dan termostat mengirimkan pesan yang melaporkan suhu.

AWS IoT mengautentikasi perangkat secara individual dan memperlakukan setiap koneksi secara individual. Anda dapat menerapkan kontrol akses berbutir halus menggunakan kebijakan otorisasi. Anda dapat menentukan kebijakan untuk termostat yang memungkinkannya mempublikasikan ke ruang topik. Anda dapat menentukan kebijakan terpisah untuk bola lampu yang memungkinkannya mempublikasikan ke ruang topik yang berbeda. Terakhir, Anda dapat menentukan kebijakan untuk aplikasi seluler yang hanya memungkinkannya untuk terhubung dan berlangganan topik termostat dan bola lampu untuk menerima pesan dari perangkat ini.

Terapkan prinsip hak istimewa dan cakupan paling sedikit ke bawah izin per perangkat sebanyak mungkin. Semua perangkat atau pengguna harus memiliki AWS IoT kebijakan AWS IoT yang hanya memungkinkannya terhubung dengan ID klien yang dikenal, dan untuk mempublikasikan dan berlangganan serangkaian topik yang diidentifikasi dan tetap.

## Gunakan detik Wilayah AWS sebagai cadangan
<a name="use-second-region"></a>

Pertimbangkan untuk menyimpan salinan data Anda dalam sedetik Wilayah AWS sebagai cadangan. Perhatikan bahwa AWS solusi bernama [Disaster Recovery untuk AWS IoT](https://aws.amazon.com/solutions/implementations/disaster-recovery-for-aws-iot/) tidak lagi tersedia. Meskipun [GitHubperpustakaan](https://github.com/awslabs/disaster-recovery-for-aws-iot) terkait tetap dapat diakses, AWS tidak digunakan lagi pada Juli 2023 dan tidak lagi menyediakan pemeliharaan atau dukungan untuknya. Untuk menerapkan solusi Anda sendiri atau untuk menjelajahi opsi dukungan tambahan, kunjungi [Kontak AWS](https://aws.amazon.com/contact-us/). Jika ada Manajer Akun AWS Teknis yang terkait dengan akun Anda, hubungi mereka untuk meminta bantuan.

## Gunakan hanya dalam penyediaan waktu
<a name="use-jitp"></a>

Membuat dan menyediakan setiap perangkat secara manual dapat memakan waktu. AWS IoT menyediakan cara untuk mendefinisikan template ke perangkat penyediaan saat mereka pertama kali terhubung AWS IoT. Untuk informasi selengkapnya, lihat [Just-in-time penyediaan](jit-provisioning.md).

## Izin untuk menjalankan pengujian AWS IoT Device Advisor
<a name="device-advisor-perms"></a>

Templat kebijakan berikut menunjukkan izin minimum dan entitas IAM yang diperlukan untuk menjalankan kasus pengujian AWS IoT Device Advisor. [Anda harus mengganti *your-device-role-arn* dengan peran perangkat Amazon Resource Name (ARN) yang Anda buat di bawah prasyarat.](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-workflow.html#device-advisor-workflow-prereqs)

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iot:us-east-1:123456789012:thinggroup/your-thing-group",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "iotdeviceadvisor.amazonaws.com"
            }
        }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke*",
                "iam:ListRoles",
                "iot:Connect",
                "iot:CreateJob",
                "iot:DeleteJob",
                "iot:DescribeCertificate",
                "iot:DescribeEndpoint",
                "iotjobsdata:DescribeJobExecution",
                "iot:DescribeJob",
                "iot:DescribeThing",
                "iotjobsdata:GetPendingJobExecutions",
                "iot:GetPolicy",
                "iot:ListAttachedPolicies",
                "iot:ListCertificates",
                "iot:ListPrincipalPolicies",
                "iot:ListThingPrincipals",
                "iot:ListThings",
                "iot:Publish",
                "iotjobsdata:StartNextPendingJobExecution",
                "iotjobsdata:UpdateJobExecution",
                "iot:UpdateThingShadow",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents",
                "logs:PutRetentionPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "iotdeviceadvisor:*",
            "Resource": "*"
        }
    ]
}
```

## Pencegahan deputi kebingungan lintas layanan untuk Device Advisor
<a name="cross-service-confused-deputy-prevention-DA"></a>

Masalah "confused deputy" adalah masalah keamanan di mana entitas yang tidak memiliki izin untuk melakukan tindakan dapat memengaruhi entitas yang memiliki hak akses lebih tinggi untuk melakukan tindakan. Pada tahun AWS, peniruan lintas layanan dapat mengakibatkan masalah wakil yang membingungkan. Peniruan identitas lintas layanan dapat terjadi ketika satu layanan (*layanan yang dipanggil*) memanggil layanan lain (*layanan yang dipanggil*). Layanan pemanggilan dapat dimanipulasi menggunakan izinnya untuk bertindak pada sumber daya pelanggan lain dengan cara yang seharusnya tidak dilakukannya kecuali bila memiliki izin untuk mengakses. Untuk mencegah hal ini, AWS sediakan alat yang membantu Anda melindungi data Anda untuk semua layanan dengan prinsip layanan yang telah diberikan akses ke sumber daya di akun Anda. 

Sebaiknya gunakan kunci konteks kondisi [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)dan global dalam kebijakan sumber daya untuk membatasi izin yang diberikan Device Advisor kepada layanan lain ke sumber daya. Jika Anda menggunakan kedua kunci konteks kondisi global, `aws:SourceAccount` nilai dan akun dalam `aws:SourceArn` nilai harus menggunakan ID akun yang sama saat digunakan dalam pernyataan kebijakan yang sama.

Nilai `aws:SourceArn` harus ARN dari sumber definisi suite Anda. Sumber definisi suite mengacu pada rangkaian pengujian yang Anda buat dengan Device Advisor.

Cara paling efektif untuk melindungi dari masalah "confused deputy" adalah dengan menggunakan kunci konteks kondisi global `aws:SourceArn` dengan ARN lengkap sumber daya. Jika Anda tidak mengetahui ARN lengkap sumber daya atau jika Anda menentukan beberapa sumber daya, gunakan kunci kondisi konteks `aws:SourceArn` global dengan wildcard (`*`) untuk bagian ARN yang tidak diketahui. Sebagai contoh, `arn:aws:iotdeviceadvisor:*:account-id:suitedefinition/*`. 

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan `aws:SourceArn` dan kunci konteks kondisi `aws:SourceAccount` global di Device Advisor untuk mencegah masalah wakil yang membingungkan.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "ConfusedDeputyPreventionExamplePolicy",
        "Effect": "Allow",
        "Principal": {
            "Service": "iotdeviceadvisor.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "ArnLike": {
                "aws:SourceArn": "arn:aws:iotdeviceadvisor:us-east-1:123456789012:suitedefinition/ygp6rxa3tzvn"
        },
            "StringEquals": {
                "aws:SourceAccount": "123456789012"
        }
        }
    }
}
```

## AWS pelatihan dan sertifikasi
<a name="iot-security-training"></a>

Ikuti kursus berikut untuk mempelajari konsep-konsep kunci untuk AWS IoT keamanan: [AWS IoT Security Primer](https://www.aws.training/Details/Curriculum?id=42304).