Hari 30: Fase 2 Selesai — Retrospektif 15 Hari Container Security
4 min read

Hari 30: Fase 2 Selesai — Retrospektif 15 Hari Container Security

15 hari, 17 security fixes, dari Dockerfile mentah sampai distroless 7.97MB. Pipeline 8 scanner paralel dengan security gate. Ini retrospektif Fase 2.

devsecops
container security
docker
terraform
retrospective
Share

Hari 30. Separuh perjalanan 60 hari DevSecOps selesai. Fase 2 tutup tirai. Saatnya duduk, tarik napas, dan tulis retrospektif.

Dari 15 hari ini, ada banyak yang dipelajari. Bukan cuma tools, tapi juga pola pikir security. Mari kita rangkum.

Apa yang Dibangun di Fase 2?

Dalam 15 hari (Day 16-30), SecureBank API berubah dari kode Go mentah jadi container yang hardened, di-infrastructure-kan dengan Terraform, di-scan dengan DAST, dan di-pipeline-kan jadi satu kesatuan.

Container Security (Day 16-19):

  • Multi-stage Dockerfile: golang:1.26-alpine → distroless static
  • Image size: 350MB → 7.97MB (44x lebih kecil)
  • 8-layer hardening di docker-compose: non-root user, read-only filesystem, tmpfs, no-new-privileges, cap_drop ALL, resource limits
  • Cosign v3.1.1 image signing dan verification

IaC Security (Day 20-23):

  • 10 Terraform files: VPC, S3, EC2, IAM, KMS, SNS/SQS
  • Checkov: 102 checks passed, 0 failed
  • Trivy IaC: 0 findings (CRITICAL/HIGH/MEDIUM)
  • Remediasi: S3 encryption KMS, SG restricted, IAM least privilege, KMS rotation

DAST (Day 24-26):

  • OWASP ZAP Baseline Scan: 0 FAIL, 66 PASS, 1 WARN (false positive)
  • Remediasi: 8 security headers via SecurityHeadersHandler wrapper
  • Go binary approach di CI (~5s vs ~30s Docker build, hasil identik)

Compliance + Consolidation (Day 27-29):

  • AI-assisted IaC fix: variable validation, IAM Condition, S3 lifecycle
  • InSpec compliance: 3/3 controls PASS (local only)
  • Pipeline consolidation: 2 workflow files jadi 1, 8 jobs + security gate

Lima Pelajaran Terbesar

1. Distroless = attack surface minimal. Image 7.97MB tanpa shell, tanpa package manager. Attacker yang dapat RCE tidak bisa apa-apa. Trade-off: no HEALTHCHECK, butuh K8s liveness probe.

2. Checkov + Trivy IaC saling melengkapi. Checkov untuk policy detail (102 checks), Trivy untuk severity gate (CRITICAL/HIGH/MEDIUM). Pakai keduanya, bukan pilih satu.

3. ZAP false positive butuh dokumentasi. Rule 10049 (cacheability) justru correct behavior untuk API. continue-on-error: true solusinya, tapi alasannya harus dicatat supaya developer berikutnya tidak bingung.

4. Pipeline consolidation = maintainability. 2 file workflow jadi 1. 8 jobs paralel, security gate sebagai final checkpoint. "Apakah pipeline aman?" jadi pertanyaan yes/no, bukan "cek 7 job satu-satu".

5. 0 scanner findings bukan production-ready. AI review menemukan 6 improvements yang scanner lewati (variable validation, IAM Condition, S3 lifecycle). Scanner menemukan pattern, bukan design flaw.

Angka-Angka Fase 2

Metrik Hasil
Image size reduction 44x (350MB → 7.97MB)
CVE di base image 0
Checkov checks 102/0 passed/failed
Trivy IaC findings 0 (MEDIUM+)
ZAP findings 0 FAIL, 1 WARN false positive
Security headers 8 implemented
InSpec controls 3/3 PASS
Pipeline jobs 8 (paralel + security gate)
Workflow files 1 (was 2)
Unit tests 25 all PASS

Tantangan Terbesar

ZAP rule 10049 bikin pipeline RED dari Day 25-26. Ternyata false positive untuk API — dual personality: response yang tidak ada Cache-Control di-mark "storable", response dengan Cache-Control juga di-mark. Solusinya continue-on-error: true dengan dokumentasi yang jelas.

Gitleaks --no-gitignore flag ternyata tidak pernah ada. Pipeline RED dari Day 14 sampai Day 22. Asumsi yang salah tertulis di dokumentasi Fase 1. Lesson: selalu validasi dengan --help sebelum menulis dokumentasi.

Koneksi ke Fase 3

Docker image yang sudah hardened dan signed akan di-deploy ke Kubernetes. K8s liveness probe akan gantikan Dockerfile HEALTHCHECK (distroless tidak punya shell). Terraform infra jadi target IaC scan lanjutan. Pipeline 8 jobs akan ditambah K8s manifest scanner.

Carry-over dari Fase 1: rate limiter (DREAD 9.6), user-scoped authorization (8.4), RBAC (6.6) masih unmitigated. Sebagian akan di-address di Fase 3.

Repo

Semua code ada di: https://github.com/stayrelevantid/chalange-devsecops

Retrospektif lengkap ada di: docs/fase-2-infra-container.md dan progress/retrospektif/fase-2-retrospektif.md

Kesimpulan

30 hari. Separuh perjalanan. 2 fase selesai. Dari setup repo sampai pipeline 8 scanner paralel. Besok mulai Fase 3 — Kubernetes & Runtime Security. Challenge baru: k3d cluster, OPA Gatekeeper, Falco, RBAC, Network Policies.

Sampai jumpa di Fase 3.

Enjoyed this article? Share it!

Share

Diskusi & Komentar

Artikel Terkait