Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Otentikasi kustom dengan sertifikat X.509 klien
Saat menghubungkan perangkat ke AWS IoT Core, Anda memiliki beberapa jenis otentikasi yang tersedia. Anda dapat menggunakan sertifikat X.509 klien yang dapat digunakan untuk mengotentikasi koneksi klien dan perangkat, atau menentukan otorisasi khusus untuk mengelola autentikasi klien dan logika otorisasi Anda sendiri. Topik ini mencakup cara menggunakan otentikasi khusus dengan sertifikat X.509 klien.
Menggunakan otentikasi khusus dengan X.509 sertifikat dapat membantu jika Anda telah mengotentikasi perangkat menggunakan X.509 sertifikat dan ingin melakukan validasi tambahan dan otorisasi khusus. Misalnya, jika Anda menyimpan data perangkat Anda seperti nomor seri mereka di sertifikat X.509 klien, setelah AWS IoT Core diautentikasi sertifikat X.509 klien, Anda dapat menggunakan otorisasi khusus untuk mengidentifikasi perangkat tertentu berdasarkan informasi yang disimpan di bidang sertifikat. CommonName Menggunakan otentikasi khusus dengan X.509 sertifikat dapat meningkatkan manajemen keamanan perangkat Anda saat menghubungkan perangkat ke AWS IoT Core dan memberikan lebih banyak fleksibilitas untuk mengelola autentikasi dan logika otorisasi. AWS IoT Core mendukung otentikasi khusus dengan X.509 sertifikat menggunakan X.509 sertifikat dan jenis otentikasi otorisasi kustom, yang bekerja dengan protokol MQTT dan protokol HTTPS. Untuk informasi selengkapnya tentang jenis otentikasi dan protokol aplikasi yang AWS IoT Core didukung titik akhir perangkat, lihat Proto https://docs.aws.amazon.com//iot/latest/developerguide/protocols.html kol komunikasi perangkat.
catatan
Otentikasi khusus dengan sertifikat X.509 klien tidak didukung di Wil AWS GovCloud (US) ayah.
penting
Proses untuk mengotentikasi perangkat menggunakan otentikasi khusus dengan sertifikat X.509 klien terdiri dari langkah-langkah berikut.
Langkah 1: Daftarkan sertifikat X.509 klien Anda dengan AWS IoT Core
Jika Anda belum melakukan ini, daftarkan dan aktifkan sertifikat X.509 klien Anda dengan AWS IoT Core. Jika tidak, lewati ke langkah berikutnya.
Untuk mendaftarkan dan mengaktifkan sertifikat klien Anda AWS IoT Core, ikuti langkah-langkah berikut:
-
Jika Anda membuat sertifikat klien secara langsung dengan AWS IoT. Sertifikat klien ini akan didaftarkan secara otomatis AWS IoT Core.
-
Jika Anda membuat sertifikat klien Anda sendiri, ikuti petunjuk ini untuk mendaftarkannya AWS IoT Core.
-
Untuk mengaktifkan sertifikat klien Anda, ikuti petunjuk ini.
Langkah 2: Buat fungsi Lambda
AWS IoT Core menggunakan otorisasi khusus untuk mengimplementasikan otentikasi kustom dan skema otorisasi. Authorizer kustom dikaitkan dengan fungsi Lambda yang menentukan apakah perangkat diautentikasi dan operasi apa yang diizinkan untuk dilakukan perangkat. Ketika perangkat terhubung ke AWS IoT Core, mengambil detail AWS IoT Core otorizer termasuk nama otorizer dan fungsi Lambda terkait, dan memanggil fungsi Lambda. Fungsi Lambda menerima peristiwa yang berisi objek JSON dengan data sertifikat X.509 klien 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
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 otorizer diverifikasi atau tidak sebelum memanggil fungsi Lambda otorisasi. Jika otorizer dikonfigurasi untuk menonaktifkan penandatanganan token, bidang ini akan menjadi false.
protocols-
Array yang berisi protokol yang diharapkan untuk permintaan.
protocolData-
Objek yang berisi informasi protokol yang digunakan dalam koneksi. Ini memberikan detail 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). AWS IoT Core memerlukan perangkat untuk mengirim ekstensi SNI ke protokol Transport Layer Security (TLS) dan memberikan alamat titik akhir lengkap di host_namelapangan. -
x509CertificatePem- X.509 Sertifikat 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 merupakan dua bidang baru dalam permintaan. Nilai principalId adalah sama dengan nilaicertificateId. Untuk informasi selengkapnya, lihat Sertifikat.
Contoh respons fungsi lambda
Fungsi Lambda harus menggunakan informasi dari objek JSON peristiwa untuk mengotentikasi koneksi masuk dan memutuskan tindakan apa yang diizinkan dalam koneksi.
Objek JSON berikut berisi contoh respons yang dapat dikirim 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 khusus. Nilai harus berupa string alfanumerik dengan setidaknya satu, dan tidak lebih dari 128, karakter. Ini mengidentifikasi koneksi di log. Nilai
principalIdharus sama dengan nilaiprincipalIddalam objek JSON event (yaitu CertificateId X.509 sertifikat). policyDocuments-
Daftar dokumen JSON-formatted AWS IoT Core kebijakan. Nilainya opsional dan mendukung variabel kebijakan hal dan variabel kebijakan sertifikat. Jumlah maksimum dokumen kebijakan adalah 10. Setiap dokumen kebijakan dapat berisi maksimal 2.048 karakter. Jika Anda memiliki beberapa kebijakan yang dilampirkan ke sertifikat klien dan fungsi Lambda, izin tersebut merupakan kumpulan semua kebijakan. Untuk informasi selengkapnya tentang membuat AWS IoT Core kebijakan, lihat Kebijakan.
disconnectAfterInSeconds-
Bilangan bulat yang menentukan durasi maksimum (dalam detik) koneksi ke AWS IoT Core gateway. Nilai minimum adalah 300 detik, dan nilai maksimum adalah 86.400 detik.
disconnectAfterInSecondsberlaku untuk seumur hidup koneksi dan tidak diperbarui saat penyegaran kebijakan berturut-turut. refreshAfterInSeconds-
Bilangan bulat yang menentukan interval antara penyegaran kebijakan. Ketika interval ini berlalu, AWS IoT Core akan memanggil fungsi Lambda untuk memungkinkan penyegaran kebijakan. Nilai minimum adalah 300 detik, dan nilai maksimum adalah 86.400 detik.
Contoh fungsi Lambda
Berikut ini adalah contoh fungsi Node.js Lambda. Fungsi ini memeriksa X.509 sertifikat klien dan mengekstrak informasi yang relevan seperti nomor seri, sidik jari, dan nama subjek. Jika informasi yang diekstraksi cocok dengan nilai yang diharapkan, klien diberikan akses untuk terhubung. Mekanisme ini memastikan bahwa hanya klien resmi 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 Men definisikan fungsi Lambda Anda.
{ "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 kustom
Setelah Anda menentukan fungsi Lambda, buat otorisasi kustom untuk mengelola otentikasi klien Anda sendiri dan logika otorisasi. Anda dapat mengikuti petunjuk terperinci di Langkah 3: Buat sumber daya otorisasi pelanggan dan otor isasinya. Untuk informasi selengkapnya, lihat Membuat otorisasi.
Dalam proses pembuatan otorisasi kustom, Anda harus memberikan AWS IoT izin untuk memanggil fungsi Lambda setelah dibuat. Untuk petunjuk terperinci, lihat Mengotor isasi AWS IoT untuk memanggil fungsi Lambda Anda.
Langkah 4: Mengatur jenis otentikasi dan protokol aplikasi dalam konfigurasi domain
Untuk mengotentikasi perangkat menggunakan otentikasi khusus dengan sertifikat X.509 klien, Anda harus mengatur jenis otentikasi dan protokol aplikasi dalam konfigurasi domain, dan Anda harus mengirim ekstensi SNI. Nilai authenticationType harusCUSTOM_AUTH_X509, dan nilai applicationProtocol bisa menjadi SECURE_MQTT atauHTTPS.
Mengatur jenis otentikasi dan protokol aplikasi dalam konfigurasi domain (CLI)
Jika Anda tidak memiliki konfigurasi domain, gunakan create-domain-configuration perintah untuk membuatnya. Nilai authenticationType harusCUSTOM_AUTH_X509, dan nilai applicationProtocol bisa menjadi SECURE_MQTT atauHTTPS.
aws iot create-domain-configuration \ --domain-configuration-namedomainConfigurationName\ --authentication-typeCUSTOM_AUTH_X509\ --application-protocolSECURE_MQTT\ --authorizer-config '{ "defaultAuthorizerName":my-custom-authorizer}'
Jika Anda sudah memiliki konfigurasi domain, gunakan update-domain-configuration perintah update authenticationType dan applicationProtocol jika diperlukan. Perhatikan bahwa Anda tidak dapat mengubah jenis atau protokol otentikasi pada titik akhir default (iot:Data-ATS).
aws iot update-domain-configuration \ --domain-configuration-namedomainConfigurationName\ --authentication-typeCUSTOM_AUTH_X509\ --application-protocolSECURE_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 otentikasi.
application-protocol-
Protokol aplikasi yang digunakan perangkat untuk berkomunikasi AWS IoT Core. Untuk informasi selengkapnya, lihat memilih protokol aplikasi.
--authorizer-config-
Objek yang menentukan konfigurasi otorizer dalam konfigurasi domain.
defaultAuthorizerName-
Nama otorizer untuk konfigurasi domain.
Untuk informasi selengkapnya, lihat CreateDomainConfiguration dan UpdateDomainConfiguration dari Refer AWS IoT ensi API. Untuk informasi selengkapnya tentang konfigurasi domain, lihat Konfigurasi domain.