Admisión de seguridad de pod en Azure Kubernetes Service (AKS)
La admisión de seguridad de pods (PSA) usa etiquetas para aplicar directivas de estándares de seguridad de pod en los pods que se ejecutan en un espacio de nombres. En AKS, la admisión de seguridad de pods está habilitada de manera predeterminada. Para más información sobre los estándares de seguridad de pod y admisión de seguridad de pod, vea Aplicación de estándares de seguridad de pod con etiquetas de espacio de nombres y Estándares de seguridad de pod.
La admisión de seguridad de pods es una solución de directiva integrada para implementaciones de clúster único. Si quiere usar una directiva de nivel empresarial, se recomienda utilizar la directiva de Azure.
Antes de empezar
- Suscripción a Azure. Si no tiene una suscripción a Azure, puede crear una cuenta gratuita.
- La CLI de Azure instalada.
- Un clúster de AKS existente que ejecuta Kubernetes versión 1.23 o posterior.
Habilitación de la admisión de seguridad de pods para un espacio de nombres en el clúster
Habilitación de PSA para un único espacio de nombres
A fin de habilitar PSA para un único espacio de nombres en el clúster, use el comando
kubectl label
y establezca la etiquetapod-security.kubernetes.io/enforce
con el valor de directiva que quiera aplicar. En el ejemplo siguiente se habilita la directivarestricted
para el espacio de nombres NAMESPACE.kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=restricted
Habilitación de PSA para todos los espacios de nombres
A fin de habilitar PSA para todos los espacios de nombres en el clúster, use el comando
kubectl label
y establezca la etiquetapod-security.kubernetes.io/warn
con el valor de directiva que quiera aplicar. En el ejemplo siguiente se habilita la directivabaseline
para todos los espacios de nombres del clúster. Esta directiva genera una advertencia orientada al usuario si se implementan pods en un espacio de nombres que no cumple la directiva de línea base.kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=baseline
Aplicación de una directiva de admisión de seguridad de pods con una implementación
Cree dos espacios de nombres mediante el comando
kubectl create namespace
.kubectl create namespace test-restricted kubectl create namespace test-privileged
Habilite una directiva PSA para cada espacio de nombres, una con la directiva
restricted
y otra con la directivabaseline
, mediante el comandokubectl 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
Esto configura los espacios de nombres
test-restricted
ytest-privileged
para bloquear la ejecución de pods y generar una advertencia orientada al usuario si algún pod que no cumple la directiva configurada intenta ejecutarse.Intente implementar pods en el espacio de nombres
test-restricted
mediante el comandokubectl apply
. Este comando produce un error porque el espacio de nombrestest-restricted
está configurado para bloquear pods que no cumplen la directivarestricted
.kubectl apply --namespace test-restricted -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
En la salida del ejemplo siguiente se muestra una advertencia que indica que los pods infringen la directiva configurada:
... 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
Use el comando
kubectl get pods
para confirmar que no hay pods que se ejecuten en el espacio de nombrestest-restricted
.kubectl get pods --namespace test-restricted
En la salida del ejemplo siguiente se muestra que no hay ningún pod que se ejecute en el espacio de nombres
test-restricted
:No resources found in test-restricted namespace.
Intente implementar pods en el espacio de nombres
test-privileged
mediante el comandokubectl apply
. Esta vez, los pods se deben implementar correctamente porque el espacio de nombrestest-privileged
está configurado para permitir pods que infringen la directivaprivileged
.kubectl apply --namespace test-privileged -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
En la salida del ejemplo siguiente se muestran los pods implementados correctamente:
deployment.apps/azure-vote-back created service/azure-vote-back created deployment.apps/azure-vote-front created service/azure-vote-front created
Use el comando
kubectl get pods
para confirmar que hay pods que se ejecutan en el espacio de nombrestest-privileged
.kubectl get pods --namespace test-privileged
En la salida del ejemplo siguiente se muestran dos pods en ejecución en el espacio de nombres
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
Quite los espacios de nombres
test-restricted
ytest-privileged
con el comandokubectl delete
.kubectl delete namespace test-restricted test-privileged
Pasos siguientes
En este artículo, ha aprendido a habilitar la admisión de seguridad de pods en un clúster de AKS. Para obtener más información sobre la admisión de seguridad de pods, consulte Aplicar estándares de seguridad de pod con etiquetas de espacio de nombres. Para obtener más información sobre los estándares de seguridad de pod usados por la admisión de seguridad de pods, consulte Estándares de seguridad de pod.
Azure Kubernetes Service