Aracılığıyla paylaş


MQTT istemcileri için erişim denetimi

Erişim denetimi, rol tabanlı erişim denetimi modeli kullanarak istemcilerin konu başlıkları yayımlama veya abone olma yetkilendirmesini yönetmenizi sağlar. IoT ortamlarının muazzam ölçeği göz önüne alındığında, her bir konu başlığına her istemci için izin atamak son derece yorucudur. Azure Event Grid'in MQTT aracı özelliği, istemcileri ve konuları istemci grupları ve konu alanları halinde gruplandırarak bu ölçek sınamasını ele alır.

Erişim denetimi modelinin ana bileşenleri şunlardır:

İstemci, MQTT konularını yayımlaması ve/veya abone olması gereken cihazı veya uygulamayı temsil eder.

İstemci grubu, aynı MQTT konularını yayımlamak ve/veya abone olmak için aynı erişime ihtiyaç duyan bir istemci kümesidir. İstemci grubu, RBAC modelindeki sorumluyu temsil eder.

Konu alanı , bir dizi konu şablonu aracılığıyla birden çok konuyu temsil eder. Konu şablonları, MQTT joker karakterleriyle birlikte değişkenleri destekleyen MQTT filtrelerinin bir uzantısıdır. Her konu alanı, aynı istemci kümesinin iletişim kurmak için kullanması gereken konuları temsil eder. Konu alanı RBAC modelindeki kaynağı temsil eder.

İzin bağlaması , belirli bir konu alanı tarafından temsil edilen konularda yayımlamak veya abone olmak için belirli bir istemci grubuna erişim verir. İzin bağlaması RBAC modelindeki rolü temsil eder.

Diagram of the access control model.

Örnekler:

Aşağıdaki örneklerde, erişim denetimi modelinin aşağıdaki gereksinimlere göre nasıl yapılandırılır ayrıntıları verilmiştir.

Örnek 1:

Fabrika, birbiriyle iletişim kurması gereken makineler de dahil olmak üzere her alanda birden fazla alana sahiptir. Ancak, fabrikanın diğer alanlarındaki makinelerin onlarla iletişim kurmasına izin verilmez.

İstemci Rol Konu/Konu Filtresi
Area1_Machine1 Yayıncı alanlar/alan1/makineler/makine1
Area1_Machine2 Abone alanlar/alan1/makineler/ #
Area2_Machine1 Yayıncı alanlar/alan2/makineler/makine1
Area2_Machine2 Abone alanlar/alan2/makineler/ #

Yapılandırma

  • Her makine için bir istemci kaynağı oluşturun.
  • Her fabrika alanının makineleri için bir istemci grubu oluşturun.
  • Alanın makinelerinin iletişim kuracağı konuları temsil eden her alan için bir konu alanı oluşturun.
  • Her alanın istemci grubu için ilgili alanın konu alanını yayımlamak ve abone olmak için iki izin bağlaması oluşturun.
İstemci İstemci Grubu İzin Bağlama Konu Alanı
Area1_Machine1 Alan1Makineler Alan1-Pub Area1Messages -Konu Şablonu: alanlar/alan1/makineler/ #
Area1_Machine2 Alan1Makineler Alan1-Alt Area1Messages -Konu Şablonu: alanlar/alan1/makineler/ #
Area2_Machine1 Alan2Makineler Alan2-Pub Area2Messages -Konu Şablonu: alanlar/alan2/makineler/ #
Area2_Machine2 Alan2Makineler Alan2-Alt Area2Messages -Konu Şablonu: alanlar/alan2/makineler/ #

Örnek 2:

Önceki örnek için ek bir gereksinim olduğunu varsayalım: Her alanın makinelerle birlikte yönetim istemcileri vardır ve herhangi birinin gizliliğinin tehlikeye düşmesi durumunda makinelerin yayımlama erişimi olmamalıdır. Öte yandan, yönetim istemcilerinin makinelere komut göndermek için yayımlama erişimine ve makinelerden telemetri almak için erişime abone olması gerekir.

İstemci Rol Konu/Konu Filtresi
Area1_Machine1 Yayıncı alanlar/alan1/makineler/makine1
Abone alanlar/alan1/mgmt/ #
Area1_Mgmt1 Yayıncı alanlar/alan1/mgmt/makine1
Abone alanlar/alan1/makineler/ #
Area2_Machine1 Yayıncı alanlar/alan2/makineler/makine1
Abone alanlar/alan2/mgmt/ #
Area2_ Mgmt1 Yayıncı alanlar/alan2/mgmt/makine1
Abone alanlar/alan2/makineler/ #

Yapılandırma:

  • Her makine ve yönetim istemcisi için istemci kaynakları oluşturun.
  • Alan başına iki İstemci Grubu oluşturun: biri yönetim istemcisi ve diğeri makineler için.
  • Her alan için iki Konu Alanı oluşturun: biri telemetri konularını ve diğeri komut konularını temsil ediyor.
  • Her alanın yönetim istemcileri için Konu Alanı komutlarına yayımlamak ve telemetri Konu Alanı'na abone olmak için iki İzin Bağlaması oluşturun.
  • Konu Alanı komutlarına abone olmak ve telemetri Konu Alanı'nda yayımlamak için her alanın makineleri için iki İzin Bağlaması oluşturun.
İstemci İstemci Grubu İzin Bağlama Konu/Konu Filtresi
Area1_Machine1 Alan1Makineler Alan1Machines-Pub Alan1Telemetry -Konu Şablonu: alanlar/alan1/makineler/ #
Alan1Machines-Sub Alan1Koşular -Konu Şablonu: alanlar/alan1/mgmt/ #
Area1_MgmtClient1 Alan1Mgmt Alan1Mgmt-Pub Alan1Koşular -Konu Şablonu: alanlar/alan1/mgmt/ #
Alan1Mgmt-Sub Alan1Telemetry -Konu Şablonu: alanlar/alan1/makineler/ #
Area2_Machine1 Alan2Makineler Alan2Machines-Pub Alan2Telemetry -Konu Şablonu: alanlar/alan2/makineler/ #
Alan2Machines-Sub Area2Commands -Konu Şablonu: alanlar/alan2/mgmt/ #
Area2_ MgmtClient1 Alan2Mgmt Alan2Mgmt-Pub Area2Commands -Konu Şablonu: alanlar/alan2/mgmt/ #
Alan2Mgmt-Sub Alan2Telemetry -Konu Şablonu: alanlar/alan2/makineler/ #

Ayrıntılı erişim denetimi

Ayrıntılı erişim denetimi, bir istemci grubundaki her istemcinin kendi konusunu yayımlamak veya abone olmak için yetkilendirmesini denetlemenize olanak tanır. Bu ayrıntılı erişim denetimi, konu şablonlarındaki değişkenler kullanılarak elde edilir.

Bir istemci grubu, tüm konu şablonlarıyla belirli bir konu alanına erişebilse de, konu şablonlarındaki değişkenler, bu istemci grubundaki her istemcinin kendi konusunu yayımlamak veya abone olmak için yetkilendirmesini denetlemenizi sağlar. Örneğin, "makineler" istemci grubu iki istemci içeriyorsa: "machine1" ve "machine2". Değişkenleri kullanarak yalnızca machine1'in telemetrisini yalnızca "machines/machine1/telemetry" ve "machine2" MQTT konu başlığı "machines/machine2/telemetri" üzerinde ileti yayımlamak için MQTT konusunda yayımlamasına izin vekleyebilirsiniz.

Değişkenler, istemci kimlik doğrulama adlarını veya istemci özniteliklerini temsil eder. MQTT aracısı ile iletişim sırasında, her istemci MQTT konusunda değişkeni yerine bir değerle değiştirir. Örneğin, ${client.authenticationName} değişkeni her istemcinin kimlik doğrulama adıyla değiştirilir: machine1, machine2, vb. MQTT aracısı yalnızca kimlik doğrulama adıyla veya belirtilen özniteliğin değeriyle eşleşen yerine bir değere sahip istemcilere erişim izni verir.

Örneğin, aşağıdaki yapılandırmayı göz önünde bulundurun:

  • İstemci grubu: Makineler
  • Konu alanı: MachinesTelemetry
    • "machines/${client.authenticationName}/telemetry" konu şablonu.
  • İzin bağlama: istemci grubu: makineler; konu alanı: machinesTelemetry; İzin: yayımcı

Bu yapılandırmayla, "machine1" istemci kimlik doğrulaması adı "machines/machine1/telemetry" konusunda yalnızca istemci kimlik doğrulaması adı "machine 2" olan makine "machines/machine2/telemetry" konusunda yayımlayabilir vb. Buna göre, machine2 aynı konu alanına erişimi olmasına rağmen machine1 adına yanlış bilgi yayımlayamaz ve tam tersi de geçerlidir.

Diagram of the granular access control example.

Sonraki adımlar:

Yetkilendirme ve kimlik doğrulaması hakkında daha fazla bilgi edinin: