Container Image Security
Keamanan container image merupakan fondasi dari rantai pasok (supply chain) container yang aman. Image yang mengandung celah keamanan, berjalan sebagai root, atau menggunakan base image besar akan menjadi vektor serangan serius. Bab ini membahas strategi pengamanan image mulai dari pemilihan base image hingga integritas distribusi.
Minimal Base Image
Pemilihan base image sangat mempengaruhi luas permukaan serangan (attack surface):
- Alpine Linux: Berbasis musl libc, ukuran ~5 MB. Ringan namun tetap menyediakan package manager (apk). Cocok untuk sebagian besar aplikasi.
- Distroless Images: Dikelola oleh Google, berisi hanya aplikasi dan runtime dependencies tanpa shell, package manager, atau utilitas Linux. Sangat meminimalkan permukaan serangan.
- Scratch: Image kosong sepenuhnya. Hanya berisi binary statis. Ideal untuk aplikasi Go, Rust, atau C/C++ yang di-compile secara statis. Ukuran terkecil dan risiko paling minimal.
Contoh multi-stage build dengan distroless:
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o app main.go
FROM gcr.io/distroless/static-debian12
COPY --from=builder /app/app /app
USER nonroot:nonroot
ENTRYPOINT ["/app"]
Image Scanning (Vulnerability Scanning)
Image scanning mendeteksi CVE dan paket usang di dalam image. Tools utama:
- Trivy (Aqua Security): Scanner
open-source cepat yang mendeteksi CVE pada OS packages,
language-specific dependencies, secret scanning, dan
misconfigurasi Infrastructure as Code. Contoh:
trivy image nginx:latest. - Grype (Anchore): Scanner open-source
dengan integrasi ke Syft untuk SBOM generation. Contoh:
grype nginx:latest. - Clair (Red Hat): Scanner berbasis API yang sering digunakan sebagai engine scanning di registry seperti Quay.io dan Harbor.
- Docker Scout: Solusi bawaan Docker
untuk vulnerability assessment, policy evaluation, dan
remediation guidance melalui CLI
docker scout.
Vulnerability Severity (CVE)
CVE (Common Vulnerabilities and Exposures) diklasifikasikan berdasarkan CVSS (Common Vulnerability Scoring System):
| Level | Skor CVSS | Tindakan |
|---|---|---|
| Critical | 9.0-10.0 | Perbaiki segera, blokir deployment |
| High | 7.0-8.9 | Prioritas tinggi, perbaiki dalam 48 jam |
| Medium | 4.0-6.9 | Jadwalkan perbaikan pada rilis berikut |
| Low | 0.1-3.9 | Dokumentasikan dan pantau |
Kebijakan zero-CVE untuk image production adalah standar minimum yang harus diterapkan.
Multi-Stage Builds
Multi-stage build memisahkan lingkungan build dan runtime, menghasilkan image final yang ringan dan aman tanpa tools build seperti compiler, debugger, atau package manager:
FROM node:18 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]
Non-Root User
Secara default, container berjalan sebagai root - praktik berbahaya yang harus dihindari. Tambahkan user non-root di Dockerfile:
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
USER appuser
Pastikan juga port binding menggunakan port tinggi (>1024) karena port rendah memerlukan root.
Image Signing
Image signing memastikan integritas dan autentisitas image:
- Docker Content Trust (DCT):
Mengimplementasikan The Update Framework (TUF) untuk
menandatangani dan memverifikasi image Docker. Diaktifkan dengan
export DOCKER_CONTENT_TRUST=1. Setiap push akan meminta signing key passphrase. - Cosign (Sigstore): Tools signing open-source yang lebih modern tanpa memerlukan key management manual. Cosign menggunakan OpenID Connect untuk identitas, keyless signing, dan menyediakan integrasi dengan GitHub Actions, GitLab CI, dan Kubernetes:
cosign sign --key cosign.key image:tag
cosign verify --key cosign.pub image:tag
SBOM (Software Bill of Materials)
SBOM adalah inventori terstruktur dari semua komponen software dalam image. Tools seperti Syft, Trivy, dan Grype dapat menghasilkan SBOM dalam format SPDX atau CycloneDX. SBOM berguna untuk audit compliance, pelacakan CVE, dan supply chain risk assessment:
syft nginx:latest -o spdx-json > sbom.json
trivy image --format spdx-json -o sbom.json nginx:latest
Registry Security
Container registry harus diamankan untuk mencegah distribusi image yang tidak terverifikasi:
- Harbor: Registry open-source enterprise dengan fitur integrated vulnerability scanning (Trivy/Clair), image replication, RBAC, immutable tags, dan webhook. Harbor juga mendukung OIDC dan LDAP untuk autentikasi.
- Docker Registry: Registry bawaan Docker. Gunakan dengan TLS, autentikasi (htpasswd atau token-based), dan garbage collection untuk membersihkan layer yang tidak terpakai.
- AWS ECR / GCP Artifact Registry / Azure ACR: Registry cloud-native dengan integrasi IAM dan scanning bawaan.
Supply Chain Security (SLSA)
SLSA (Supply-chain Levels for Software Artifacts) adalah framework untuk meningkatkan keamanan rantai pasok. Tingkat SLSA 1-4:
- SLSA 1: Build script yang terdokumentasi.
- SLSA 2: Build dari versi kontrol (Git) dengan provenance.
- SLSA 3: Build terisolasi dan reproducible dengan signed provenance.
- SLSA 4: Build two-person reviewed dengan hermetic build environment.
Praktik supply chain security meliputi: signed commits, provenance attestation (in-toto), reproducible builds, dan build pipeline yang terverifikasi.
Kesimpulannya, keamanan container image memerlukan pendekatan holistik - dari base image minimal, scanning rutin, multi-stage build, non-root user, signing, SBOM, hingga keamanan registry. Integrasi tools seperti Trivy, Cosign, dan Harbor dalam pipeline CI/CD memungkinkan deteksi dan pencegahan dini kerentanan sebelum mencapai production.