Compartilhar via


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

A (PSA) Admissão de Segurança do Pod usa rótulos para impor políticas de Padrões de Segurança do Pod em pods em execução em um namespace. No AKS, o Admissão de Segurança de Pod é habilitado por padrão. Para obter mais informações sobre os Padrões de Segurança do Pod e Admissão de Segurança do Pod, consulte Impor Padrões de Segurança do Pod com rótulos de namespace e Padrões de Segurança do Pod.

A Admissão de Segurança do Pod é uma solução de política interna para implementações de cluster único. Se você quiser usar uma política de nível empresarial, recomendamos usar o Azure Policy.

Antes de começar

  • Uma assinatura do Azure. Caso não tenha uma assinatura do Azure, é possível 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 comando kubectl label e defina o rótulo pod-security.kubernetes.io/enforce com o valor da política que você deseja impor. O exemplo a seguir habilita a política restricted 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 comando kubectl label e defina o rótulo pod-security.kubernetes.io/warn com o valor da política que você deseja impor. O exemplo a seguir habilita a política de baseline para todos os namespaces no cluster. Essa política gera um aviso voltado para o usuário se algum pod 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
    

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

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

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. Habilite uma política de PSA para cada namespace, uma com a política restricted e outra com a política baseline, usando o 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
    

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

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

    A saída do 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 namespace test-restricted usando o comando kubectl get pods.

    kubectl get pods --namespace test-restricted
    

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

    No resources found in test-restricted namespace.
    
  5. Tente implantar pods no namespace test-privileged usando o comando kubectl apply. Dessa 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 do exemplo a seguir mostra os pods implantados com sucesso:

    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 namespace test-privileged usando o comando kubectl get pods.

    kubectl get pods --namespace test-privileged
    

    A saída de exemplo 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 namespaces test-restricted e test-privileged usando o comando kubectl delete.

    kubectl delete namespace test-restricted test-privileged
    

Próximas etapas

Neste artigo, você aprendeu a 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 Os Padrões de Segurança do Pod.