معيار Kubernetes لمركز أمان الإنترنت (CIS)
كخدمة آمنة، تتوافق خدمةAzure Kubernetes (AKS) مع معايير SOC وISO وPCI DSS وHIPAA. تتناول هذه المقالة تصلب الأمان المطبق على AKS استنادا إلى معيار CIS Kubernetes. لمزيد من المعلومات حول أمان AKS، راجع مفاهيم الأمان للتطبيقات وأنظمة المجموعة في خدمةAzure Kubernetes (AKS). لمزيد من المعلومات، يجب مراجعةمركز معايير أمان الإنترنت (CIS) .
معيار CIS Kubernetes
فيما يلي نتائج توصيات CIS Kubernetes V1.27 Benchmark v1.8.0 على AKS. تنطبق النتائج على AKS 1.21.x من خلال AKS 1.27.x.
تؤثر التوصيات المسجلة على درجة المعيار إذا لم يتم تطبيقها، بينما لا تؤثر التوصيات غير المسجلة .
توفر معايير CIS مستويين من إعدادات الأمان:
- توصي L1 أو المستوى 1 بمتطلبات الأمان المبدئية الأساسية التي يمكن تكوينها على أي نظام ويجب أن تتسبب في انقطاع الخدمة أو انخفاض الوظائف أو عدم انقطاعها.
- توصي L2 أو المستوى 2 بإعدادات الأمان للبيئات التي تتطلب أمانًا أكبر قد يؤدي إلى بعض الوظائف المنخفضة.
يمكن للتوصيات أن تكون على الحالات الآتية:
- Pass - تم تطبيق التوصية.
- فشل - لم يتم تطبيق التوصية.
- N/A - تتعلق التوصية بمتطلبات أذونات ملف البيان غير ذات الصلة بـ AKS. تستخدم مجموعات Kubernetes بشكل افتراضي نموذج بيان لنشر وحدات القرون لمستوى التحكم، والتي تعتمد على الملفات من العقدة VM. يوصي معيار CIS Kubernetes هذه الملفات يجب أن يكون لها متطلبات أذونات معينة. تستخدم مجموعات AKS مخطط Helm لنشر وحدات وحدة التحكم ولا تعتمد على الملفات في العقدة VM.
- يعتمد على البيئة - يتم تطبيق التوصية في بيئة المستخدم المحددة ولا يتم التحكم فيها بواسطة AKS. تؤثر التوصيات المسجلة على درجة المعيار سواء كانت التوصية تنطبق على بيئة المستخدم المحددة أم لا.
- التحكم المكافئ - تم تنفيذ التوصية بطريقة مختلفة ومكافئة.
معرّف CIS | وصف التوصية | نوع التسجيل | المستوى | الحالة |
---|---|---|---|---|
1 | مكونات وحدة التحكم | |||
1.1 | ملفات تكوين عقدة وحدة التحكم | |||
1.1.1 | تأكد من تعيين أذونات ملف مواصفات خادم API إلى 600 أو أكثر تقييدا | مسجل | L1 | غير متوفر |
1.1.2 | تأكد من تعيين ملكية ملف مواصفات خادم API إلى root:root | مسجل | L1 | غير متوفر |
1.1.3 | تأكد من تعيين أذونات ملف مواصفات وحدة التحكم pod إلى 600 أو أكثر تقييدا | مسجل | L1 | غير متوفر |
1.1.4 | تأكد من تعيين ملكية ملف مواصفات عقدة وحدة التحكم إلى root:root | مسجل | L1 | غير متوفر |
1.1.5 | تأكد من تعيين أذونات ملف مواصفات جراب المجدول إلى 600 أو أكثر تقييدا | مسجل | L1 | غير متوفر |
1.1.6 | تأكد من تعيين ملكية ملف مواصفات جراب المجدول إلى root:root | مسجل | L1 | غير متوفر |
1.1.7 | تأكد من تعيين أذونات ملف مواصفات جراب etcd إلى 600 أو أكثر تقييدا | مسجل | L1 | غير متوفر |
1.1.8 | تأكد من تعيين ملكية ملف مواصفات عقدة etcd إلى root:root | مسجل | L1 | غير متوفر |
1.1.9 | تأكد من تعيين أذونات ملف واجهة شبكة الحاوية إلى 600 أو أكثر تقييدا | غير مسجل | L1 | غير متوفر |
1.1.10 | تأكد من تعيين ملكية ملف واجهة شبكة الحاوية إلى root:root | غير مسجل | L1 | غير متوفر |
1.1.11 | تأكد من تعيين أذونات دليل البيانات إلى 700 أو أكثر تقييدًا | مسجل | L1 | غير متوفر |
1.1.12 | تأكد من تعيين ملكية دليل البيانات إلى etcd:etcd | مسجل | L1 | غير متوفر |
1.1.13 | تأكد من تعيين أذونات الملف admin.conf إلى 600 أو أكثر تقييدا | مسجل | L1 | غير متوفر |
1.1.14 | تأكد من تعيين ملكية الملف admin.conf إلى root:root | مسجل | L1 | غير متوفر |
1.1.15 | تأكد من تعيين أذونات الملف scheduler.conf إلى 600 أو أكثر تقييدا | مسجل | L1 | غير متوفر |
1.1.16 | تأكد من تعيين ملكية ملف scheduler.conf إلى root:root | مسجل | L1 | غير متوفر |
1.1.17 | تأكد من تعيين أذونات الملف controller-manager.conf إلى 600 أو أكثر تقييدا | مسجل | L1 | غير متوفر |
1.1.18 | تأكد من تعيين ملكية ملف controller-manager.conf إلى root:root | مسجل | L1 | غير متوفر |
1.1.19 | تأكد من تعيين دليل Kubernetes PKI وملكية الملف إلى root:root | مسجل | L1 | غير متوفر |
1.1.20 | تأكد من تعيين أذونات ملف شهادة Kubernetes PKI إلى 600 أو أكثر تقييدا | مسجل | L1 | غير متوفر |
1.1.21 | تأكد من تعيين أذونات ملف مفتاح Kubernetes PKI إلى 600 | مسجل | L1 | غير متوفر |
1.2 | API Server | |||
1.2.1 | تأكد من تعيين الوسيطة --anonymous-auth إلى خاطئ |
غير مسجل | L1 | نجاح |
1.2.2 | تأكد من عدم تعيين المعلمة --token-auth-file |
مسجل | L1 | فشل |
1.2.3 | تأكد من عدم --DenyServiceExternalIPs تعيين |
مسجل | L1 | فشل |
1.2.4 | تأكد من تعيين الوسيطتين --kubelet-client-certificate و --kubelet-client-key حسب الاقتضاء |
مسجل | L1 | نجاح |
1.2.5 | تأكد من تعيين الوسيطة --kubelet-certificate-authority حسب الاقتضاء |
مسجل | L1 | فشل |
1.2.6 | تأكد من عدم تعيين الوسيطة --authorization-mode إلى AlwaysAllow |
مسجل | L1 | نجاح |
1.2.7 | تأكد من أن الوسيطة --authorization-mode تتضمن Node |
مسجل | L1 | نجاح |
1.2.8 | تأكد من أن الوسيطة --authorization-mode تتضمن RBAC |
مسجل | L1 | نجاح |
1.2.9 | تأكد من تعيين المكون الإضافي للتحكم في القبول EventRateLimit | غير مسجل | L1 | فشل |
1.2.10 | تأكد من عدم تعيين المكون الإضافي للتحكم في القبول AlwaysAdmit | مسجل | L1 | نجاح |
1.2.11 | تأكد من تعيين المكون الإضافي للتحكم في القبول AlwaysPullImages | غير مسجل | L1 | فشل |
1.2.12 | تأكد من تعيين المكون الإضافي للتحكم في القبول SecurityContextDeny إذا لم يتم استخدام PodSecurityPolicy | غير مسجل | L1 | فشل |
1.2.13 | تأكد من تعيين المكون الإضافي للتحكم في القبول ServiceAccount | مسجل | L1 | نجاح |
1.2.14 | تأكد من تعيين المكون الإضافي لعنصر التحكم في القبول NamespaceLifecycle | مسجل | L1 | نجاح |
1.2.15 | تأكد من تعيين المكون الإضافي للتحكم في القبول NodeRestriction | مسجل | L1 | نجاح |
1.2.16 | تأكد من عدم تعيين الوسيطة --secure-port إلى 0 |
مسجل | L1 | نجاح |
1.2.17 | تأكد من تعيين الوسيطة --profiling إلى خاطئ |
مسجل | L1 | نجاح |
1.2.18 | تأكد من تعيين الوسيطة --audit-log-path |
مسجل | L1 | عنصر تحكم مكافئ |
1.2.19 | تأكد من تعيين الوسيطة --audit-log-maxage إلى 30 أو حسب الاقتضاء |
مسجل | L1 | عنصر تحكم مكافئ |
1.2.20 | تأكد من تعيين الوسيطة --audit-log-maxbackup إلى 10 أو حسب الاقتضاء |
مسجل | L1 | نجاح |
1.2.21 | تأكد من تعيين الوسيطة --audit-log-maxsize إلى 100 أو حسب الاقتضاء |
مسجل | L1 | نجاح |
1.2.22 | تأكد من تعيين الوسيطة --request-timeout حسب الاقتضاء |
مسجل | L1 | نجاح |
1.2.23 | تأكد من تعيين الوسيطة --service-account-lookup إلى صحيح |
مسجل | L1 | نجاح |
1.2.24 | تأكد من تعيين الوسيطة --service-account-key-file حسب الاقتضاء |
مسجل | L1 | نجاح |
1.2.25 | تأكد من تعيين الوسيطتين --etcd-certfile و --etcd-keyfile حسب الاقتضاء |
مسجل | L1 | نجاح |
1.2.26 | تأكد من تعيين الوسيطتين --tls-cert-file و --tls-private-key-file حسب الاقتضاء |
مسجل | L1 | نجاح |
1.2.27 | تأكد من تعيين الوسيطة --client-ca-file حسب الاقتضاء |
مسجل | L1 | نجاح |
1.2.28 | تأكد من تعيين الوسيطة --etcd-cafile حسب الاقتضاء |
مسجل | L1 | يعتمد على البيئة |
1.2.29 | تأكد من تعيين الوسيطة --encryption-provider-config حسب الاقتضاء |
مسجل | L1 | يعتمد على البيئة |
1.2.30 | تأكد من تكوين موفري التشفير بشكل مناسب | مسجل | L1 | يعتمد على البيئة |
1.2.31 | تأكد من أن خادم واجهة برمجة التطبيقات يستخدم فقط Strong Cryptographic Ciphers | غير مسجل | L1 | نجاح |
1.3 | مدير وحدة التحكم | |||
1.3.1 | تأكد من تعيين الوسيطة --terminated-pod-gc-threshold حسب الاقتضاء |
مسجل | L1 | نجاح |
1.3.2 | تأكد من تعيين الوسيطة --profiling إلى خاطئ |
مسجل | L1 | نجاح |
1.3.3 | تأكد من تعيين الوسيطة --use-service-account-credentials إلى صحيح |
مسجل | L1 | نجاح |
1.3.4 | تأكد من تعيين الوسيطة --service-account-private-key-file حسب الاقتضاء |
مسجل | L1 | نجاح |
1.3.5 | تأكد من تعيين الوسيطة --root-ca-file حسب الاقتضاء |
مسجل | L1 | نجاح |
1.3.6 | تأكد من تعيين الوسيطة RotateKubeletServerCertificate إلى صحيح | مسجل | L2 | فشل |
1.3.7 | تأكد من تعيين الوسيطة --bind-address إلى 127.0.0.1 |
مسجل | L1 | عنصر تحكم مكافئ |
1.4 | Scheduler | |||
1.4.1 | تأكد من تعيين الوسيطة --profiling إلى خاطئ |
مسجل | L1 | نجاح |
1.4.2 | تأكد من تعيين الوسيطة --bind-address إلى 127.0.0.1 |
مسجل | L1 | عنصر تحكم مكافئ |
2 | etcd | |||
2.1 | تأكد من تعيين الوسيطتين --cert-file و --key-file حسب الاقتضاء |
مسجل | L1 | نجاح |
2.2 | تأكد من تعيين الوسيطة --client-cert-auth إلى صحيح |
مسجل | L1 | نجاح |
2.3 | تأكد من عدم تعيين الوسيطة --auto-tls إلى true |
مسجل | L1 | نجاح |
2.4 | تأكد من تعيين الوسيطتين --peer-cert-file و --peer-key-file حسب الاقتضاء |
مسجل | L1 | نجاح |
2.5 | تأكد من تعيين الوسيطة --peer-client-cert-auth إلى صحيح |
مسجل | L1 | نجاح |
2.6 | تأكد من عدم تعيين الوسيطة --peer-auto-tls إلى true |
مسجل | L1 | نجاح |
2.7 | تأكد من استخدام مرجع مصدق فريد لـ etcd | غير مسجل | L2 | نجاح |
3 | تكوين وحدة التحكم | |||
3.1 | المصادقة والتخويل | |||
3.1.1 | يجب عدم استخدام مصادقة شهادة العميل للمستخدمين | غير مسجل | L2 | نجاح |
3.1.2 | يجب عدم استخدام مصادقة الرمز المميز لحساب الخدمة للمستخدمين | غير مسجل | L2 | نجاح |
3.1.3 | يجب عدم استخدام مصادقة رمز Bootstrap المميز للمستخدمين | غير مسجل | L2 | نجاح |
3.2 | تسجيل الدخول | |||
3.2.1 | تأكد من إنشاء نهج تدقيق الحد الأدنى | مسجل | L1 | نجاح |
3.2.2 | التأكد من أن سياسة التدقيق تغطي الشواغل الأمنية الرئيسية | غير مسجل | L2 | نجاح |
4 | العُقد العاملة | |||
4.1 | ملفات تكوين العقد العاملة | |||
4.1.1 | تأكد من تعيين أذونات ملف خدمة kubelet إلى 600 أو أكثر تقييدا | مسجل | L1 | نجاح |
4.1.2 | تأكد من تعيين ملكية ملف خدمة kubelet إلى root:root | مسجل | L1 | نجاح |
4.1.3 | إذا كان ملف kubeconfig للوكيل موجودا، فتأكد من تعيين الأذونات إلى 600 أو أكثر تقييدا | مسجل | L1 | غير متوفر |
4.1.4 | إذا كان ملف kubeconfig الوكيل موجودا، فتأكد من تعيين الملكية إلى root:root | مسجل | L1 | غير متوفر |
4.1.5 | تأكد من --kubeconfig تعيين أذونات ملف kubelet.conf إلى 600 أو أكثر تقييدا |
مسجل | L1 | نجاح |
4.1.6 | تأكد من --kubeconfig تعيين ملكية ملف kubelet.conf إلى root:root |
مسجل | L1 | نجاح |
4.1.7 | تأكد من تعيين أذونات ملف المراجع المصدقة إلى 600 أو أكثر تقييدا | مسجل | L1 | نجاح |
4.1.8 | تأكد من تعيين ملكية ملف المراجع المصدقة للعميل إلى root:root | مسجل | L1 | نجاح |
4.1.9 | إذا كان ملف تكوين kubelet config.yaml قيد الاستخدام، فتأكد من تعيين الأذونات إلى 600 أو أكثر تقييدا | مسجل | L1 | نجاح |
4.1.10 | إذا كان ملف تكوين kubelet config.yaml قيد الاستخدام، فتأكد من تعيين ملكية الملف إلى root:root | مسجل | L1 | نجاح |
4.2 | Kubelet | |||
4.2.1 | تأكد من تعيين الوسيطة --anonymous-auth إلى خاطئ |
مسجل | L1 | نجاح |
4.2.2 | تأكد من عدم تعيين الوسيطة --authorization-mode إلى AlwaysAllow |
مسجل | L1 | نجاح |
4.2.3 | تأكد من تعيين الوسيطة --client-ca-file حسب الاقتضاء |
مسجل | L1 | نجاح |
4.2.4 | تأكد من تعيين الوسيطة --read-only-port إلى 0 |
مسجل | L1 | نجاح |
4.2.5 | تأكد من عدم تعيين الوسيطة --streaming-connection-idle-timeout إلى 0 |
مسجل | L1 | نجاح |
4.2.6 | تأكد من تعيين الوسيطة --protect-kernel-defaults إلى صحيح |
مسجل | L1 | نجاح |
4.2.7 | تأكد من تعيين الوسيطة --make-iptables-util-chains إلى صحيح |
مسجل | L1 | نجاح |
4.2.8 | تأكد من عدم تعيين الوسيطة --hostname-override |
غير مسجل | L1 | نجاح |
4.2.9 | تأكد من تعيين وسيطة eventRecordQPS إلى مستوى يضمن التقاط الحدث المناسب | غير مسجل | L2 | نجاح |
4.2.10 | تأكد من تعيين الوسيطتين --tls-cert-file و --tls-private-key-file حسب الاقتضاء |
مسجل | L1 | نجاح |
4.2.11 | تأكد من عدم تعيين الوسيطة --rotate-certificates إلى false |
مسجل | L1 | نجاح |
4.2.12 | تأكد من تعيين الوسيطة RotateKubeletServerCertificate إلى صحيح | مسجل | L1 | نجاح |
4.2.13 | تأكد من أن Kubelet يستخدم فقط شفرات التشفير القوية | غير مسجل | L1 | نجاح |
5 | السياسات | |||
5.1 | RBAC وحسابات الخدمة | |||
5.1.1 | تأكد من استخدام دور مسؤول نظام المجموعة فقط عند الحاجة | غير مسجل | L1 | يعتمد على البيئة |
5.1.2 | تقليل الوصول إلى البيانات السرية | غير مسجل | L1 | يعتمد على البيئة |
5.1.3 | تقليل استخدام حرف البدل في Roles وClusterRoles إلى الحد الأدنى | غير مسجل | L1 | يعتمد على البيئة |
5.1.4 | تقليل الوصول إلى إنشاء عقدات إلى الحد الأدنى | غير مسجل | L1 | يعتمد على البيئة |
5.1.5 | تأكد من عدم استخدام حسابات الخدمة الافتراضية بشكل نشط | مسجل | L1 | يعتمد على البيئة |
5.1.6 | تأكد من تحميل الرموز المميزة لحساب الخدمة فقط عند الضرورة | غير مسجل | L1 | يعتمد على البيئة |
5.1.7 | تجنب استخدام مجموعة system:masters | غير مسجل | L1 | يعتمد على البيئة |
5.1.8 | تقييد استخدام أذونات الربط والانتحال والتصعيد في مجموعة Kubernetes | غير مسجل | L1 | يعتمد على البيئة |
5.1.9 | تقليل الوصول لإنشاء وحدات تخزين ثابتة | غير مسجل | L1 | يعتمد على البيئة |
5.1.10 | تقليل الوصول إلى المورد الفرعي للعقد للوكيل | غير مسجل | L1 | يعتمد على البيئة |
5.1.11 | تقليل الوصول إلى المورد الفرعي للموافقة على كائنات certificatesigningrequests | غير مسجل | L1 | يعتمد على البيئة |
5.1.12 | تقليل الوصول إلى كائنات تكوين خطاف الويب | غير مسجل | L1 | يعتمد على البيئة |
5.1.13 | تقليل الوصول إلى إنشاء الرمز المميز لحساب الخدمة | غير مسجل | L1 | يعتمد على البيئة |
5.2 | نهج أمان العقدة | |||
5.2.1 | تأكد من أن المجموعة لديها آلية واحدة على الأقل للتحكم في النهج النشط | غير مسجل | L1 | يعتمد على البيئة |
5.2.2 | تقليل قبول الحاويات المتميزة إلى الحد الأدنى | غير مسجل | L1 | يعتمد على البيئة |
5.2.3 | تقليل قبول الحاويات الراغبة في مشاركة مساحة اسم معرف عملية المضيف | مسجل | L1 | يعتمد على البيئة |
5.2.4 | تقليل قبول الحاويات الراغبة في مشاركة مساحة اسم IPC المضيف | مسجل | L1 | يعتمد على البيئة |
5.2.5 | تقليل قبول الحاويات التي ترغب في مشاركة مساحة اسم الشبكة المضيفة | مسجل | L1 | يعتمد على البيئة |
5.2.6 | تقليل قبول الحاويات باستخدام allowPrivilegeEscalation | مسجل | L1 | يعتمد على البيئة |
5.2.6 | تقليل قبول حاويات الجذر | غير مسجل | L2 | يعتمد على البيئة |
5.2.7 | تقليل قبول الحاويات بقدرة NET_RAW | غير مسجل | L1 | يعتمد على البيئة |
5.2.8 | تقليل قبول الحاويات ذات الإمكانات المضافة | غير مسجل | L1 | يعتمد على البيئة |
5.2.9 | تقليل قبول الحاويات ذات الإمكانات المعينة | غير مسجل | L1 | يعتمد على البيئة |
5.2.10 | تقليل قبول الحاويات ذات الإمكانات المعينة | غير مسجل | L2 | |
5.2.11 | تقليل قبول حاويات Windows HostProcess | غير مسجل | L1 | يعتمد على البيئة |
5.2.12 | تقليل قبول وحدات تخزين HostPath | غير مسجل | L1 | يعتمد على البيئة |
5.2.13 | تقليل قبول الحاويات التي تستخدم HostPorts | غير مسجل | L1 | يعتمد على البيئة |
5.3 | نهج الشبكة وCNI | |||
5.3.1 | تأكد من أن CNI قيد الاستخدام يدعم نهج الشبكة | غير مسجل | L1 | نجاح |
5.3.2 | تأكد من أن كافة مساحات الأسماء لها نهج شبكة محددة | مسجل | L2 | يعتمد على البيئة |
5.4 | إدارة البيانات السرية | |||
5.4.1 | يفضل استخدام بيانات سرية كملفات على البيانات السرية كمتغيرات البيئة | غير مسجل | L1 | يعتمد على البيئة |
5.4.2 | ضع في اعتبارك التخزين السري الخارجي | غير مسجل | L2 | يعتمد على البيئة |
5.5 | التحكم في القبول القابل للتوسعة | |||
5.5.1 | تكوين مصدر صورة باستخدام وحدة تحكم قبول ImagePolicyWebhook | غير مسجل | L2 | فشل |
5.7 | النهج العامة | |||
5.7.1 | إنشاء حدود إدارية بين الموارد باستخدام مساحات الأسماء | غير مسجل | L1 | يعتمد على البيئة |
5.7.2 | تأكد من تعيين ملف تعريف seccomp إلى docker/default في تعريفات العقدة | غير مسجل | L2 | يعتمد على البيئة |
5.7.3 | تطبيق سياق الأمان على العقدات والحاويات الخاصة بك | غير مسجل | L2 | يعتمد على البيئة |
5.7.4 | يجب عدم استخدام مساحة الاسم الافتراضية | مسجل | L2 | يعتمد على البيئة |
إشعار
بالإضافة إلى معيار Kubernetes CIS، هناك معيار AKS CIS متاح أيضًا.
ملاحظات إضافية
- تم بناء نظام التشغيل الأمني المحصن وصيانته خصوصاً لـ AKS ولا يتم دعمه خارج منصة AKS.
- لتقليل مساحة سطح الهجوم، تم تعطيل بعض برامج تشغيل الوحدة النمطية kernel غير الضرورية في نظام التشغيل.
الخطوات التالية
لمزيد من المعلومات حول أمان AKS، راجع المقالات التالية: