التحكم في الوصول لعملاء MQTT

يمكنك التحكم في الوصول من إدارة تخويل العملاء لنشر الموضوعات أو الاشتراك فيها، باستخدام نموذج التحكم في الوصول المستند إلى الدور. نظرا للحجم الهائل لبيئات IoT، فإن تعيين إذن لكل عميل لكل موضوع ممل بشكل لا يصدق. تعالج ميزة وسيط MQTT في Azure Event Grid تحدي المقياس هذا من خلال تجميع العملاء والموضوعات في مجموعات العملاء ومساحات الموضوعات.

المكونات الرئيسية لنموذج التحكم في الوصول هي:

يمثل العميل الجهاز أو التطبيق الذي يحتاج إلى نشر و/أو الاشتراك في مواضيع MQTT.

مجموعة العملاء هي مجموعة من العملاء الذين يحتاجون إلى نفس الوصول لنشر و/أو الاشتراك في نفس مجموعة موضوعات MQTT. تمثل مجموعة العملاء الأساسي في نموذج RBAC.

تمثل مساحة الموضوع مواضيع متعددة من خلال مجموعة من قوالب المواضيع. قوالب المواضيع هي امتداد لعوامل تصفية MQTT التي تدعم المتغيرات، جنبا إلى جنب مع أحرف البدل MQTT. تمثل كل مساحة موضوع الموضوعات التي تحتاج نفس مجموعة العملاء إلى استخدامها للاتصال. تمثل مساحة الموضوع المورد في نموذج RBAC.

يمنح ربط الأذونات حق الوصول إلى مجموعة عملاء معينة لنشر المواضيع التي تمثلها مساحة موضوع معينة أو الاشتراك فيها. يمثل ربط الإذن الدور في نموذج RBAC.

Diagram of the access control model.

أمثلة:

توضح الأمثلة التالية بالتفصيل كيفية تكوين نموذج التحكم في الوصول استنادا إلى المتطلبات التالية.

المثال 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، على الرغم من أنه لديه حق الوصول إلى نفس مساحة الموضوع، والعكس صحيح.

Diagram of the granular access control example.

الخطوات التالية:

تعرف على المزيد حول التخويل والمصادقة: