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
| Risiko | Contoh |
|---|---|
| Base image usang | CVE di OS image |
| Dependency rentan | Library dengan CVE |
| Secret di image | Token di layer |
| Root container | Eskalasi akses |
| Image tidak terverifikasi | Supply-chain attack |
| Tag mutable | latest berubah tanpa kontrol |
Base image minimal
| Base | Ukuran | Catatan |
|---|---|---|
alpine | Kecil | Musl libc, kompatibilitas perlu dicek |
debian-slim | Sedang | Glibc, umum |
distroless | Sangat kecil | Tanpa 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:
- ALLScan image
trivy image ghcr.io/org/app:1.4.0
trivy image --severity HIGH,CRITICAL --exit-code 1 ghcr.io/org/app:1.4.0Di 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| Tool | Fungsi |
|---|---|
npm audit | CVE dependency Node.js |
| Dependabot | PR otomatis untuk update |
| Renovate | Update terjadwal dan dikonfigurasi |
| Snyk | Scan 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.jsonSBOM 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.0Di 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-abc1234Hindari 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
- Pilih base image minimal dan pin digest.
- Multi-stage build.
- Jalankan sebagai non-root.
.dockerignorerahasia.- Scan image; gagal pada HIGH/CRITICAL.
- Hasilkan SBOM.
- Tanda tangani image.
- 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.