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ótulopod-security.kubernetes.io/enforce
com o valor da política que você deseja impor. O exemplo a seguir habilita a políticarestricted
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ótulopod-security.kubernetes.io/warn
com o valor da política que você deseja impor. O exemplo a seguir habilita a política debaseline
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
Crie dois namespaces usando o comando
kubectl create namespace
.kubectl create namespace test-restricted kubectl create namespace test-privileged
Habilite uma política de PSA para cada namespace, uma com a política
restricted
e outra com a políticabaseline
, usando o comandokubectl 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
etest-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.Tente implantar pods no namespace
test-restricted
usando o comandokubectl apply
. Esse comando resulta em um erro porque o namespacetest-restricted
está configurado para bloquear pods que não atendem à políticarestricted
.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
Confirme se não há pods em execução no namespace
test-restricted
usando o comandokubectl 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.
Tente implantar pods no namespace
test-privileged
usando o comandokubectl apply
. Dessa vez, os pods devem ser implantados com êxito porque o namespacetest-privileged
está configurado para permitir pods que violam a políticaprivileged
.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
Confirme se você tem pods em execução no namespace
test-privileged
usando o comandokubectl 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
Remova os namespaces
test-restricted
etest-privileged
usando o comandokubectl 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.
Azure Kubernetes Service