Usare l'ammissione di sicurezza pod nel servizio Azure Kubernetes

Pod Security Admission (PSA) usa le etichette per applicare i criteri dei Pod Security Standards sui pod in esecuzione in un namespace. In AKS, Pod Security Admission è abilitato per impostazione predefinita. Per ulteriori informazioni su Pod Security Admission e Pod Security Standards, consulta Applicazione di Pod Security Standards con etichette dei namespace e Pod Security Standards.

Pod Security Admission è una soluzione di criteri integrata per le implementazioni a cluster singolo. Se si vuole usare un criterio di livello aziendale, è consigliabile usare Criteri di Azure.

Operazioni preliminari

Abilitare l'ammissione di sicurezza pod per uno spazio dei nomi nel proprio cluster

Abilitare PSA per un singolo namespace

  • Abilitate PSA per un singolo namespace nel tuo cluster usando il comando kubectl label e impostate l'etichetta pod-security.kubernetes.io/enforce con il valore del criterio che desiderate applicare. L'esempio seguente abilita il criterio di restricted per lo spazio dei nomi NAMESPACE.

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

Abilita PSA per tutti i namespace

  • Abilita PSA per tutti i namespace del cluster usando il comando kubectl label e imposta l'etichetta pod-security.kubernetes.io/warn con il valore del criterio che vuoi applicare. L'esempio seguente abilita il criterio baseline per tutti i namespace nel cluster. Questo criterio genera un avviso visibile all'utente se vengono distribuiti pod in un namespace che non soddisfa la policy baseline.

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

Imporre un criterio di ammissione della sicurezza dei Pod con un deployment

  1. Crea due namespace utilizzando il comando kubectl create namespace.

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. Abilita un criterio PSA per ogni namespace, uno con il criterio restricted e uno con il criterio baseline, usando il 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
    

    In questo modo vengono configurati i namespace test-restricted e test-privileged per impedire l'esecuzione dei pod e generare un avviso visibile all'utente se dei pod che non soddisfano i criteri configurati tentano di essere eseguiti.

  3. Provare a distribuire i pod nello spazio dei nomi test-restricted usando il comando kubectl apply. Questo comando genera un errore perché lo spazio dei nomi test-restricted è configurato per bloccare i pod che non soddisfano i criteri 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
    

    L'output di esempio seguente mostra un avviso che indica che i pod violano i criteri configurati:

    ...
    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. Verificare che non siano presenti pod in esecuzione nello spazio dei nomi test-restricted usando il comando kubectl get pods.

    kubectl get pods --namespace test-restricted
    

    L'output di esempio seguente mostra che non è in esecuzione alcun pod nello spazio dei nomi test-restricted:

    No resources found in test-restricted namespace.
    
  5. Provare a distribuire i pod nello spazio dei nomi test-privileged usando il comando kubectl apply. Questa volta, i pod dovrebbero essere distribuiti con successo perché il namespace test-privileged è configurato per consentire i pod che violano la policy 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
    

    L'esempio di output seguente mostra i pod distribuiti con successo:

    deployment.apps/azure-vote-back created
    service/azure-vote-back created
    deployment.apps/azure-vote-front created
    service/azure-vote-front created
    
  6. Verifica che siano presenti pod in esecuzione nel namespace test-privileged utilizzando il comando kubectl get pods.

    kubectl get pods --namespace test-privileged
    

    L'output di esempio seguente mostra due pod in esecuzione nello spazio dei nomi 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. Rimuovere i namespace test-restricted e test-privileged mediante il comando kubectl delete.

    kubectl delete namespace test-restricted test-privileged
    

Passaggi successivi

In questo articolo si è appreso come abilitare Pod Security Admission in un cluster AKS. Per ulteriori informazioni su Pod Security Admission, consulta Far rispettare gli standard di sicurezza dei pod con le etichette del namespace. Per ulteriori informazioni sugli standard di sicurezza dei pod utilizzati da Pod Security Admission, vedi Standard di sicurezza dei pod.