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, Pod Security Admission está habilitado de forma 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.

Pod Security Admission es una solución integrada de políticas 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 etiqueta pod-security.kubernetes.io/enforce con el valor de directiva que quiera aplicar. En el ejemplo siguiente se habilita la directiva restricted para el espacio de nombres NAMESPACE.

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

Habilitar 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 etiqueta pod-security.kubernetes.io/warn con el valor de directiva que quiera aplicar. En el ejemplo siguiente se habilita la directiva baseline 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

  1. Cree dos espacios de nombres con el comando kubectl create namespace.

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. Habilite una directiva PSA para cada espacio de nombres, una con la directiva restricted y otra con la directiva baseline, mediante el comando 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
    

    Esto configura los espacios de nombres test-restricted y test-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.

  3. Intente implementar pods en el espacio de nombres test-restricted mediante el comando kubectl apply. Este comando produce un error porque el espacio de nombres test-restricted está configurado para bloquear pods que no cumplen la directiva 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
    

    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
    
  4. Confirme que no hay pods en ejecución en el espacio de nombres test-restricted con el comando kubectl get pods.

    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.
    
  5. Intente implementar pods en el espacio de nombres test-privileged mediante el comando kubectl apply. Esta vez, los pods se deben implementar correctamente porque el espacio de nombres test-privileged está configurado para permitir pods que infringen la directiva 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
    

    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
    
  6. Confirme que hay pods en ejecución en el espacio de nombres test-privileged usando el comando kubectl get pods.

    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
    
  7. Quite los espacios de nombres test-restricted y test-privileged con el comando kubectl 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 utilizados por Pod Security Admission, consulte Pod Security Standards.