Partilhar via


Usar a Admissão de Segurança para Pods no Azure Kubernetes Service (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 Admissão de Segurança de Pods e Normas de Segurança de Pods, consulte Aplicar Normas de Segurança de Pods com rótulos de namespaces e Normas de Segurança de Pods.

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

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. Esta política gera um aviso destinado ao utilizador se algum pod for implantado num namespace que não cumpre a política baseline.

    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 test-restricted e test-privileged para bloquear a execução de pods e gerar um aviso voltado para o usuário caso qualquer pod que não atenda à política configurada tentar executar-se.

  3. Tente implantar pods no namespace test-restricted usando o comando kubectl apply. 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
    

    O seguinte exemplo de saída indica que não há pods em execução no namespace test-restricted.

    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 namespace test-privileged está configurado para permitir pods que violam a política 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
    

    A saída de exemplo a seguir mostra os pods desplegados 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 que tem pods em execução no namespace test-privileged usando o comando kubectl get pods.

    kubectl get pods --namespace test-privileged
    

    O exemplo de saída a seguir mostra dois pods em execução no namespace 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. 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.