Scans, SBOM e cadeia de suprimentos no pipeline
Objetivos desta aula
- Adicionar scans no CI com política clara
- Gerar SBOM
- Assinar e verificar imagens
Segurança precisa ser etapa do pipeline, com política explícita: falhar em severidade crítica ou alta com correção disponível, avisar nas demais, e registrar exceções com prazo. Sem política, o scanner vira ruído que todos ignoram — ou bloqueio arbitrário que todos contornam.
Cubra as três camadas: dependências da aplicação (SCA), imagem de container (sistema operacional e bibliotecas) e infraestrutura como código (configuração insegura antes do provisionamento). Encontrar bucket público em tfsec custa segundos; descobrir em auditoria custa reputação.
SBOM lista o que existe no artefato e é cada vez mais exigido em contratos; assinatura com cosign prova origem e integridade, permitindo que o cluster aceite apenas imagens assinadas pelo seu pipeline.
1. Onde entram os scans
- SAST no código (Semgrep, CodeQL)
- SCA nas dependências (Dependabot, Trivy)
- IaC scan no Terraform/K8s (Checkov, Trivy config)
- Imagem após o build (Trivy, Grype)
- DAST na app rodando em staging (OWASP ZAP)
2. Bloquear com critério
Falhe o pipeline só em vulnerabilidades críticas/altas com correção disponível; o resto vira relatório. Bloquear tudo faz o time ignorar o scanner.
3. SBOM
A lista de materiais (Syft, formato SPDX ou CycloneDX) diz exatamente o que há na imagem. Quando surge uma nova CVE, você descobre em minutos quais imagens são afetadas.
4. Assinatura e proveniência
Cosign assina a imagem sem chave fixa (keyless via OIDC); atestados SLSA registram como ela foi construída. No cluster, uma política só aceita o que foi assinado pelo seu pipeline.
Na prática
Pipeline de segurança
yaml
name: seguranca
on:
pull_request:
schedule: [{ cron: "0 6 * * 1" }]
permissions:
contents: read
security-events: write
id-token: write
jobs:
dependencias:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm audit --audit-level=high
imagem:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: docker build -t cloudshop-api:ci ./api
- uses: aquasecurity/trivy-action@master
with:
image-ref: cloudshop-api:ci
severity: HIGH,CRITICAL
ignore-unfixed: true
exit-code: "1"
format: sarif
output: trivy.sarif
- uses: github/codeql-action/upload-sarif@v3
with: { sarif_file: trivy.sarif }
iac:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: aquasecurity/tfsec-action@v1.0.3
with: { working_directory: infra }
assinar:
needs: [imagem]
runs-on: ubuntu-latest
steps:
- uses: sigstore/cosign-installer@v3
- run: |
cosign sign --yes ghcr.io/sua-org/cloudshop/api@${{ needs.imagem.outputs.digest }}
cosign verify --certificate-identity-regexp ".*" \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
ghcr.io/sua-org/cloudshop/api@${{ needs.imagem.outputs.digest }}Nota de segurança: ignore-unfixed evita bloquear por vulnerabilidade sem correção, mas registre-as e revise semanalmente.
Pipeline de segurança da imagem
yaml
- name: Scan da imagem
uses: aquasecurity/trivy-action@0.24.0
with:
image-ref: ghcr.io/cloudshop/api:${{ github.sha }}
severity: CRITICAL,HIGH
ignore-unfixed: true
exit-code: "1" # falha o job
- name: SBOM
run: syft ghcr.io/cloudshop/api:${{ github.sha }} -o spdx-json > sbom.json
- name: Assinar (keyless)
run: cosign sign --yes ghcr.io/cloudshop/api@${{ steps.build.outputs.digest }}Por que isso importa
DevSecOps aparece explicitamente nas vagas e é o que permite entregar rápido sem virar risco.
Erro comum
Ligar todos os scanners sem política e depois desligá-los porque 'travam o time'.
Dica de produção
Exija assinatura de imagem no cluster (policy controller): só roda o que seu pipeline produziu.
Alerta de segurança
Dependência typosquatting instala pacote malicioso no build. Fixe versões e revise lockfile em PR.
Pergunta de entrevista
Como você definiria a política de bloqueio de vulnerabilidades no pipeline?
Glossário
- SCA
- Software Composition Analysis: análise de dependências e suas vulnerabilidades.
- cosign
- Ferramenta do projeto Sigstore para assinar e verificar artefatos.
- SAST
- Análise estática de segurança do código-fonte.
- SCA
- Análise de vulnerabilidades em dependências de terceiros.
- SBOM
- Inventário de componentes de um software.
Conexão com o CloudShop
Adicionar scans e assinatura à pipeline do CloudShop.
Quiz da aula
1. Para que serve um SBOM?
2. Uma nova CVE grave foi publicada. O que ajuda a saber rápido quais imagens são afetadas?
Minhas anotações
Salvo automaticamente neste navegador.