Política como código com Kyverno

O Kyverno é uma ferramenta open-source que permite definir políticas de validação, mutação e geração de recursos Kubernetes. Com o Kyverno, você pode definir políticas de segurança, conformidade e boas práticas de forma declarativa.

As políticas do Kyverno são definidas em objetos do tipo ClusterPolicy e Policy. Um ClusterPolicy é aplicado a todos os namespaces do cluster, enquanto um Policy é aplicado a um namespace específico.

Instalação

Para instalar o Kyverno, execute o seguinte comando:

helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
kubectl create namespace kyverno
helm install kyverno --namespace kyverno kyverno/kyverno

Para definir a utilização do Kyverno em modo HA (High Availability), execute o seguinte comando:

helm install kyverno --namespace kyverno kyverno/kyverno --set replicaCount=3

Políticas

As políticas aplicadas para esse projeto estão disponíveis no diretório kyverno na raiz do repositório. As políticas são definidas em arquivos YAML e aplicadas ao cluster com o comando kubectl apply -f kyverno/.

São elas:

  • check-deprecated-api.yaml: Verifica se os recursos estão utilizando versões de API descontinuadas.

  • dissalow-latest-tag.yaml: Verifica se os recursos estão utilizando a tag latest em imagens de containers. A tag latest não é recomendada em ambientes de produção porque torna o versionamento da imagem ambíguo, o que pode causar problemas de compatibilidade, dificuldades de rastreamento e problemas de segurança.

  • dissalow-secrets-from-env-vars.yaml: Verifica se os recursos estão utilizando variáveis de ambiente para passar credenciais sensíveis. O uso de variáveis de ambiente para passar credenciais sensíveis é uma prática insegura, pois as variáveis de ambiente são visíveis para qualquer processo em execução no mesmo host.

  • no-root-containers.yaml: Verifica se os recursos estão utilizando containers com usuário root. Utilizar o usuário root em containers é uma prática insegura, pois permite que o container tenha acesso total ao host. Por definição, um container deve ter todos os processos isolados, isso vale para o usuário também.

  • require-labels.yaml: Verifica se os recursos possuem as labels app e env. Essas labels são úteis para identificar e agrupar recursos relacionados.

  • require-probes.yaml: Verifica se os recursos possuem os probes liveness e readiness. Os probes são essenciais para garantir a disponibilidade e a confiabilidade dos recursos.

  • require-requests-limits.yaml: Verifica se os recursos possuem requests e limits definidos para CPU e memória. Definir requests e limits é essencial para garantir a previsibilidade, a eficiência dos recursos e economizar custos.

  • verify-image.yaml: Verifica se as imagens possuem assinatura digital. Verificar a assinatura digital das imagens é essencial para garantir a autenticidade e a integridade das imagens.

Para aplicar as polícas mencionadas acima, execute o seguinte comando:

cd kyverno
kubectl apply -f .

Last updated