الفصل 9.1 - التحكم في الوصول المستند إلى الأدوار (RBAC)
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- فهم ما هو RBAC ولماذا يتم استخدامه
- إنشاء Roles و ClusterRoles
- إنشاء RoleBindings و ClusterRoleBindings
- فهم الأفعال والموارد
- إدارة أذونات المستخدمين وحسابات الخدمة
- تطبيق مبدأ أقل امتياز
مقدمة
التحكم في الوصول المستند إلى الأدوار (RBAC) هو آلية التفويض في Kubernetes التي تسمح بالتحكم في من يمكنه فعل ماذا في العنقود. إنه ضروري للأمان والامتثال.
المفاهيم الأساسية
Roles مقابل ClusterRoles
Role: أذونات في نطاق namespace محدد
ClusterRole: أذونات على مستوى العنقود (جميع النطاقات)
RoleBindings مقابل ClusterRoleBindings
RoleBinding: يربط Role بمستخدمين في نطاق namespace
ClusterRoleBinding: يربط ClusterRole بمستخدمين على مستوى العنقود
إنشاء Role
Role أساسي
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # مجموعة API الأساسية (بدون بادئة)
resources: ["pods"]
verbs: ["get", "watch", "list"]
النتيجة: يسمح بقراءة الـ Pods في نطاق default.
Role مع موارد متعددة
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: production
name: app-manager
rules:
- apiGroups: [""]
resources: ["pods", "services", "configmaps"]
verbs: ["get", "list", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]
resources: ["deployments", "replicasets"]
verbs: ["get", "list", "create", "update", "patch", "delete"]
إنشاء ClusterRole
ClusterRole للعقد
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: node-reader
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "watch", "list"]
النتيجة: يسمح بقراءة العقد في جميع أنحاء العنقود.
ClusterRole مع ResourceNames
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["my-secret", "another-secret"]
verbs: ["get", "list"]
النتيجة: الوصول فقط إلى الأسرار المحددة.
الأفعال (الإجراءات)
الأفعال تحدد الإجراءات المسموح بها:
| الفعل | الوصف |
|---|---|
get | قراءة مورد |
list | سرد الموارد |
watch | مراقبة الموارد |
create | إنشاء مورد |
update | تحديث مورد |
patch | تعديل جزئي لمورد |
delete | حذف مورد |
deletecollection | حذف عدة موارد |
الرمز العام: * لجميع الإجراءات.
الموارد
الموارد هي كائنات Kubernetes:
pods,services,configmaps,secretsdeployments,replicasets,statefulsetsnodes,namespaces,persistentvolumes- إلخ.
الرمز العام: * لجميع الموارد.
RoleBinding
ربط Role بمستخدم
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: alice
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
ربط Role بحساب خدمة
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: ServiceAccount
name: my-app-sa
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
ربط ClusterRole بمستخدم (نطاق Namespace)
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-nodes
namespace: default
subjects:
- kind: User
name: bob
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: node-reader
apiGroup: rbac.authorization.k8s.io
النتيجة: يمكن لـ Bob قراءة العقد، ولكن فقط في نطاق default.
ClusterRoleBinding
ربط ClusterRole على مستوى العنقود
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-admin-binding
subjects:
- kind: User
name: admin
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
النتيجة: المستخدم admin لديه أذونات cluster-admin في جميع أنحاء العنقود.
الأدوار المعرفة مسبقًا
يوفر Kubernetes ClusterRoles معرفة مسبقًا:
cluster-admin
وصول كامل إلى العنقود:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-admin
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
- nonResourceURLs: ["*"]
verbs: ["*"]
admin
وصول كامل في نطاق namespace:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: admin
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
edit
يمكنه تعديل الموارد (باستثناء RBAC):
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: edit
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
- apiGroups: ["rbac.authorization.k8s.io"]
resources: ["*"]
verbs: [] # لا يوجد وصول RBAC
view
قراءة فقط:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: view
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["get", "list", "watch"]
مثال كامل: مطور
الخطوة 1: إنشاء Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: development
name: developer
rules:
- apiGroups: [""]
resources: ["pods", "services", "configmaps", "secrets"]
verbs: ["get", "list", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]
resources: ["deployments", "replicasets"]
verbs: ["get", "list", "create", "update", "patch", "delete"]
الخطوة 2: إنشاء RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: developer-binding
namespace: development
subjects:
- kind: User
name: developer1
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: developer
apiGroup: rbac.authorization.k8s.io
النتيجة: يمكن لـ developer1 إدارة التطبيقات في نطاق development.
أوامر مفيدة
التحقق
# عرض الأدوار
kubectl get roles
kubectl get rolebinding
# عرض ClusterRoles
kubectl get clusterroles
kubectl get clusterrolebinding
# التفاصيل
kubectl describe role pod-reader
kubectl describe rolebinding read-pods
# التحقق من الأذونات
kubectl auth can-i create pods --namespace=default
kubectl auth can-i delete deployments --namespace=production
اختبار الأذونات
# اختبار كمستخدم
kubectl get pods --as=developer1
# عرض أذونات المستخدم
kubectl auth can-i --list --as=developer1 --namespace=development
أفضل الممارسات
1. مبدأ أقل امتياز
إعطاء الأذونات الضرورية فقط.
2. أدوار محددة
إنشاء أدوار محددة بدلاً من استخدام cluster-admin.
3. عزل النطاقات
استخدام النطاقات لعزل البيئات.
4. حسابات الخدمة
استخدام حسابات الخدمة للتطبيقات بدلاً من المستخدمين.
5. التدقيق
تفعيل تسجيل التدقيق لتتبع الوصول.
ملخص
في هذا الفصل، تعلمت:
RBAC: التحكم في الوصول المستند إلى الأدوار
Roles: أذونات في نطاق namespace
ClusterRoles: أذونات على مستوى العنقود
RoleBindings: ربط الأدوار بالمستخدمين/حسابات الخدمة
الأفعال: الإجراءات المسموح بها (get، list، create، update، delete، إلخ.)
الموارد: كائنات Kubernetes (pods، services، deployments، إلخ.)
الأدوار المعرفة مسبقًا: cluster-admin، admin، edit، view
أفضل الممارسات: أقل امتياز، أدوار محددة، عزل
الخطوات التالية
الفصل 9.2: حسابات الخدمة
الفصل 9.3: سياسات الشبكة
المختبر 9.1: تكوين RBAC لمستخدم
تم إنشاء الفصل في: ديسمبر 2024