> For the complete documentation index, see [llms.txt](https://devops.nataliagranato.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://devops.nataliagranato.xyz/politica-como-codigo-com-kyverno.md).

# 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:

```bash
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:

```bash
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:

```bash
cd kyverno
kubectl apply -f .
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://devops.nataliagranato.xyz/politica-como-codigo-com-kyverno.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
