Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Saat menghubungkan perangkat AWS IoT Core, Anda memiliki beberapa jenis otentikasi yang tersedia. Anda dapat menggunakan sertifikat klien X.509 yang dapat digunakan untuk mengautentikasi koneksi klien dan perangkat, atau menentukan otorisasi khusus untuk mengelola otentikasi klien dan logika otorisasi 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 mendukung otentikasi kustom dengan sertifikat X.509 menggunakan sertifikat X.509 dan jenis otentikasi otorisasi khusus, yang bekerja dengan protokol MQTT dan protokol HTTPS. Untuk informasi selengkapnya tentang jenis autentikasi dan protokol aplikasi yang didukung titik akhir AWS IoT Core perangkat, lihat Protokol komunikasi perangkat.
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. Selain itu, klien harus memberikan ekstensi Server Name Indication (SNI)
Proses untuk mengautentikasi perangkat menggunakan otentikasi khusus dengan sertifikat klien X.509 terdiri dari langkah-langkah berikut.
Langkah 1: Daftarkan sertifikat klien X.509 Anda dengan AWS IoT Core
Jika Anda belum melakukan ini, daftar dan aktifkan sertifikat klien X.509 Anda dengan. AWS IoT Core Jika tidak, lewati ke langkah berikutnya.
Untuk mendaftar dan mengaktifkan sertifikat klien Anda AWS IoT Core, ikuti langkah-langkahnya:
-
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 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
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). AWS IoT Core membutuhkan perangkat untuk mengirim ekstensi SNI 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 nilaicertificateId
. Untuk informasi selengkapnya, lihat Sertifikat.
Contoh respons fungsi Lambda
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 nilaiprincipalId
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 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 pada sertifikat klien dan fungsi Lambda, izin tersebut merupakan kumpulan dari semua kebijakan. Untuk informasi selengkapnya tentang membuat AWS IoT Core kebijakan, lihat Kebijakan.
disconnectAfterInSeconds
-
Sebuah integer yang menentukan durasi maksimum (dalam detik) dari koneksi ke gateway. AWS IoT Core Nilai minimum adalah 300 detik, dan nilai maksimum 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 maksimum adalah 86.400 detik.
Contoh fungsi Lambda
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.
{
"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
Setelah Anda menentukan fungsi 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. Untuk informasi selengkapnya, lihat Membuat otorisasi.
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 Anda.
Langkah 4: Tetapkan jenis otentikasi dan protokol aplikasi dalam konfigurasi domain
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
harusCUSTOM_AUTH_X509
, dan nilai applicationProtocol
dapat menjadi SECURE_MQTT
atauHTTPS
.
Mengatur jenis otentikasi dan protokol aplikasi dalam konfigurasi domain (CLI)
Jika Anda tidak memiliki konfigurasi domain, gunakan create-domain-configurationperintah untuk membuatnya. Nilai authenticationType
harusCUSTOM_AUTH_X509
, dan nilai applicationProtocol
dapat menjadi SECURE_MQTT
atauHTTPS
.
aws iot create-domain-configuration \ --domain-configuration-name
domainConfigurationName
\ --authentication-typeCUSTOM_AUTH_X509
\ --application-protocolSECURE_MQTT
\ --authorizer-config '{ "defaultAuthorizerName":my-custom-authorizer
}'
Jika Anda sudah memiliki konfigurasi domain, gunakan update-domain-configurationperintah 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-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 authorizer dalam konfigurasi domain.
defaultAuthorizerName
-
Nama otorisasi untuk konfigurasi domain.
Untuk informasi selengkapnya, lihat CreateDomainConfigurationdan UpdateDomainConfigurationdari Referensi AWS IoT API. Untuk informasi selengkapnya tentang konfigurasi domain, lihat Konfigurasi domain.