0 XP
Módulo 11 · DevSecOps, FinOps e Projeto Final

Scans, SBOM e cadeia de suprimentos no pipeline

Avançado 45 min+25 XPTrivynpm audittfseccosign

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. 1. Para que serve um SBOM?

  2. 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.

AnteriorPróxima