Freigeben über


Verwenden von Pod Security Admission in Azure Kubernetes Service (AKS)

Pod Security Admission (SPA) verwendet Bezeichnungen, um Pod Security Standards-Richtlinien für Pods zu erzwingen, die in einem Namespace ausgeführt werden. In AKS ist Pod Security Admission standardmäßig aktiviert. Weitere Informationen zu Pod Security Admission und Pod Security Standards finden Sie unter Enforce Pod Security Standards with namespace labels (Erzwingen von Pod Security Standards mit Namespacebezeichnungen) und Pod Security Standards.

Pod Security Admission ist eine integrierte Richtlinie für die Implementierung einzelner Cluster. Wenn Sie eine Richtlinie auf Unternehmensniveau verwenden möchten, empfiehlt sich die Verwendung von Azure Policy.

Voraussetzungen

  • Ein Azure-Abonnement. Falls Sie über kein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen.
  • Die Azure CLI muss installiert sein.
  • Ein bestehender AKS-Cluster, der Kubernetes, Version 1.23 oder höher, ausführt.

Aktivieren von Pod Security Admission für einen Namespace in Ihrem Cluster

Aktivieren von PSA für einen einzelnen Namespace

  • Aktivieren Sie PSA für einen einzelnen Namespace in Ihrem Cluster, indem Sie den Befehl kubectl label verwenden und die Bezeichnung pod-security.kubernetes.io/enforce auf den Wert der Richtlinie festlegen, die Sie erzwingen möchten. Das folgende Beispiel aktiviert die Richtlinie restricted für den Namespace NAMESPACE.

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

Aktivieren von PSA für alle Namespaces

  • Aktivieren Sie PSA für alle Namespace in Ihrem Cluster, indem Sie den Befehl kubectl label verwenden und die Bezeichnung pod-security.kubernetes.io/warn auf den Wert der Richtlinie festlegen, die Sie erzwingen möchten. Das folgende Beispiel aktiviert die Richtlinie baseline für alle Namespaces in Ihrem Cluster. Diese Richtlinie generiert eine Warnung für Benutzer*innen, wenn Pods in einem Namespace bereitgestellt werden, der die Baselinerichtlinie nicht erfüllt.

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

Erzwingen einer Pod Security Admission-Richtlinie mit einer Bereitstellung

  1. Erstellen Sie mithilfe des Befehls kubectl create namespace zwei Namespaces.

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. Aktivieren Sie mithilfe des Befehls kubectl label eine PSA-Richtlinie für jeden Namespace, eine mit der Richtlinie restricted und eine mit der Richtlinie baseline.

    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
    

    Damit werden die Namespaces test-restricted und test-privileged so konfiguriert, dass die Ausführung von Pods blockiert wird. Außerdem wird eine Warnung für die Benutzer*innen generiert, wenn versucht wird, Pods auszuführen, die nicht der konfigurierten Richtlinie entsprechen.

  3. Versuchen Sie mithilfe des Befehls kubectl apply, Pods im Namespace test-restricted bereitzustellen. Dieser Befehl führt zu einem Fehler, da der Namespace test-restricted so konfiguriert ist, dass Pods blockiert werden, die der Richtlinie restricted nicht entsprechen.

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

    Die folgende Beispielausgabe zeigt eine Warnung, die besagt, dass die Pods gegen die konfigurierte Richtlinie verstoßen:

    ...
    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. Vergewissern Sie sich mithilfe des Befehls kubectl get pods, dass im Namespace test-restricted keine Pods ausgeführt werden.

    kubectl get pods --namespace test-restricted
    

    Die folgende Beispielausgabe zeigt, dass im Namespace test-restricted keine Pods ausgeführt werden:

    No resources found in test-restricted namespace.
    
  5. Versuchen Sie mithilfe des Befehls kubectl apply, Pods im Namespace test-privileged bereitzustellen. Diesmal sollten die Pods erfolgreich bereitgestellt werden, da der Namespace test-privileged so konfiguriert ist, dass Pods zugelassen werden, die gegen die Richtlinie privileged verstoßen.

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

    Die folgende Beispielausgabe zeigt, dass die Pods erfolgreich bereitgestellt wurden:

    deployment.apps/azure-vote-back created
    service/azure-vote-back created
    deployment.apps/azure-vote-front created
    service/azure-vote-front created
    
  6. Vergewissern Sie sich mithilfe des Befehls kubectl get pods, dass im Namespace test-privileged Pods ausgeführt werden.

    kubectl get pods --namespace test-privileged
    

    Die folgende Beispielausgabe zeigt, dass im Namespace test-privileged zwei Pods ausgeführt werden:

    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. Entfernen Sie die Namespaces test-restricted und test-privileged mithilfe des Befehls kubectl delete.

    kubectl delete namespace test-restricted test-privileged
    

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie Pod Security Admission in einem AKS-Cluster aktivieren. Weitere Informationen zu Pod Security Admission finden Sie unter Erzwingen von Pod Security Standards mit Namespacebezeichnungen. Weitere Informationen zu Pod Security Standards, die von Pod Security Admission verwendet werden, finden Sie unter Pod Security Standards.