Kontrol akses untuk klien MQTT
Kontrol akses memungkinkan Anda mengelola otorisasi klien untuk menerbitkan atau berlangganan topik, menggunakan model kontrol akses berbasis peran. Mengingat skala besar lingkungan IoT, menetapkan izin untuk setiap klien ke setiap topik sangat melelahkan. Fitur broker MQTT Azure Event Grid mengatasi tantangan skala ini melalui pengelompokan klien dan topik ke dalam grup klien dan ruang topik.
Komponen utama model kontrol akses adalah:
Klien mewakili perangkat atau aplikasi yang perlu menerbitkan dan/atau berlangganan topik MQTT.
Grup klien adalah sekumpulan klien yang memerlukan akses yang sama untuk menerbitkan dan/atau berlangganan sekumpulan topik MQTT yang sama. Grup klien mewakili prinsipal dalam model RBAC.
Ruang topik mewakili beberapa topik melalui serangkaian templat topik. Templat topik adalah ekstensi filter MQTT yang mendukung variabel, bersama dengan wildcard MQTT. Setiap ruang topik mewakili topik yang perlu digunakan oleh sekumpulan klien yang sama untuk berkomunikasi. Ruang topik mewakili sumber daya dalam model RBAC.
Pengikatan izin memberikan akses ke grup klien tertentu untuk menerbitkan atau berlangganan topik yang diwakili oleh ruang topik tertentu. Pengikatan izin mewakili peran dalam model RBAC.
Contoh:
Contoh berikut merinci cara mengonfigurasi model kontrol akses berdasarkan persyaratan berikut.
Contoh 1:
Pabrik memiliki beberapa area dengan setiap area termasuk mesin yang perlu berkomunikasi satu sama lain. Namun, mesin dari area lain pabrik tidak diizinkan untuk berkomunikasi dengan mereka.
Klien | Peran | Filter Topik/Topik |
---|---|---|
Area1_Machine1 | Publisher | area/area1/mesin/mesin1 |
Area1_Machine2 | Pelanggan | area/area1/mesin/ # |
Area2_Machine1 | Publisher | area/area2/mesin/mesin1 |
Area2_Machine2 | Pelanggan | area/area2/mesin/ # |
Konfigurasi
- Buat sumber daya klien untuk setiap komputer.
- Buat grup klien untuk setiap komputer area pabrik.
- Buat ruang topik untuk setiap area yang mewakili topik yang dikomunikasikan oleh komputer area tersebut.
- Buat dua pengikatan izin untuk grup klien setiap area untuk menerbitkan dan berlangganan ruang topik area yang sesuai.
Klien | Grup Klien | Pengikatan Izin | Ruang Topik |
---|---|---|---|
Area1_Machine1 | Area1Machines | Area1-Pub | Area1Messages -Templat Topik: area/area1/mesin/ # |
Area1_Machine2 | Area1Machines | Area1-Sub | Area1Messages -Templat Topik: area/area1/mesin/ # |
Area2_Machine1 | Area2Machines | Area2-Pub | Area2Messages -Templat Topik: area/area2/mesin/ # |
Area2_Machine2 | Area2Machines | Area2-Sub | Area2Messages -Templat Topik: area/area2/mesin/ # |
Contoh 2:
Mari kita asumsikan persyaratan tambahan untuk contoh sebelumnya: setiap area memiliki klien manajemen bersama dengan mesin, dan mesin tidak boleh memiliki akses untuk diterbitkan jika salah satu dari mereka disusupi. Di sisi lain, klien manajemen perlu menerbitkan akses untuk mengirim perintah ke mesin dan berlangganan akses untuk menerima telemetri dari komputer.
Klien | Peran | Filter Topik/Topik |
---|---|---|
Area1_Machine1 | Publisher | area/area1/mesin/mesin1 |
Pelanggan | area/area1/mgmt/ # | |
Area1_Mgmt1 | Publisher | area/area1/mgmt/machine1 |
Pelanggan | area/area1/mesin/ # | |
Area2_Machine1 | Publisher | area/area2/mesin/mesin1 |
Pelanggan | area/area2/mgmt/ # | |
Area2_ Mgmt1 | Publisher | area/area2/mgmt/machine1 |
Pelanggan | area/area2/mesin/ # |
Konfigurasi:
- Buat sumber daya klien untuk setiap komputer dan klien manajemen.
- Buat dua Grup Klien per area: satu untuk klien manajemen dan satu lagi untuk komputer.
- Buat dua Ruang Topik untuk setiap area: satu mewakili topik telemetri dan topik perintah lain yang mewakili.
- Buat dua Pengikatan Izin untuk setiap klien manajemen area untuk menerbitkan ke perintah Ruang Topik dan berlangganan Ruang Topik telemetri.
- Buat dua Pengikatan Izin untuk setiap komputer area untuk berlangganan perintah Ruang Topik dan terbitkan ke Ruang Topik telemetri.
Klien | Grup Klien | Pengikatan Izin | Filter Topik/Topik |
---|---|---|---|
Area1_Machine1 | Area1Machines | Area1Machines-Pub | Area1Telemetry -Templat Topik: area/area1/mesin/ # |
Area1Machines-Sub | Area1Komand -Templat Topik: area/area1/mgmt/ # | ||
Area1_MgmtClient1 | Area1Mgmt | Area1Mgmt-Pub | Area1Komand -Templat Topik: area/area1/mgmt/ # |
Area1Mgmt-Sub | Area1Telemetry -Templat Topik: area/area1/mesin/ # | ||
Area2_Machine1 | Area2Machines | Area2Machines-Pub | Area2Telemetry -Templat Topik: area/area2/mesin/ # |
Area2Machines-Sub | Area2Commands -Template Topik: area/area2/mgmt/ # | ||
Area2_ MgmtClient1 | Area2Mgmt | Area2Mgmt-Pub | Area2Commands -Template Topik: area/area2/mgmt/ # |
Area2Mgmt-Sub | Area2Telemetry -Templat Topik: area/area2/mesin/ # |
Kontrol akses granular
Kontrol akses granular memungkinkan Anda mengontrol otorisasi setiap klien dalam grup klien untuk menerbitkan atau berlangganan topiknya sendiri. Kontrol akses terperinci ini dicapai dengan menggunakan variabel dalam templat topik.
Meskipun grup klien dapat memiliki akses ke ruang topik tertentu dengan semua templat topiknya, variabel dalam templat topik memungkinkan Anda mengontrol otorisasi setiap klien dalam grup klien tersebut untuk menerbitkan atau berlangganan topiknya sendiri. Misalnya, jika grup klien "mesin" mencakup dua klien: "machine1" dan "machine2". Dengan menggunakan variabel, Anda hanya dapat mengizinkan machine1 untuk menerbitkan telemetrinya hanya pada topik MQTT "machines/machine1/telemetry" dan "machine2" untuk menerbitkan pesan pada topik MQTT "machines/machine2/telemetry".
Variabel mewakili nama autentikasi klien atau atribut klien. Selama komunikasi dengan broker MQTT, setiap klien akan mengganti variabel dalam topik MQTT dengan nilai pengganti. Misalnya, variabel ${client.authenticationName} akan diganti dengan nama autentikasi setiap klien: machine1, machine2, dll. Broker MQTT akan mengizinkan akses hanya ke klien yang memiliki nilai pengganti yang cocok dengan nama autentikasi mereka atau nilai atribut yang ditentukan.
Sebagai contoh, perhatikan konfigurasi berikut:
- Grup klien: Komputer
- Ruang topik: MachinesTelemetry
- Templat topik "machines/${client.authenticationName}/telemetry".
- Pengikatan izin: grup klien: komputer; ruang topik: machinesTelemetry; Izin: penerbit
Dengan konfigurasi ini, hanya klien dengan nama autentikasi klien "machine1" yang dapat menerbitkan topik "machines/machine1/telemetry", dan hanya komputer dengan nama autentikasi klien "machine 2" yang dapat menerbitkan topik "machines/machine2/telemetry", dan sebagainya. Dengan demikian, machine2 tidak dapat menerbitkan informasi palsu atas nama mesin1, meskipun memiliki akses ke ruang topik yang sama, dan sebaliknya.
Langkah berikutnya:
Pelajari selengkapnya tentang otorisasi dan autentikasi: