التحكم في الوصول لعملاء MQTT
يمكنك التحكم في الوصول من إدارة تخويل العملاء لنشر الموضوعات أو الاشتراك فيها، باستخدام نموذج التحكم في الوصول المستند إلى الدور. نظرا للحجم الهائل لبيئات IoT، فإن تعيين إذن لكل عميل لكل موضوع ممل بشكل لا يصدق. تعالج ميزة وسيط MQTT في Azure Event Grid تحدي المقياس هذا من خلال تجميع العملاء والموضوعات في مجموعات العملاء ومساحات الموضوعات.
المكونات الرئيسية لنموذج التحكم في الوصول هي:
يمثل العميل الجهاز أو التطبيق الذي يحتاج إلى نشر و/أو الاشتراك في مواضيع MQTT.
مجموعة العملاء هي مجموعة من العملاء الذين يحتاجون إلى نفس الوصول لنشر و/أو الاشتراك في نفس مجموعة موضوعات MQTT. تمثل مجموعة العملاء الأساسي في نموذج RBAC.
تمثل مساحة الموضوع مواضيع متعددة من خلال مجموعة من قوالب المواضيع. قوالب المواضيع هي امتداد لعوامل تصفية MQTT التي تدعم المتغيرات، جنبا إلى جنب مع أحرف البدل MQTT. تمثل كل مساحة موضوع الموضوعات التي تحتاج نفس مجموعة العملاء إلى استخدامها للاتصال. تمثل مساحة الموضوع المورد في نموذج RBAC.
يمنح ربط الأذونات حق الوصول إلى مجموعة عملاء معينة لنشر المواضيع التي تمثلها مساحة موضوع معينة أو الاشتراك فيها. يمثل ربط الإذن الدور في نموذج RBAC.
أمثلة:
توضح الأمثلة التالية بالتفصيل كيفية تكوين نموذج التحكم في الوصول استنادا إلى المتطلبات التالية.
المثال 1:
يحتوي المصنع على مناطق متعددة مع كل منطقة بما في ذلك الأجهزة التي تحتاج إلى التواصل مع بعضها البعض. ومع ذلك، لا يسمح للأجهزة من مناطق أخرى من المصنع بالاتصال بها.
العميل | الدور | عامل تصفية الموضوع/الموضوع |
---|---|---|
Area1_Machine1 | الناشر | areas/area1/machines/machine1 |
Area1_Machine2 | المشترك | المناطق/المنطقة1/الأجهزة/ # |
Area2_Machine1 | الناشر | المناطق/المنطقة2/الأجهزة/الجهاز1 |
Area2_Machine2 | المشترك | المناطق/المنطقة2/الأجهزة/ # |
التكوين
- إنشاء مورد عميل لكل جهاز.
- إنشاء مجموعة عملاء لأجهزة كل منطقة مصنع.
- إنشاء مساحة موضوع لكل منطقة تمثل الموضوعات التي تتصل بها أجهزة المنطقة.
- إنشاء ربطين للأذونات لمجموعة عملاء كل منطقة لنشر مساحة موضوع المنطقة المقابلة لها والاشتراك فيها.
العميل | مجموعة العملاء | ربط الأذونات | مساحة الموضوع |
---|---|---|---|
Area1_Machine1 | المنطقة1الآلات | Area1-Pub | Area1Messages -Topic Template: areas/area1/machines/ # |
Area1_Machine2 | المنطقة1الآلات | المنطقة 1-الفرعية | Area1Messages -Topic Template: areas/area1/machines/ # |
Area2_Machine1 | المنطقة2الآلات | Area2-Pub | Area2Messages -Topic Template: areas/area2/machines/ # |
Area2_Machine2 | المنطقة2الآلات | المنطقة 2-الفرعية | Area2Messages -Topic Template: areas/area2/machines/ # |
المثال 2:
لنفترض متطلبا إضافيا للمثال السابق: كل منطقة لديها عملاء إدارة جنبا إلى جنب مع الأجهزة، ويجب ألا يكون لدى الأجهزة حق الوصول للنشر في حالة تعرض أي منها للخطر. من ناحية أخرى، يحتاج عملاء الإدارة إلى نشر الوصول لإرسال الأوامر إلى الأجهزة والاشتراك في الوصول لتلقي بيانات تتبع الاستخدام من الأجهزة.
العميل | الدور | عامل تصفية الموضوع/الموضوع |
---|---|---|
Area1_Machine1 | الناشر | areas/area1/machines/machine1 |
المشترك | areas/area1/mgmt/ # | |
Area1_Mgmt1 | الناشر | areas/area1/mgmt/machine1 |
المشترك | المناطق/المنطقة1/الأجهزة/ # | |
Area2_Machine1 | الناشر | المناطق/المنطقة2/الأجهزة/الجهاز1 |
المشترك | areas/area2/mgmt/ # | |
Area2_ Mgmt1 | الناشر | areas/area2/mgmt/machine1 |
المشترك | المناطق/المنطقة2/الأجهزة/ # |
التكوين:
- إنشاء موارد العميل لكل جهاز وعميل إدارة.
- إنشاء مجموعتي عملاء لكل منطقة: واحدة لعميل الإدارة وأخرى للأجهزة.
- إنشاء مساحتين للموضوعات لكل منطقة: واحدة تمثل مواضيع بيانات تتبع الاستخدام وأخرى تمثل مواضيع الأوامر.
- إنشاء ارتباطين للأذونات لعملاء إدارة كل منطقة للنشر إلى الأوامر مساحة الموضوع والاشتراك في مساحة موضوع القياس عن بعد.
- إنشاء ربطي أذونات لأجهزة كل منطقة للاشتراك في الأوامر مساحة الموضوع والنشر إلى مساحة موضوع القياس عن بعد.
العميل | مجموعة العملاء | ربط الأذونات | عامل تصفية الموضوع/الموضوع |
---|---|---|---|
Area1_Machine1 | المنطقة1الآلات | Area1Machines-Pub | Area1Telemetry -قالب الموضوع: areas/area1/machines/ # |
Area1Machines-Sub | Area1Commands -قالب الموضوع: areas/area1/mgmt/ # | ||
Area1_MgmtClient1 | Area1Mgmt | Area1Mgmt-Pub | Area1Commands -قالب الموضوع: areas/area1/mgmt/ # |
Area1Mgmt-Sub | Area1Telemetry -قالب الموضوع: areas/area1/machines/ # | ||
Area2_Machine1 | المنطقة2الآلات | Area2Machines-Pub | Area2Telemetry -قالب الموضوع: areas/area2/machines/ # |
Area2Machines-Sub | Area2Commands -قالب الموضوع: areas/area2/mgmt/ # | ||
Area2_ MgmtClient1 | Area2Mgmt | Area2Mgmt-Pub | Area2Commands -قالب الموضوع: areas/area2/mgmt/ # |
Area2Mgmt-Sub | Area2Telemetry -قالب الموضوع: areas/area2/machines/ # |
التحكم في الوصول الحبيبي.
يسمح لك التحكم في الوصول متعدد المستويات بالتحكم في تخويل كل عميل داخل مجموعة عملاء لنشر موضوعه الخاص أو الاشتراك فيه. يتم تحقيق التحكم في الوصول متعدد المستويات هذا باستخدام المتغيرات في قوالب الموضوع.
على الرغم من أنه يمكن لمجموعة العملاء الوصول إلى مساحة موضوع معينة مع جميع قوالب المواضيع الخاصة بها، فإن المتغيرات داخل قوالب المواضيع تمكنك من التحكم في تخويل كل عميل داخل مجموعة العملاء هذه لنشر موضوعه الخاص أو الاشتراك فيه. على سبيل المثال، إذا كانت مجموعة العملاء "الأجهزة" تتضمن عميلين: "machine1" و"machine2". باستخدام المتغيرات، يمكنك السماح ل machine1 فقط بنشر بيانات تتبع الاستخدام الخاصة به فقط على موضوع MQTT "machines/machine1/telemetry" و"machine2" لنشر الرسائل على موضوع MQTT "machines/machine2/telemetry".
تمثل المتغيرات إما أسماء مصادقة العميل أو سمات العميل. أثناء الاتصال مع وسيط MQTT، سيستبدل كل عميل المتغير في موضوع MQTT بقيمة بديلة. على سبيل المثال، سيتم استبدال المتغير ${client.authenticationName} باسم مصادقة كل عميل: machine1 و machine2 وما إلى ذلك. سيسمح وسيط MQTT بالوصول فقط إلى العملاء الذين لديهم قيمة بديلة تطابق إما اسم المصادقة الخاص بهم أو قيمة السمة المحددة.
على سبيل المثال، ضع في اعتبارك التكوين التالي:
- مجموعة العملاء: الأجهزة
- مساحة الموضوع: MachinesTelemetry
- قالب الموضوع "machines/${client.authenticationName}/telemetry".
- ربط الإذن: مجموعة العملاء: الأجهزة؛ مساحة الموضوع: machinesTelemetry; الإذن: الناشر
مع هذا التكوين، يمكن فقط للعميل الذي يحمل اسم مصادقة العميل "machine1" النشر في الموضوع "machines/machine1/telemetry"، ويمكن فقط للجهاز الذي يحمل اسم مصادقة العميل "machine 2" النشر على الموضوع "machines/machine2/telemetry"، وما إلى ذلك. وفقا لذلك، لا يمكن ل machine2 نشر معلومات خاطئة نيابة عن machine1، على الرغم من أنه لديه حق الوصول إلى نفس مساحة الموضوع، والعكس صحيح.
الخطوات التالية:
تعرف على المزيد حول التخويل والمصادقة: