تأمين تدفق الهواء في Apache باستخدام مدير أمان العملاء

Apache Airflow هو أداة تنسيق مفتوحة المصدر لتأليف وجدولة ومراقبة سير العمل برمجيًا. يستخدمه Square كبنية أساسية مهمة لإدارة وظائف ETL لتجميع المقاييس للوحات المعلومات التنفيذية وتحليل المنتج والتعلم الآلي.
تقوم Square بتشغيل Apache Airflow في بيئة متعددة الإيجارات. قد تشترك فرق مختلفة في نفس كتلة تدفق الهواء التي تدير خناجرها.
أيضًا، يحتوي Square على وكيل بشري يجلس بين مستخدمي Square ووحدة تحكم الويب لتدفق الهواء. سيقوم الوكيل البشري بتسجيل دخول المستخدمين، والحصول على هويات المستخدمين وقدراتهم من أنظمة Square الأخرى، وتمرير المعلومات في رؤوس HTTP عند إنشاء وكلاء لطلبات وحدة تحكم تدفق الهواء على الويب.
الأهداف الأمنية
نريد أن يكون لدينا إستراتيجية مصادقة (authN و authZ) لتمييز مستخدمينا عن المسؤولين والمستخدمين الآخرين من الفرق الأخرى في وحدة التحكم في تدفق الهواء ولدينا تحكم في أذونات مستوى DAG. على سبيل المثال، لا تريد أن يقوم المستخدمون من فريق مختلف يشاركونك نفس مجموعة Airflow معك بحذف DAGs عن طريق الخطأ.
أيضًا، نريد تسجيل دخول المستخدمين تلقائيًا في وحدة التحكم في تدفق الهواء على الويب استنادًا إلى رؤوس HTTP من الوكيل البشري بدلاً من مطالبة المستخدمين بإعادة إدخال اسم المستخدم وكلمة المرور الخاصة بهم نظرًا لأن المستخدمين قد قاموا بالفعل بتسجيل الدخول بواسطة الوكيل البشري.
أخيرًا، لا نريد الحصول على وظيفة لمزامنة معلومات المستخدم المربعة والأذونات مع تدفق الهواء لأنها ستضيف تأخيرًا في مزامنة الأذونات وتوفير مستخدم جديد وتصبح عبئًا على الصيانة. رأيت بعض المنشورات من شركات أخرى تستخدم هذا النهج.
ملخص قصير حول متطلبات أمن الساحة
- يمتلك المستخدمون أذونات قراءة أساسية في Task وDAG و DAGRun.
- لا يمكن للمستخدمين رؤية بعض مكونات واجهة المستخدم مثل قائمة المسؤول لتكوين التجمعات والاتصالات وقائمة الأمان لإنشاء المستخدمين والأدوار والأذونات وما إلى ذلك.
- يمتلك المستخدمون أذونات فقط
WRITE
على DAGs التي يمتلكونها. - المسؤول لديه جميع الأذونات.
- يمكن لوحدة التحكم في Airflow على الويب قراءة هويات المستخدم وقدراته من الوكيل البشري المربع وإدخال المستخدم تلقائيًا.
- يفضل عدم الحصول على أذونات مزامنة مجمعة دون اتصال بين Square و Airflow.
كيف يعمل الأمن في تدفق الهواء
قبل أن نتحدث عن اقتراحنا، دعونا نلقي نظرة على كيفية عمل أمان تدفق الهواء.
منذ 1.10، قام Airflow ببناء التحكم في الوصول المستند إلى الدور (rbac) لوحدة تحكم الويب أعلى Flask AppBuilder (FAB). يمكن أن يكون للمستخدم أدوار متعددة ويمكن لمستخدمين مختلفين مشاركة نفس الدور. يمكن أن يكون لكل دور أذونات متعددة. يسمح كل إذن للمستخدم بإجراء ضد المورد. في الرسم البياني أعلاه، يمنح الإذن المستخدم القدرة على إنشاء DAGs.
يمنحنا نموذج الأمان هذا قدرًا كبيرًا من المرونة لإدارة أذونات المستخدم. على سبيل المثال، يمكننا السماح للمستخدم بأن يكون قادرًا على مسح / إعادة تشغيل مهمة، ولكن لا يكون قادرًا على تكوين الاتصالات والتجمعات. هذا يسمح لنا بتحقيق المتطلبات 1 و2.
قدم Airflow 5 أدوار افتراضية مع أذونات محددة مسبقًا – المسؤول، العام، المستخدم، العام، إعلان المشاهد. يسمح Airflow للمشرف بإنشاء أدوار للعملاء مما يسمح لك بوضع الأذونات التي تريدها تحت الدور. هذا يسمح لنا بتحقيق المطلب 3.
يسمح لك تدفق الهواء أيضًا بالحصول على أدوار على مستوى DAG. لذلك يمكنك فقط السماح لمالكي المشروع والمسؤولين بتعديل DAGs ضمن المشروع. هذا يسمح لنا بتحقيق المطلب 3.
بالإضافة إلى ذلك، يوفر Airflow واجهة للسماح للمستخدمين بتحديد واجهاتهم الخاصة SECURITY_MANAGER_CLASS
. يمكنك تحديد منطق المصادقة الخاص بك في مدير الأمان الخاص بك. يمكن العثور على مزيد من التفاصيل حول مديري أمن العملاء هنا. هذا يسمح لنا بتحقيق المتطلبات 5 و6.
عرض
الآن دعنا نتحدث عن استراتيجيتنا. نتجاوز مدير الأمان الافتراضي لتدفق الهواء والذي سيحصل على اسم المستخدم والمشاريع التي يمتلكها المستخدم من رؤوس HTTP من الوكيل البشري وإنشاء المستخدم بأدوار مناسبة إذا لم يكن موجودًا بالفعل في قاعدة البيانات وتسجيل دخول المستخدم.
الأدوار والتصاريح
نخبر ما إذا كان المستخدم مسؤولًا أم لا وما هي المشاريع التي يمتلكها من رؤوس HTTP التي يوفرها Square Human Proxy عند توكيل الطلب لتدفق الهواء.
مسؤل
سيكون للمستخدم المسؤول دور المسؤول الافتراضي لتدفق الهواء.
المستخدمون
- سيكون لدى جميع المستخدمين
basic_user_role
الذي يسمح للمستخدمين بالقيام بالعمليات الأساسية مثل عرض وحدة التحكم في تدفق الهواء على الويب. لديناbasic_user_role
معظم الأذونات تحت دور المستخدم الافتراضي. - سيكون للمستخدمين أدوار المشروع بناءً على المشاريع التي يمتلكها المستخدمون. باستخدام مخطط التسلسل أعلاه على سبيل المثال، سيكون لدى المستخدم
project_A_role
وproject_B_role
. نستخدم دور المشروع لتحقيق التحكم في الوصول إلى مستوى DAG.
DAG مستوى التحكم في الوصول
سنضيف قسم access_control لـ DAGs للسماح فقط للمالكين بتعديل DAG. في المثال أدناه، سيتمكن مالكو المشروع “أ” فقط من تحرير DAG هذا. يمكن للمستخدمين الآخرين قراءة DAG فقط.
تطبيقات
مدير أمن العملاء
تم إنشاء مصادقة تدفق الهواء أعلى FAB الذي يدعم أنواع المصادقة الخمسة أدناه. يمكن العثور على مزيد من التفاصيل حول المصادقة في FAB هنا.
- قاعدة البيانات: اسم المستخدم وكلمة المرور التي يتم الاستعلام عنها من قاعدة البيانات للمطابقة. يتم الاحتفاظ بكلمات المرور مجزأة في قاعدة البيانات.
- OAuth: المصادقة باستخدام OAUTH (الإصدار 1 أو الإصدار 2). تحتاج إلى تثبيت authlib.
- OpenID: يستخدم حقل البريد الإلكتروني للمستخدم للمصادقة على Gmail و Yahoo وما إلى ذلك …
- LDAP: المصادقة على خادم LDAP، مثل Microsoft Active Directory.
REMOTE_USER
: يقرأREMOTE_USER
بيئة خادم الويب var ، ويتحقق مما إذا كان مصرحًا به مع جدول مستخدمي Framework. تقع على عاتق خادم الويب مسؤولية مصادقة المستخدم، وهو أمر مفيد لمواقع الإنترانت، عندما يتم تكوين الخادم (Apache ، Nginx) لاستخدام kerberos ، فلا داعي لأن يقوم المستخدم بتسجيل الدخول باستخدام اسم المستخدم وكلمة المرور على FAB
نعتقد REMOTE_USER
أنه الأفضل لحالة الاستخدام الخاصة بنا. كل ما نحتاج إلى القيام به هو تقديم نظرة عامة عن المؤلف الخاص بنا إلى مدير الأمن. يمكنك أن ترى أننا نحصل على المعلومات من رؤوس HTTP، وأنشئ مستخدمًا إذا لم يكن موجودًا في قاعدة بيانات تدفق الهواء وقم بتسجيل دخول المستخدم SqAuthRemoteUserView
.
تغيير التكوين
في webserver_config.py، ضع AUTH_TYPE
فئة AUTH_REMOTE_USER
مدير أمان العملاء الخاص بك وقم
بتمريرها إلى SECURITY_MANAGER_CLASS
.
في airflow.cfg ، قم بتمكين rbac.
الاستنتاج
اقترحنا طريقة لاستخدام مدير أمن العملاء لتأمين تدفق الهواء باستخدام وكيل بشري في هذه المقالة. النهج مرن جدًا ويمكنك تكييفه وفقًا لاحتياجاتك عن طريق تغيير المنطق في مدير أمان العملاء الخاص بك.
هذه هي النهاية! يقوم Square Data Team بالتوظيف كما هو الحال دائمًا. إذا كنت متحمسًا بشأن هدفنا المتمثل في التمكين الاقتصادي وبناء أحدث البيانات أدناه، تعال وانضم إلينا!
المصدر: developer
شاهد المزيد: