Entrega Ágil de Aplicações em Containers: Reduza o Inchaço das Imagens OCI sem Perder Funcionalidades

Iniciado por Malaquias, Hoje at 12:45

Respostas: 0   |   Visualizações: 1

Tópico anterior - Tópico seguinte

0 Membros e 1 Visitante estão a ver este tópico.

Introdução

A recente iniciativa "Cut bloat, not features" anunciada pela Canonical traz ao ecossistema Ubuntu um conjunto de práticas e ferramentas focadas na criação de imagens OCI (Open Container Initiative) extremamente enxutas, sem sacrificar a visibilidade de segurança necessária para ambientes corporativos. Para ISVs e equipes de DevOps, a proposta resolve um dilema antigo: imagens pequenas tendem a ser mais rápidas de transferir e menos vulneráveis a ataques, porém muitas vezes ocultam dependências críticas ou geram falsos positivos em scanners de vulnerabilidade (CVE noise). Este artigo detalha, de forma prática, como aplicar as recomendações no Ubuntu 22.04 LTS e posteriores, abordando impactos reais em servidores VPS, nuvem pública, kernel hardening, Docker e LXD.

O que há de novo no Ubuntu?

- **Base mínima oficial**: a Canonical disponibiliza o metapacote `ubuntu-minimal` como ponto de partida para builds de containers, já configurado com `--no-install-recommends` e com pacotes de depuração removidos.
- **Ferramentas de inspeção OCI integradas**: `skopeo` para inspeção de camadas, `cosign` para assinatura de imagens e `trivy` como scanner padrão, todos disponíveis nos repositórios oficiais.
- **Perfis LXD otimizados**: novos perfis `minimal` que desativam serviços desnecessários (systemd-resolved, snapd) dentro do container, reduzindo a superfície de ataque.
- **Kernel hardening por padrão**: parâmetros como `kernel.unprivileged_userns_clone=0` e `fs.protected_symlinks=1` são habilitados nas imagens de base, mitigando vetores de escalada de privilégio.

Impacto prático para Sysadmins

1. **Redução de custos de banda e armazenamento** – Imagens que antes pesavam 500 MiB podem cair para menos de 120 MiB, diminuindo o tempo de pull em pipelines CI/CD e economizando espaço em registries privados.
2. **Menor ruído de CVE** – Ao eliminar pacotes recomendados e arquivos de documentação, o número de vulnerabilidades reportadas por `trivy` pode cair em até 70 %, permitindo foco nas falhas realmente críticas.
3. **Melhoria da conformidade** – Assinaturas com `cosign` garantem a integridade da cadeia de suprimentos, requisito frequente em auditorias ISO 27001 e PCI‑DSS.
4. **Facilidade de integração com LXD** – Perfis minimalistas permitem a execução de workloads em ambientes multi‑tenant sem necessidade de hardening manual adicional.

Como construir imagens OCI minimalistas no Ubuntu

# 1. Crie um diretório de trabalho
mkdir -p ~/container-build && cd ~/container-build

# 2. Dockerfile multi‑stage usando ubuntu:22.04 como base
cat > Dockerfile <<'EOF'
# ---------- Stage 1 – Build ----------
FROM ubuntu:22.04 AS builder
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \\
    apt-get install -y --no-install-recommends \\
        build-essential ca-certificates git && \\
    rm -rf /var/lib/apt/lists/*
# Compile sua aplicação aqui (exemplo fictício)
WORKDIR /src
COPY . .
RUN make && strip /src/bin/app && upx /src/bin/app

# ---------- Stage 2 – Runtime ----------
FROM ubuntu:22.04 AS runtime
ENV DEBIAN_FRONTEND=noninteractive
# Instala apenas as dependências de runtime
RUN apt-get update && \\
    apt-get install -y --no-install-recommends \\
        ca-certificates && \\
    rm -rf /var/lib/apt/lists/*
COPY --from=builder /src/bin/app /usr/local/bin/app
# Usuário não‑root
RUN useradd -m appuser && chown appuser:appuser /usr/local/bin/app
USER appuser
ENTRYPOINT ["/usr/local/bin/app"]
EOF

# 3. Build com buildx (suporta multiplataforma)
buildx create --use --name mybuilder
buildx build --platform linux/amd64,linux/arm64 \\
    -t myregistry.com/project/app:latest \\
    --push .

Pontos de atenção:
- O uso de `--no-install-recommends` evita a instalação de pacotes auxiliares que inflacionam a imagem.
- `strip` e `upx` reduzem o tamanho binário final em até 30 %.
- A criação de um usuário não‑root impede que vulnerabilidades de escalada afetem o host.

Dicas de segurança e mitigação de CVE

- **Assinatura automática**: configure o Docker daemon ou o registry para exigir assinatura `cosign`. Exemplo de assinatura:
cosign sign --key mykey.key myregistry.com/project/app:latest- **Varredura contínua**: integre `trivy` ao pipeline GitLab CI ou GitHub Actions.
trivy image --severity HIGH,CRITICAL myregistry.com/project/app:latest- **Hardening do kernel no host**: adicione ao `/etc/sysctl.d/99-ubuntu-hardening.conf`:
kernel.unprivileged_userns_clone = 0
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
net.ipv4.ip_forward = 0
 Em seguida, execute `sysctl --system`.
- **LXD profile minimal**: crie e aplique o perfil:
lxc profile create minimal
lxc profile edit minimal <config:
  security.nesting: "false"
  raw.lxc: "lxc.apparmor.profile=unconfined"
  limits.cpu: "2"
  limits.memory: "1GB"
description: Minimal profile for OCI images
devices: {}
EOF
lxc launch ubuntu:22.04 mycontainer -p minimal

Conclusão – Estabilidade em produção

Ao adotar as práticas apresentadas, o Sysadmin ganha três pilares fundamentais: imagens menores que reduzem latência de deploy, visibilidade de segurança aprimorada que corta o ruído de CVE e um conjunto de hardening que protege tanto o kernel do host quanto o runtime do container. A Canonical já incorpora essas melhorias nos repositórios oficiais, o que significa que, ao atualizar para Ubuntu 22.04 LTS (ou superior) e seguir os passos de build multi‑stage, você obtém um ambiente de produção pronto para escalar em nuvens públicas, VPS e data‑centers on‑premise, mantendo a estabilidade exigida por workloads corporativos críticos.

Tags: