أفضل الممارسات لأمن الحاويات في خدمة Azure Kubernetes (AKS)

أثناء تطوير التطبيقات وتشغيلها في خدمة Azure Kubernetes (AKS)، يعد أمان الحاويات أحد الاعتبارات الرئيسية. يجب تصميم التطبيقات الخاصة بك وفقًا لمبدأ أقل عدد من الامتيازات المطلوبة. الحفاظ على البيانات الخاصة آمنة هو أفضل شيء للعملاء. لا تريد أن يتم عرض بيانات الاعتماد مثل سلاسل اتصال قاعدة البيانات أو المفاتيح أو البيانات السرية والشهادات للعالم الخارجي حيث يمكن للمهاجم الاستفادة من هذه البيانات السرية لأغراض ضارة. لا تقم بإضافتها إلى التعليمات البرمجية أو تضمينها في صور الحاوية. ومن شأن هذا النهج أن يخلق خطرًا على التعرض ويحد من القدرة على تدوير بيانات الاعتماد هذه لأن صور الحاويات ستحتاج إلى إعادة بنائها.

تركز مقالة أفضل الممارسات هذه على كيفية تأمين الحاويات في AKS. ‏‫ستتعلم كيفية:

  • استخدام سياق أمان الحاوية لتقييد الوصول إلى العمليات والخدمات أو تصعيد الامتيازات
  • المصادقة مع موارد Azure الأخرى باستخدام هوية حمل عمل Microsoft Entra
  • طلب بيانات الاعتماد واستردادها من قبو رقمي مثل Azure Key Vault

يمكنك أيضًا قراءة أفضل ممارسات أمان نظام المجموعة وإدارة صورة الحاويات.

الوصول الآمن إلى الموارد

إرشادات أفضل الممارسات - لتشغيل كمستخدم أو مجموعة مختلفة والحد من الوصول إلى عمليات العقدة والخدمات الأساسية، قم بتعريف إعدادات سياق أمان الحاويات. تعيين أقل عدد من الامتيازات المطلوبة.

لكي تعمل التطبيقات بشكل صحيح، يجب تشغيل الحاويات كمستخدم أو مجموعة محددة وليس كجذر. securityContextالجراب أو الحاوية يتيح لك تعريف إعدادات مثل runAsUser أو fsGroup لتولي الأذونات المناسبة. قم بتعيين أذونات المستخدم أو المجموعة المطلوبة فقط، ولا تستخدم سياق الأمان كوسيلة لنفترض أذونات إضافية. runAsUser، وامتياز التصعيد، وغيرها من إعدادات قدرات Linux متوفرة فقط على عقد لينكس والحاويات.

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

يمكن لسياق أمان جراب أيضًا تحديد قدرات إضافية أو أذونات للوصول إلى العمليات والخدمات. يمكن تعيين تعريفات سياق الأمان الشائعة التالية:

  • allowPrivilegeEscalation يحدد ما إذا كانت الحاوية يمكن أن تمنح امتيازات الجذر. تصميم التطبيقات بحيث يتم تعيين هذا الإعداد دائمًا إلى false.
  • تسمح قدرات Linux لعمليات العقد الأساسية بالوصول إلى عمليات العقدة الخفية. احرص أثناء تعيين هذه القدرات. تعيين أقل عدد من الامتيازات المطلوبة. لمزيد من المعلومات، راجع قدرات Linux.
  • تسميات SELinux هي وحدة أمان نواة لينكس التي تمكنك من تحديد سياسات الوصول للخدمات والعمليات والوصول إلى نظام الملفات. مرة أخرى، تعيين أقل عدد من الامتيازات المطلوبة. لمزيد من المعلومات راجع خيارات SELinux في Kubernetes

حاوية YAML في المثال التالي تبين تعيين إعدادات سياق الأمان لتعريف:

  • حاوية يتم تشغيلها كمعرف مستخدم 1000 وجزء من معرف المجموعة 2000
  • لا يمكن تصعيد الامتيازات لاستخدامها root
  • تسمح قدرات Linux للوصول إلى واجهات الشبكة والمضيف في الوقت الحقيقي (الأجهزة) على مدار الساعة
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    fsGroup: 2000
  containers:
    - name: security-context-demo
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      securityContext:
        runAsUser: 1000
        allowPrivilegeEscalation: false
        capabilities:
          add: ["NET_ADMIN", "SYS_TIME"]

العمل مع عامل تشغيل نظام المجموعة لتحديد إعدادات سياق الأمان التي تحتاج إليها. حاول تصميم التطبيقات لتقليل أذونات إضافية والوصول إلى الحاوية المطلوبة. هناك ميزات أمان إضافية للحد من الوصول باستخدام AppArmor و seccomp (الحوسبة الآمنة) التي يمكن تنفيذها من قبل مشغلي نظام المجموعة. لمزيد من المعلومات، راجع تأمين وصول الحاوية إلى الموارد.

الحد من التعرض لبيانات الاعتماد

إرشادات أفضل الممارسات - لا تقم بتعريف بيانات الاعتماد في التعليمات البرمجية للتطبيق. استخدم الهويات المدارة لموارد Azure للسماح لوصول طلب حاويتك إلى موارد أخرى. كما يجب استخدام قبو رقمي، مثل Azure Key Vault، لتخزين المفاتيح الرقمية وبيانات الاعتماد واستردادها. الهويات المدارة بواسطة Pod مخصصة للاستخدام مع حاويات Linux وصور الحاوية فقط.

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

استخدام هوية حمل عمل Microsoft Entra

هوية حمل العمل هي هوية يستخدمها تطبيق يعمل على جراب يمكنه مصادقة نفسه مقابل خدمات Azure الأخرى التي تدعمها، مثل التخزين أو SQL. وهو يتكامل مع القدرات الأصلية ل Kubernetes للاتحاد مع موفري الهوية الخارجيين. في نموذج الأمان هذا، يعمل نظام مجموعة AKS كمصدر للرمز المميز، ويستخدم معرف Microsoft Entra الاتصال OpenID لاكتشاف مفاتيح التوقيع العامة والتحقق من صحة رمز حساب الخدمة المميز قبل تبادله مع رمز Microsoft Entra المميز. يمكن أن يتبادل حمل العمل الخاص بك رمزا مميزا لحساب الخدمة تم إسقاطه إلى وحدة التخزين الخاصة به للرمز المميز ل Microsoft Entra باستخدام مكتبة عميل Azure Identity باستخدام Azure SDK أو مكتبة مصادقة Microsoft (MSAL).

لمزيد من المعلومات حول هويات حمل العمل، راجع تكوين نظام مجموعة AKS لاستخدام هوية حمل عمل Microsoft Entra مع تطبيقاتك

استخدام Azure Key Vault مع Secrets Store CSI Driver

يتيح استخدام هوية حمل عمل Microsoft Entra المصادقة مقابل دعم خدمات Azure. بالنسبة للخدمات أو التطبيقات الخاصة بك من دون الهويات المدارة لموارد Azure، لا يزال بإمكانك المصادقة باستخدام بيانات الاعتماد أو المفاتيح. يمكن استخدام قبو رقمي لتخزين هذه المحتويات السرية.

عندما تحتاج التطبيقات إلى بيانات اعتماد، فإنها تتواصل مع القبو الرقمي، وتسترجع أحدث المحتويات السرية، ثم تتصل بالخدمة المطلوبة. يمكن أن يكون Azure Key Vault هو هذا القبو الرقمي. يظهر سير العمل المبسط لاسترداد بيانات اعتماد من Azure Key Vault باستخدام الهويات المدارة في الرسم التخطيطي التالي:

Simplified workflow for retrieving a credential from Key Vault using a pod managed identity

باستخدام Key Vault، يمكنك تخزين الأسرار وتدويرها بانتظام مثل بيانات الاعتماد أو مفاتيح حساب التخزين أو الشهادات. يمكنك دمج Azure Key Vault مع نظام مجموعة AKS باستخدام Azure Key Vault provider لـSecrets Store CSI Driver. يتيح Secrets Store CSI driver لمجموعة AKS استرداد المحتويات السرية من Key Vault وتوفيرها بأمان فقط إلى الحاوية الطالبة. العمل مع عامل تشغيل نظام المجموعة لنشر Secrets Store CSI Driver على العقد العاملة AKS. يمكنك استخدام هوية حمل عمل Microsoft Entra لطلب الوصول إلى Key Vault واسترداد المحتويات السرية المطلوبة من خلال Secrets Store CSI Driver.

الخطوات التالية

ركزت هذه المقالة على كيفية تأمين الحاويات الخاصة بك. لتنفيذ بعض هذه المناطق راجع المقالات التالية: