No ecossistema cloud-native que avança rápido, o Kubernetes se tornou o padrão de fato para orquestração de contêineres. Subimos pods em segundos, muitas vezes baixando imagens de contêiner de registries variados. Mas, em meio à corrida pela inovação, fica uma pergunta crítica: você sabe mesmo o que está rodando no seu cluster?
Se a resposta envolve confiança ou suposições sobre a integridade das imagens, seu cluster pode estar funcionando no escuro — uma aposta arriscada numa era de ataques cada vez mais sofisticados à cadeia de suprimentos.
Conforme as empresas dependem cada vez mais de contêineres para empacotar e implantar aplicações, garantir a integridade e a autenticidade das imagens que rodam nos clusters se torna essencial. Verificar imagens não é um diferencial; é um pilar inegociável de uma postura sólida de segurança em Kubernetes.
Por que verificar imagens de contêiner?
As imagens de contêiner são os blocos de construção das suas aplicações Kubernetes. Elas reúnem o código, as dependências e o ambiente de runtime. No entanto, essa praticidade também abre brechas em potencial quando as imagens não são devidamente avaliadas.
Veja por que verificar imagens deixou de ser opcional:
- 🔓 Ataques à cadeia de suprimentos: os atacantes têm mirado cada vez mais a cadeia de suprimentos de software, injetando código malicioso em imagens com cara de legítimas. Sem verificação, é só uma questão de tempo até você virar uma vítima downstream.
- 🐞 Vulnerabilidades conhecidas: muitas imagens dependem de camadas-base que trazem pacotes desatualizados ou vulneráveis. Imagens não verificadas podem expor você a CVEs (Common Vulnerabilities and Exposures) sem que você perceba.
- 🔧 Configurações incorretas: imagens rodando como root, expondo portas que não são usadas ou guardando segredos hardcoded são portas de entrada fáceis para atacantes.
- 🎯 Erro humano: uma pessoa do time pode acabar usando, sem querer, uma versão antiga ou uma imagem com nome parecido, mas insegura. Sem checagens rigorosas, esses deslizes chegam à produção.
- 📋 Falhas de conformidade: normas como PCI DSS, SOC 2 e HIPAA exigem comprovação de integridade e procedência do software. Rodar imagens não verificadas pode significar reprovação em auditorias e penalidades regulatórias.
Sem sistemas robustos de verificação, seu cluster Kubernetes pode virar uma terra sem lei de software sem controle, expondo a organização a riscos consideráveis.
Como o Kyverno resolve e simplifica a verificação de imagens
O ecossistema Kubernetes oferece ferramentas poderosas para ir além da confiança e impor uma integridade verificável. Uma solução que se destaca é o Kyverno, um motor de políticas feito sob medida para o Kubernetes.
O Kyverno funciona como um admission controller, interceptando requisições da API e aplicando políticas antes que os workloads entrem no cluster. Isso o torna ideal para impor políticas de verificação de imagens já no momento do deploy.
Principais vantagens de usar o Kyverno na verificação de imagens:
- ✅ Verificar assinaturas de imagens: exija assinatura criptográfica para garantir que as imagens são autênticas e não foram adulteradas.
- 📜 Checar atestados: valide metadados assinados sobre a imagem, como status do scan ou procedência do build.
- 🔒 Restringir registries: permita apenas imagens vindas de fontes confiáveis.
- 🏷️ Impor padrões de tagging: garanta que as imagens usem tags explícitas (evitando o
latest, por exemplo) e sigam convenções de versionamento.
Exemplos de políticas Kyverno para verificação de imagens
Vamos a alguns exemplos práticos. Antes de aplicá-los, confira se o Kyverno está instalado no seu cluster.
Cenário 1: Restringir imagens a registries aprovados
Uma política simples, mas eficaz, é garantir que as imagens venham só dos registries confiáveis da sua organização.
---
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-image-registries
spec:
validationFailureAction: Enforce # Block deployments if validation fails
rules:
- name: validate-registries
match:
any:
- resources:
kinds:
- Pod
- Deployment
- StatefulSet
- Job
- CronJob
validate:
message: "Images must be pulled from approved registries (gcr.io or my.private.registry)."
pattern:
spec:
containers:
- image: "gcr.io/* | my.private.registry/*" # Allowed registry patterns
Se uma imagem de um registry não aprovado for usada, o deploy é bloqueado com uma mensagem de validação clara.

Cenário 2: Garantir que as imagens sejam assinadas com Cosign
O Cosign, peça-chave do projeto Sigstore, é uma ferramenta amplamente adotada para assinar e verificar criptograficamente artefatos de software, guardando essas assinaturas e atestados em um registry OCI. Garanta que as chaves públicas para a verificação das imagens estejam acessíveis, seja em Kubernetes Secrets ou via URL.
O Kyverno se integra diretamente ao Cosign por meio da regra verifyImages para impor políticas que validam assinaturas de imagens de contêiner e atestados in-toto. Assim, só imagens confiáveis e verificadas chegam ao cluster Kubernetes.
Veja a seguir uma ClusterPolicy do Kyverno que garante que todas as imagens implantadas no namespace production sejam assinadas por uma chave pública específica:
---
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: check-image-signatures
spec:
validationFailureAction: Enforce
background: false
webhookTimeoutSeconds: 30
failurePolicy: Fail
rules:
- name: verify-image-signature
match:
any:
- resources:
kinds:
- Pod
namespaces:
- production
verifyImages:
- imageReferences:
- "registry.example.com/*:*" # Adjust to your image pattern
attestors:
- count: 1
entries:
- keys:
publicKeys: | #The public key may either be defined in the policy directly or reference a standard Kubernetes Secret elsewhere in the cluster by specifying it in the format k8s://<namespace>/<secret_name>. The named Secret must specify a key cosign.pub containing the public key used for verification.
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEyourPublicKeyContentHere...
-----END PUBLIC KEY-----
Uma imagem assinada pode ser implantada normalmente, e tentar rodar uma imagem não assinada vai gerar um erro de política como este:

Cenário 3: Verificando atestados de scan de vulnerabilidades
Um aspecto-chave para manter a integridade da cadeia de suprimentos de software é rodar scans regulares de vulnerabilidades nas imagens. Os scans em tempo de build são um ponto de partida, mas precisam ser repetidos conforme novas vulnerabilidades surgem. O Kyverno ajuda a impor isso checando atestados que comprovam que a imagem passou recentemente por um scan de vulnerabilidades.
Veja a seguir uma ClusterPolicy do Kyverno, baseada no Trivy, que aplica uma checagem de validação nas imagens dos Pods para garantir que o scan de vulnerabilidade não tenha mais de uma semana.
---
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: check-vulnerabilities
spec:
validationFailureAction: enforce
webhookTimeoutSeconds: 30
failurePolicy: Fail
rules:
- name: not-older-than-one-week
match:
any:
- resources:
kinds:
- Pod
verifyImages:
- imageReferences:
- "registry.example.com/*:*" # Adjust to your image pattern
attestations:
- predicateType: cosign.sigstore.dev/attestation/vuln/v1
conditions:
- all:
- key: "{{ time_since('','{{metadata.scanFinishedOn}}','') }}"
operator: LessThanOrEquals
value: "168h"
O Kyverno bloqueia a criação do pod se a imagem não tiver passado por um scan de vulnerabilidades recente e não tiver um atestado de scan assinado pelo Cosign.

Estes são só alguns exemplos. A flexibilidade do Kyverno permite um controle bem mais granular, incluindo a checagem de tags e labels específicos das imagens ou até o bloqueio de imagens com vulnerabilidades de alta severidade com base nos dados de atestado.
Verificar imagens não é só boa prática; é uma necessidade fundamental para operações cloud-native seguras. Ferramentas como o Kyverno oferecem um caminho poderoso e flexível para sair da confiança cega e chegar a uma segurança verificável. E quando o assunto é garantir que seus workloads sejam não só seguros, mas também bem dimensionados, confiáveis e eficientes em custo, plataformas como o PerfectScale complementam as ferramentas de segurança analisando continuamente os workloads do Kubernetes em busca de oportunidades de otimização — sem comprometer desempenho ou conformidade.
Ao implementar a verificação de assinaturas de imagens, a checagem de atestados e as restrições de registry, você levanta uma defesa robusta contra uma ampla gama de ameaças voltadas à cadeia de suprimentos de software.
Explore a documentação do Kyverno e o Cosign e comece a proteger seus workloads de contêineres hoje mesmo. Se quiser saber mais ou tiver interesse nos nossos serviços, fale com a gente sem hesitar. É só clicar aqui.