Usar a Admissão de Segurança do Pod no Serviço Kubernetes do Azure (AKS)

A Admissão de Segurança de Pod (PSA) usa rótulos para impor políticas de Padrões de Segurança de Pod em pods executados em um namespace. No AKS, a Admissão de Segurança do Pod está ativada por padrão. Para obter mais informações sobre Pod Security Admission e Pod Security Standards, consulte Enforce Pod Security Standards with namespace labels and Pod Security Standards.

O Pod Security Admission é uma solução de política integrada para implementações de cluster único. Se você quiser usar uma política de nível empresarial, recomendamos que você use a política do Azure.

Antes de começar

  • Uma subscrição do Azure. Se não tiver uma subscrição do Azure, pode criar uma conta gratuita.
  • A CLI do Azure instalada.
  • Um cluster AKS existente executando o Kubernetes versão 1.23 ou superior.

Habilitar a Admissão de Segurança do Pod para um namespace em seu cluster

Habilitar o PSA para um único namespace

  • Habilite o PSA para um único namespace em seu cluster usando o kubectl label comando e defina o pod-security.kubernetes.io/enforce rótulo com o valor da política que você deseja impor. O exemplo a seguir habilita a restricted política para o namespace NAMESPACE .

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

Habilitar o PSA para todos os namespaces

  • Habilite o PSA para todos os namespaces em seu cluster usando o kubectl label comando e defina o pod-security.kubernetes.io/warn rótulo com o valor da política que você deseja impor. O exemplo a seguir habilita a baseline política para todos os namespaces em seu cluster. Essa política gera um aviso voltado para o usuário se algum pods for implantado em um namespace que não atenda à política de linha de base .

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

Aplique uma política de Admissão de Segurança de Pod com uma implantação

  1. Crie dois namespaces usando o kubectl create namespace comando.

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. Habilite uma política PSA para cada namespace, uma com a restricted política e outra com a baseline política, usando o kubectl label comando.

    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
    

    Isso configura os namespaces e test-privileged para bloquear pods em execução e gerar um aviso voltado para o test-restricted usuário se algum pod que não atenda à política configurada tentar ser executado.

  3. Tente implantar pods no test-restricted namespace usando o kubectl apply comando. Esse comando resulta em um erro porque o test-restricted namespace está configurado para bloquear pods que não atendem à restricted política.

    kubectl apply --namespace test-restricted -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
    

    A saída de exemplo a seguir mostra um aviso informando que os pods violam a política 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 se não há pods em execução no test-restricted namespace usando o kubectl get pods comando.

    kubectl get pods --namespace test-restricted
    

    A saída de exemplo a seguir não mostra pods em execução no test-restricted namespace:

    No resources found in test-restricted namespace.
    
  5. Tente implantar pods no test-privileged namespace usando o kubectl apply comando. Desta vez, os pods devem ser implantados com êxito porque o test-privileged namespace está configurado para permitir pods que violam a privileged política.

    kubectl apply --namespace test-privileged -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
    

    O exemplo de saída a seguir mostra os pods implantados com êxito:

    deployment.apps/azure-vote-back created
    service/azure-vote-back created
    deployment.apps/azure-vote-front created
    service/azure-vote-front created
    
  6. Confirme se você tem pods em execução no test-privileged namespace usando o kubectl get pods comando.

    kubectl get pods --namespace test-privileged
    

    A saída de exemplo a seguir mostra dois pods em execução no test-privileged namespace:

    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. Remova os test-restricted namespaces e test-privileged usando o kubectl delete comando.

    kubectl delete namespace test-restricted test-privileged
    

Próximos passos

Neste artigo, você aprendeu como habilitar a Admissão de Segurança do Pod em um cluster AKS. Para obter mais informações sobre a admissão de segurança do pod, consulte Impor padrões de segurança do pod com rótulos de namespace. Para obter mais informações sobre os Padrões de Segurança do Pod usados pela Admissão de Segurança do Pod, consulte Padrões de Segurança do Pod.