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 Bezeichnungpod-security.kubernetes.io/enforce
auf den Wert der Richtlinie festlegen, die Sie erzwingen möchten. Das folgende Beispiel aktiviert die Richtlinierestricted
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 Bezeichnungpod-security.kubernetes.io/warn
auf den Wert der Richtlinie festlegen, die Sie erzwingen möchten. Das folgende Beispiel aktiviert die Richtliniebaseline
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
Erstellen Sie mithilfe des Befehls
kubectl create namespace
zwei Namespaces.kubectl create namespace test-restricted kubectl create namespace test-privileged
Aktivieren Sie mithilfe des Befehls
kubectl label
eine PSA-Richtlinie für jeden Namespace, eine mit der Richtlinierestricted
und eine mit der Richtliniebaseline
.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
undtest-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.Versuchen Sie mithilfe des Befehls
kubectl apply
, Pods im Namespacetest-restricted
bereitzustellen. Dieser Befehl führt zu einem Fehler, da der Namespacetest-restricted
so konfiguriert ist, dass Pods blockiert werden, die der Richtlinierestricted
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
Vergewissern Sie sich mithilfe des Befehls
kubectl get pods
, dass im Namespacetest-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.
Versuchen Sie mithilfe des Befehls
kubectl apply
, Pods im Namespacetest-privileged
bereitzustellen. Diesmal sollten die Pods erfolgreich bereitgestellt werden, da der Namespacetest-privileged
so konfiguriert ist, dass Pods zugelassen werden, die gegen die Richtlinieprivileged
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
Vergewissern Sie sich mithilfe des Befehls
kubectl get pods
, dass im Namespacetest-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
Entfernen Sie die Namespaces
test-restricted
undtest-privileged
mithilfe des Befehlskubectl 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.
Azure Kubernetes Service