الأدوار ومجموعات الصلاحيات والوصول

الطبقات الثلاث التي تحدّد ما يجوز لكل عضو فعله، والمجموعات التي تبدأ بها كل مؤسّسة، والقواعد التي تمنع أي أحد من الترقّي بنفسه.

لكل شخص في المؤسّسة دور واحد. وفوقه يمكن وضعه في مجموعات صلاحيات تضيف صلاحيات على مستوى المؤسّسة كلّها، ويمكن منحه وصولًا إلى موارد بعينها. وما يجوز للعضو فعله هو كل ما تمنحه إيّاه الطبقات الثلاث مجتمعة.

لا شيء في أي طبقة ينتزع صلاحية أبدًا. المنع هو غياب المنح، وهذا ما يُبقي سؤال "لماذا يستطيع فعل هذا؟" قابلًا للإجابة بالنظر إلى دور العضو، ومجموعاته، والمنح التي تسمّيه.

الطبقة 1: أدوار المؤسّسة

ثلاثة أدوار، عامّة عن قصد.

الدور ما يشمله
المالك كل شيء. مالك واحد لكل مؤسّسة.
المسؤول كل شيء باستثناء تعيين المسؤولين وتعديل البيانات القانونية للمؤسّسة.
المطوّر ينشئ الأشياء ويعمل على ما أنشأه أو ما مُنح إيّاه. ولا يرى شيئًا آخر.

يجوز للمطوّر إنشاء التطبيقات، والشبكات، والخزائن، ومساحات أسماء الصور، وقواعد البيانات، ونسخ قواعد البيانات، والخدمات المُدارة، والحلول؛ وربط حسابه الخاص في GitHub أو GitLab؛ واستخدام وكيل البرمجة وإنشاء مشاريع الاستوديو؛ ورؤية من غيره في المؤسّسة. لا يرى إلا ما أنشأه وما مُنح إيّاه. تطبيق زميله لا يظهر في قائمته ولا يستجيب لاسمه.

من ينشئ موردًا يملك كل شيء عليه، أيًّا كان دوره.

ما لا يستطيعه إلا المالك

صلاحيتان تخصّان المالك وحده:

  • تعيين المسؤولين وعزلهم. فالمسؤول القادر على تعيين مسؤولين لا يمكن خفض رتبته أبدًا.
  • تعديل البيانات القانونية للمؤسّسة: اسم الشركة، وأرقام التسجيل، والعنوان الذي تُحرَّر الفواتير والعقود باسمه.

لا يمكن وضع هاتين في مجموعة صلاحيات ولا تسليمهما لبيانات اعتماد CLI، من قِبل أي أحد، بما في ذلك المالك.

الطبقة 2: مجموعات الصلاحيات

الأدوار عامّة عن قصد، ومعظم الفرق تحتاج إلى شيء بينها: شخص ينشر لكنه لا يحذف، وشخص يعتني بقواعد البيانات، وشخص يدير المتجر. مجموعة الصلاحيات مجموعة مسمّاة من صلاحيات المؤسّسة. ووضع عضو فيها يضيف تلك الصلاحيات إلى دوره.

المجموعات ترث. يمكن للمجموعة أن تسمّي مجموعات أخرى آباءً لها، ويملك أعضاؤها كل ما يملكه الآباء، على نحو متعدٍّ. توسيع الأب يوسّع كل مجموعة مبنية عليه. ولا يمكن لمجموعة أن ترث من نفسها، ولو عبر غيرها.

المجموعات المدمجة

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

المجموعة ترث من تضيف عمليًا
application-viewers application:read-any، member:read رؤية كل تطبيق وقراءة سجلّاته.
deployers application-viewers application:create، application:deploy-any، network:create، git:connect إنشاء التطبيقات، ونشر كل تطبيق وتشغيله وإيقافه. دون تعديل إعداداتها أو حذفها.
application-maintainers deployers application:update-any إضافةً إلى تعديل إعدادات كل تطبيق وأسراره وطريقة إتاحته.
application-administrators application-maintainers application:write-any، application:delete-any كل شيء على كل تطبيق، بما في ذلك حذفه.
vault-managers vault:create، vault:manage-any إنشاء الخزائن وإدارة كل خزنة وسرّ.
database-administrators database:create، database:manage-any، database-instance:create، database-instance:manage-any إنشاء كل قاعدة بيانات ونسخة قاعدة بيانات وإدارتها، بما في ذلك النسخ الاحتياطية والاستعادة.
service-operators service:create، service:manage-any إنشاء كل خدمة مُدارة وتشغيلها: Keycloak وKafka وRabbitMQ وRedis.
solution-managers solution:create، solution:manage-any نشر كل حلّ وإدارته: WordPress وWooCommerce وOdoo وn8n وغيرها.
agent-users agent:use، project:create إنشاء مشاريع الاستوديو وتشغيل وكيل البرمجة، بالإنفاق من رصيد المؤسّسة.
agent-administrators agent-users project:manage-any كل ما يستطيعه مستخدمو الوكيل، على كل مشروع في الاستوديو.
iam-administrators member:read، member:manage، iam:manage دعوة الأعضاء وإدارتهم، وإدارة المجموعات، ومنح الوصول إلى الموارد — في حدود ما يملكونه هم فقط.
billing-viewers billing:read قراءة الرصيد وسجلّ الحركات والإنفاق.
platform-engineers application-maintainers، database-administrators، service-operators، vault-managers network:manage-any، namespace:create، namespace:manage-any الأربع في واحدة، إضافةً إلى كل شبكة ومساحة أسماء صور.

صلاحيات التطبيقات شرائح بعضها من بعض:

الصلاحية على كل تطبيق في المؤسّسة
application:read-any رؤيته وقراءة سجلّاته.
application:deploy-any إضافةً إلى بنائه ونشره وتشغيله وإيقافه.
application:update-any رؤيته، وقراءة سجلّاته، وتعديل إعداداته وأسراره، وتصفّح وحدات تخزينه.
application:delete-any رؤيته وحذفه.
application:write-any كل شيء.

يسرد isogrid iam permissions كل صلاحية مع وصف من سطر واحد، ويعرض isogrid iam groups get <group> بالضبط ما تملكه مجموعة بعد احتساب الوراثة. انظر المستودعات والمجموعات والصلاحيات.

الطبقة 3: الوصول إلى مورد واحد

يمنح المنحُ عضوًا واحدًا، أو مجموعة واحدة، مجموعة من القدرات على مورد واحد: تطبيق واحد، أو قاعدة بيانات واحدة، أو خزنة واحدة، أو مستودع واحد. وبه يدخل المطوّر إلى شيء لم ينشئه، ويدخل شخص من خارج المؤسّسة إلى شيء واحد بالضبط.

القدرات محدّدة. على التطبيق مثلًا:

القدرة تسمح بـ
app:view رؤيته وقراءة إعداداته. تتضمّنها كل قدرة أخرى.
app:logs قراءة سجلّات البناء والتشغيل.
app:deploy بناؤه ونشره.
app:lifecycle تشغيله وإيقافه.
app:configure تعديل الموارد والشبكات والبيئة وطريقة الإتاحة.
app:secrets ضبط أسرار الحاوية وسرد أسمائها.
app:files تصفّح وحدات تخزينه.
app:share تحديد من غيرك يجوز له استخدامه.
app:delete حذفه.

لكل نوع آخر من الموارد مجموعته الخاصة على الشكل نفسه: view، والأشياء التي يمكنك فعلها به، وshare، وdelete.

الإعدادات المسبقة تجمع الحالات الشائعة، فمعظم المنح اختيار واحد:

المورد الإعدادات المسبقة
التطبيق viewer (رؤية، سجلّات) · operator (إضافةً إلى النشر، والتشغيل والإيقاف، وتصفّح الملفات) · maintainer (كل شيء عدا الحذف)
المستودع repo-viewer · repo-deployer · repo-maintainer · repo-admin
قاعدة البيانات database-user (الاتصال) · database-owner
نسخة قاعدة البيانات instance-user · instance-operator (إضافةً إلى التشغيل والنسخ الاحتياطي) · instance-manager (كل شيء عدا الحذف)
الخزنة vault-consumer (ربط الأسرار بالتطبيقات) · vault-editor (إضافةً إلى تعديلها) · vault-manager
مساحة أسماء الصور namespace-puller · namespace-publisher (إضافةً إلى الدفع) · namespace-manager
الصورة image-consumer (النشر منها) · image-manager
الشبكة network-user (ربط التطبيقات) · network-manager
الخدمة المُدارة service-user (تفاصيل الاتصال) · service-operator (إضافةً إلى التشغيل) · service-manager (كل شيء عدا الحذف)
الحلّ solution-user · solution-operator · solution-manager (كل شيء عدا الحذف)
مشروع الاستوديو project-viewer · project-collaborator (توجيه الوكيل، والتعديل، وإيقاظ بيئة العزل) · project-maintainer (كل شيء عدا الحذف)

يُفكّ الإعداد المسبق لحظة كتابة المنح. فالمنح نفسه مجموعة قدرات عادية، ويمكنك أن تبدأ من إعداد مسبق وتزيل منه شيئًا واحدًا.

المنح يغطّي المورد، لا نسخة منه. المنح على تطبيق يغطّي خدمته وعمليات بنائه ووحدات تخزينه. والمنح على مستودع يغطّي كل تطبيق مبني منه، بما في ذلك ما يُنشأ لاحقًا.

تُجرى المنح من إعدادات المشاركة الخاصة بالمورد في وحدة التحكّم، أو بالنسبة إلى المستودعات بـ isogrid repos grant.

لا يمكنك أن تمنح إلا ما تملكه

هذه هي القاعدة التي تجعل من الآمن ترك أشخاص غير المالك يديرون الوصول. وهي تسري في كل مكان:

  • إنشاء مجموعة أو تعديلها. لا يمكنك إعطاء مجموعة صلاحية لا تملكها، ولا جعلها ترث من مجموعة تملك أكثر منك.
  • وضع شخص في مجموعة. لا يمكنك إضافة عضو إلى مجموعة تملك صلاحية لا تملكها أنت.
  • المنح على مورد. تحتاج إلى قدرة share على ذلك المورد، ولا يمكنك أن تمنح إلا قدرات تملكها عليه أنت. فمن يستطيع نشر تطبيق لا يستطيع إعطاء أحد حقّ حذفه.
  • سحب منح. لا يمكنك سحب منح إلا إن كان لا يعطي أكثر ممّا تملك. والمنح الذي أجراه شخص يملك وصولًا أوسع يبقى حتى يزيله شخص يملك القدر نفسه.

تحتاج إدارة المجموعات أيضًا إلى صلاحية iam:manage، التي يملكها المالكون والمسؤولون وتضيفها iam-administrators. لذا فمسؤول IAM الذي يجوز له إدارة الأعضاء دون الفوترة لا يستطيع بناء مجموعة "Billing" والانضمام إليها.

بيانات اعتماد الـ CLI

بيانات الاعتماد المُنشأة بـ isogrid login تعمل باسمك، في مؤسّسة واحدة، وهي محدودة بثلاثة أمور:

لا تملك أبدًا أكثر ممّا تملكه أنت. نطاقاتها سقف، يُفحص مقابل دورك ومجموعاتك في كل طلب بدل أن يُنسخ لحظة إصدارها. أخرِج شخصًا من مجموعة، أو اخفض رتبته، فتضيق كل بيانات اعتماد أنشأها في اللحظة نفسها.

لا تملك إلا ما بقي محدّدًا في صفحة الموافقة. تُعرض member:manage وiam:manage وorganization:manage وnetwork:share لكنها غير محدّدة افتراضيًا، لأن آثارها تقع على أشخاص آخرين.

هناك أشياء لا تستطيعها أبدًا، مهما طلبت ومهما كان من وافق عليها: قراءة الفوترة أو تعديلها، وتعيين المسؤولين، وتعديل البيانات القانونية للمؤسّسة، وإنشاء بيانات الاعتماد أو إبطالها. هذه تتطلّب شخصًا أمام لوحة المفاتيح.

النطاقات تضيّق صلاحيات المؤسّسة. أمّا الوصول الآتي من منح على مورد، أو من كونك أنشأته، فلا يتأثّر بها، فتظلّ بيانات الاعتماد الضيّقة تصل إلى ما دُعيت إليه. يطبع isogrid whoami ما ستُسمح به بيانات الاعتماد فعلًا؛ وهي القائمة التي تقرؤها حين يُرفض شيء. انظر النشر من CI/CD لإنشاء بيانات اعتماد لخطّ نشر.

أمثلة

دع فريق ضمان الجودة ينشر، دون أن يحذف

أنشئ مجموعة qa وضع فيها المختبرين. ما تعطيه لها يتوقّف على مدى اتّساع عملهم:

  • كل التطبيقات: اجعل qa ترث من deployers. يستطيعون إنشاء التطبيقات، ونشرها كلّها وتشغيلها وإيقافها، ولا يعدّلون أيًّا منها ولا يحذفونه.
  • تطبيقات بيئة staging فقط: اترك المجموعة دون صلاحيات، وامنحها الإعداد المسبق operator على كل تطبيق staging. يستطيعون هناك النشر والتشغيل والإيقاف وقراءة السجلّات، ولا يرون شيئًا آخر.
isogrid iam groups create --name QA --inherits deployers
isogrid iam groups add-member qa tester@acme.example

حين ينضمّ أحد إلى فريق ضمان الجودة، فإضافته إلى المجموعة هي كل ما يلزم لضمّه. وحين يغادره، يفقد كل ما منحته إيّاه المجموعة دفعة واحدة.

سلّم حلًّا واحدًا لوكالة تسويق

يحتاج جهة الاتصال في الوكالة إلى إدارة المتجر ولا شيء غيره.

  1. ادعُه إلى المؤسّسة بدور مطوّر. وهو وحده لا يرى شيئًا لم ينشئه.
  2. على حلّ المتجر، امنحه الإعداد المسبق solution-operator: يستطيع رؤيته، وقراءة تفاصيل الاتصال به وبيانات دخول لوحة الإدارة، وتشغيله وإيقافه وإعادة نشره. اختر solution-manager إن كان يجب أن يعدّل إعداداته أيضًا؛ ولا يسمح له أيّ من الإعدادين بحذفه.
  3. حين تنتهي المهمّة، اسحب المنح أو أزله من المؤسّسة.

لا يرى أبدًا تطبيقاتك أو قواعد بياناتك أو فاتورتك، ولا يستطيع تمرير المتجر لأحد آخر، لأن أيًّا من الإعدادين لا يتضمّن sol:share.

أعطِ متعاقدًا مستودعًا واحدًا

انظر مستودعات Git: العضو الذي ربط المستودع يمنح المتعاقد repo-deployer عليه، فيستطيع المتعاقد بناء التطبيقات المبنية منه ونشرها دون أن يُمنح كل واحد منها على حدة.

حالات حدّية يحسن معرفتها قبل أن تصادفها

لا يجد عضو تطبيقًا موجودًا. ألّا يملك شيئًا على مورد يبدو تمامًا كعدم وجوده، فلا يستطيع الأعضاء اكتشاف ما يشغّله زملاؤهم بتخمين الأسماء. امنحه الوصول، أو ضعه في مجموعة ترى كل التطبيقات.

"You do not have 'app:deploy' on this application" من شخص يستطيع رؤيته. هو يملك شيئًا، فالمورد ليس مخفيًا عنه، لكنه لا يملك هذه القدرة. تسرد رسالة الخطأ ما يملكه.

لا يستطيع مسؤول البناء من مستودع خاص لزميله. للمستودعات قواعدها الخاصة: العضو الذي ربط الحساب هو من يقرّر، والمستودع الخاص مغلق حتى أمام المالك. انظر مستودعات Git.

لا يمكن تعديل مجموعة مدمجة. ابنِ مجموعتك الخاصة فوقها بـ --inherits.

يُرفض أمر في الـ CLI بينما يعمل في وحدة التحكّم. وُوفق على بيانات الاعتماد بصلاحيات أقلّ ممّا تملك. يبيّن isogrid whoami أيّها؛ ويوافق isogrid login --force على بيانات اعتماد أوسع.

ماذا تقرأ بعد ذلك