معيار 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، راجع المقالات التالية: