

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

# 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.