Compartir por


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 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
    

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 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 mediante 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. Use el comando kubectl get pods para confirmar que no hay pods que se ejecuten en el espacio de nombres test-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.
    
  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. Use el comando kubectl get pods para confirmar que hay pods que se ejecutan en el espacio de nombres test-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
    
  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 usados por la admisión de seguridad de pods, consulte Estándares de seguridad de pod.