Paket 2 · Praktik LanjutanModul H — DevSecOps

Container & Dependency Security

Mengamankan image dan dependency: base image minimal, non-root, scanning, SBOM, signing, dan pembaruan otomatis.

Container membawa dependency ke produksi. Jika image atau dependency memiliki kerentanan, risikonya ikut ter-deploy. Keamanan harus dimulai dari build.

Risiko utama

RisikoContoh
Base image usangCVE di OS image
Dependency rentanLibrary dengan CVE
Secret di imageToken di layer
Root containerEskalasi akses
Image tidak terverifikasiSupply-chain attack
Tag mutablelatest berubah tanpa kontrol

Base image minimal

BaseUkuranCatatan
alpineKecilMusl libc, kompatibilitas perlu dicek
debian-slimSedangGlibc, umum
distrolessSangat kecilTanpa shell, debugging lebih sulit

Semakin sedikit komponen, semakin kecil attack surface.

Non-root dan read-only

FROM node:22-alpine
WORKDIR /app
COPY --chown=node:node . .
USER node
CMD ["node", "server.js"]

Docker Compose:

services:
  app:
    image: ghcr.io/org/app:1.4.0
    read_only: true
    tmpfs:
      - /tmp
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL

Scan image

trivy image ghcr.io/org/app:1.4.0
trivy image --severity HIGH,CRITICAL --exit-code 1 ghcr.io/org/app:1.4.0

Di pipeline:

- name: Scan image
  uses: aquasecurity/trivy-action@0.28.0
  with:
    image-ref: ghcr.io/org/app:${{ github.sha }}
    severity: HIGH,CRITICAL
    exit-code: "1"

Scan filesystem dan IaC

trivy fs .
trivy config .

Ini mendeteksi dependency rentan, secret, dan salah konfigurasi sebelum build.

Dependency audit

npm audit
npm audit --audit-level=high
npm outdated
ToolFungsi
npm auditCVE dependency Node.js
DependabotPR otomatis untuk update
RenovateUpdate terjadwal dan dikonfigurasi
SnykScan dan remediasi

Gunakan lockfile (package-lock.json) untuk build reproducible.

SBOM

syft ghcr.io/org/app:1.4.0 -o spdx-json > sbom.json
grype sbom.json

SBOM memungkinkan pencarian cepat saat ada CVE baru.

Signing dan verifikasi

cosign generate-key-pair
cosign sign --key cosign.key ghcr.io/org/app:1.4.0
cosign verify --key cosign.pub ghcr.io/org/app:1.4.0

Di Kubernetes, gunakan Kyverno/Gatekeeper untuk menolak image tidak bertanda tangan.

Tag immutable

Gunakan digest atau tag SHA:

ghcr.io/org/app@sha256:...
ghcr.io/org/app:git-abc1234

Hindari deploy latest karena tidak jelas versi apa yang berjalan.

Pembaruan dependency

  • Aktifkan Dependabot/Renovate.
  • Review changelog dan breaking changes.
  • Uji di CI.
  • Deploy bertahap.
  • Pantau setelah update.

Update otomatis bukan berarti merge otomatis

Biarkan bot membuat PR, tetapi tetap jalankan test dan review. Update dependency bisa membawa perubahan perilaku.

Runtime security

  • Network policy membatasi komunikasi.
  • Jangan mount Docker socket.
  • Batasi capability.
  • Gunakan seccomp/AppArmor.
  • Pantau proses mencurigakan.
  • Rotasi kredensial image registry.

Praktik: hardening image

  1. Pilih base image minimal dan pin digest.
  2. Multi-stage build.
  3. Jalankan sebagai non-root.
  4. .dockerignore rahasia.
  5. Scan image; gagal pada HIGH/CRITICAL.
  6. Hasilkan SBOM.
  7. Tanda tangani image.
  8. Deploy dengan tag immutable.

Ringkasan

  • Base image dan dependency adalah sumber risiko utama.
  • Scan, SBOM, dan signing mengamankan supply chain.
  • Non-root, read-only, dan capability minimal mengurangi dampak.
  • Perbarui dependency secara rutin dan teruji.

Selanjutnya

Otomasi infrastruktur di Infrastructure as Code dengan Terraform.

On this page