استخدام قبول أمان Pod في خدمة Azure Kubernetes (AKS)

يستخدم Pod Security Admission (PSA) التسميات لفرض نهج Pod Security Standards على الحجيرات التي تعمل في مساحة الاسم. في AKS، يتم تمكين Pod Security Admission بشكل افتراضي. لمزيد من المعلومات حول قبول أمان Pod ومعايير أمان Pod، راجع فرض معايير أمان Pod باستخدام تسميات مساحة الاسم ومعايير أمان Pod.

Pod Security Admission هو حل نهج مضمن لعمليات تنفيذ نظام مجموعة واحد. إذا كنت ترغب في استخدام نهج على مستوى المؤسسة، نوصي باستخدام نهج Azure.

قبل البدء

  • اشتراك Azure. إذا لم يكن لديك اشتراك Azure، يمكنك إنشاء حساب مجاني.
  • Azure CLI مُثبت.
  • نظام مجموعة AKS موجود يعمل بالإصدار 1.23 من Kubernetes أو أعلى.

تمكين قبول أمان Pod لمساحة اسم في مجموعتك

تمكين PSA لمساحة اسم واحدة

  • قم بتمكين PSA لمساحة اسم واحدة في نظام المجموعة باستخدام kubectl label الأمر وتعيين التسمية pod-security.kubernetes.io/enforce بقيمة النهج التي تريد فرضها. يمكن restricted المثال التالي النهج لمساحة اسم NAMESPACE .

    kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=restricted
    

تمكين PSA لجميع مساحات الأسماء

  • قم بتمكين PSA لكافة مساحات الأسماء في نظام المجموعة باستخدام kubectl label الأمر وتعيين التسمية pod-security.kubernetes.io/warn بقيمة النهج التي تريد فرضها. يتيح المثال التالي النهج لكافة baseline مساحات الأسماء في نظام المجموعة الخاص بك. ينشئ هذا النهج تحذيرا يواجه المستخدم إذا تم نشر أي pods إلى مساحة اسم لا تفي بنهج الأساس .

    kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=baseline
    

فرض نهج قبول أمان Pod مع التوزيع

  1. إنشاء مساحة kubectl create namespace اسم باستخدام الأمر .

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. تمكين نهج PSA لكل مساحة اسم، واحد مع restricted النهج والآخر مع النهج baseline ، باستخدام kubectl label الأمر .

    kubectl label --overwrite ns test-restricted pod-security.kubernetes.io/enforce=restricted pod-security.kubernetes.io/warn=restricted
    kubectl label --overwrite ns test-privileged pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/warn=privileged
    

    يقوم هذا بتكوين test-restricted مساحات الأسماء و test-privileged لحظر تشغيل الحجيرات وإنشاء تحذير مواجه للمستخدم إذا كانت أي pods لا تفي بمحاولة تشغيل النهج المكونة.

  3. حاول نشر pods إلى test-restricted مساحة الاسم باستخدام kubectl apply الأمر . ينتج عن هذا الأمر خطأ لأنه test-restricted تم تكوين مساحة الاسم لحظر الحجيرات التي لا تفي بالنهج restricted .

    kubectl apply --namespace test-restricted -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
    

    يظهر إخراج المثال التالي تحذيرا يفيد بأن الحجيرات تنتهك النهج المكون:

    ...
    Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "azure-vote-back" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "azure-vote-back" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "azure-vote-back" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "azure-vote-back" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
    deployment.apps/azure-vote-back created
    service/azure-vote-back created
    Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "azure-vote-front" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "azure-vote-front" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "azure-vote-front" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "azure-vote-front" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
    deployment.apps/azure-vote-front created
    service/azure-vote-front created
    
  4. تأكد من عدم وجود pods قيد التشغيل في test-restricted مساحة الاسم باستخدام kubectl get pods الأمر .

    kubectl get pods --namespace test-restricted
    

    يظهر إخراج المثال التالي أي جرابات قيد التشغيل في test-restricted مساحة الاسم:

    No resources found in test-restricted namespace.
    
  5. حاول نشر pods إلى test-privileged مساحة الاسم باستخدام kubectl apply الأمر . هذه المرة، يجب نشر pods بنجاح لأنه test-privileged تم تكوين مساحة الاسم للسماح بوحدات الجراب التي تنتهك النهج privileged .

    kubectl apply --namespace test-privileged -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
    

    يظهر إخراج المثال التالي وحدات الجراب التي تم نشرها بنجاح:

    deployment.apps/azure-vote-back created
    service/azure-vote-back created
    deployment.apps/azure-vote-front created
    service/azure-vote-front created
    
  6. تأكد من أن لديك pods قيد التشغيل في test-privileged مساحة الاسم باستخدام kubectl get pods الأمر .

    kubectl get pods --namespace test-privileged
    

    يظهر إخراج المثال التالي جرابين قيد التشغيل في test-privileged مساحة الاسم:

    NAME                               READY   STATUS    RESTARTS   AGE
    azure-vote-back-6fcdc5cbd5-svbdf   1/1     Running   0          2m29s
    azure-vote-front-5f4b8d498-tqzwv   1/1     Running   0          2m28s
    
  7. قم بإزالة test-restricted مساحات الأسماء و test-privileged باستخدام kubectl delete الأمر .

    kubectl delete namespace test-restricted test-privileged
    

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

في هذه المقالة، تعلمت كيفية تمكين Pod Security Admission من نظام مجموعة AKS. لمزيد من المعلومات حول قبول أمان Pod، راجع فرض معايير أمان Pod باستخدام تسميات مساحة الاسم. لمزيد من المعلومات حول معايير أمان Pod المستخدمة من قبل قبول أمان Pod، راجع معايير أمان Pod.