الأدوار ومجموعات الصلاحيات والوصول
الطبقات الثلاث التي تحدّد ما يجوز لكل عضو فعله، والمجموعات التي تبدأ بها كل مؤسّسة، والقواعد التي تمنع أي أحد من الترقّي بنفسه.
لكل شخص في المؤسّسة دور واحد. وفوقه يمكن وضعه في مجموعات صلاحيات تضيف صلاحيات على مستوى المؤسّسة كلّها، ويمكن منحه وصولًا إلى موارد بعينها. وما يجوز للعضو فعله هو كل ما تمنحه إيّاه الطبقات الثلاث مجتمعة.
لا شيء في أي طبقة ينتزع صلاحية أبدًا. المنع هو غياب المنح، وهذا ما يُبقي سؤال "لماذا يستطيع فعل هذا؟" قابلًا للإجابة بالنظر إلى دور العضو، ومجموعاته، والمنح التي تسمّيه.
الطبقة 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
حين ينضمّ أحد إلى فريق ضمان الجودة، فإضافته إلى المجموعة هي كل ما يلزم لضمّه. وحين يغادره، يفقد كل ما منحته إيّاه المجموعة دفعة واحدة.
سلّم حلًّا واحدًا لوكالة تسويق
يحتاج جهة الاتصال في الوكالة إلى إدارة المتجر ولا شيء غيره.
- ادعُه إلى المؤسّسة بدور مطوّر. وهو وحده لا يرى شيئًا لم ينشئه.
- على حلّ المتجر، امنحه الإعداد المسبق
solution-operator: يستطيع رؤيته، وقراءة تفاصيل الاتصال به وبيانات دخول لوحة الإدارة، وتشغيله وإيقافه وإعادة نشره. اخترsolution-managerإن كان يجب أن يعدّل إعداداته أيضًا؛ ولا يسمح له أيّ من الإعدادين بحذفه. - حين تنتهي المهمّة، اسحب المنح أو أزله من المؤسّسة.
لا يرى أبدًا تطبيقاتك أو قواعد بياناتك أو فاتورتك، ولا يستطيع تمرير المتجر لأحد
آخر، لأن أيًّا من الإعدادين لا يتضمّن sol:share.
أعطِ متعاقدًا مستودعًا واحدًا
انظر مستودعات Git: العضو الذي ربط المستودع يمنح
المتعاقد repo-deployer عليه، فيستطيع المتعاقد بناء التطبيقات المبنية منه ونشرها
دون أن يُمنح كل واحد منها على حدة.
حالات حدّية يحسن معرفتها قبل أن تصادفها
لا يجد عضو تطبيقًا موجودًا. ألّا يملك شيئًا على مورد يبدو تمامًا كعدم وجوده، فلا يستطيع الأعضاء اكتشاف ما يشغّله زملاؤهم بتخمين الأسماء. امنحه الوصول، أو ضعه في مجموعة ترى كل التطبيقات.
"You do not have 'app:deploy' on this application" من شخص يستطيع رؤيته. هو يملك شيئًا، فالمورد ليس مخفيًا عنه، لكنه لا يملك هذه القدرة. تسرد رسالة الخطأ ما يملكه.
لا يستطيع مسؤول البناء من مستودع خاص لزميله. للمستودعات قواعدها الخاصة: العضو الذي ربط الحساب هو من يقرّر، والمستودع الخاص مغلق حتى أمام المالك. انظر مستودعات Git.
لا يمكن تعديل مجموعة مدمجة. ابنِ مجموعتك الخاصة فوقها بـ --inherits.
يُرفض أمر في الـ CLI بينما يعمل في وحدة التحكّم. وُوفق على بيانات الاعتماد
بصلاحيات أقلّ ممّا تملك. يبيّن isogrid whoami أيّها؛ ويوافق
isogrid login --force على بيانات اعتماد أوسع.
ماذا تقرأ بعد ذلك
- مستودعات Git — من يجوز له البناء من ماذا.
- المستودعات والمجموعات والصلاحيات — الشيء نفسه، من الطرفية.