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.

Diagram of the access control model.

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.

Diagram of the granular access control example.

Langkah berikutnya:

Pelajari selengkapnya tentang otorisasi dan autentikasi: