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.
Ö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.
Sonraki adımlar:
Yetkilendirme ve kimlik doğrulaması hakkında daha fazla bilgi edinin: