Semua artikel
// Artikel

Checklist Review Keamanan Container Image

Dipublikasikan 20 Juli 2026

Review image container mengikuti artefak dari source sampai runtime. Tag adalah label yang dapat berubah; digest mengidentifikasi konten yang tepat. Docker menjelaskan bahwa pin digest membuat build dapat diulang, tetapi base yang dipin perlu diperbarui secara sengaja saat ada perbaikan upstream. Review build dan runtime policy bersama-sama; keduanya tidak menggantikan asesmen registry, host, atau cluster.

Paket bukti untuk buyer

Minta Dockerfile, .dockerignore, log build, SBOM atau inventaris package, hasil scan yang terkait digest, metadata registry, manifest deployment, dan register pengecualian. Setiap artefak memuat repository, commit, digest, timestamp, owner, status pass/fail, dan lokasi penyimpanan. Scan tanpa digest tidak membuktikan image mana yang dinilai.

GateBuktiKondisi passOwner
Provenanceregistry, commit source, digestdigest berasal dari build direviewowner build
Layerhistory dan SBOMtidak ada secret atau artefak tidak perluowner aplikasi
Basesource, tag, digest, catatan refreshsource didukung dan jalur update adaowner platform
User runtimeDockerfile dan pengaturan PodUID non-root bernama bila memungkinkanowner workload
Policy runtimemanifest dan hasil admissionkeputusan policy disimpanowner cluster

Build dan layer

Gunakan multi-stage build agar compiler, test fixture, package cache, dan source map tidak masuk image akhir kecuali dibutuhkan. Docker merekomendasikan base tepercaya yang kecil serta hanya dependency runtime. Inspeksi setiap COPY, ADD, RUN, ENV, dan build argument. Secret yang dihapus pada layer berikutnya tetap ada dalam history layer sebelumnya. Jangan menaruh credential jangka panjang dalam instruksi Dockerfile, layer environment, source, atau build context yang terlalu luas. Kecualikan file environment lokal, key, cache dependency, dan test yang tidak dipakai melalui .dockerignore.

FROM alpine:3.21@sha256:<reviewed-digest>
RUN addgroup -S app && adduser -S -G app -u 10001 app
WORKDIR /app
COPY --chown=10001:10001 --from=build /out/server ./server
USER 10001:10001
ENTRYPOINT ["./server"]

Ganti placeholder saat build disetujui; nilai itu bukan nilai produksi. Catat digest hasil dan revisi source. Pinning mengontrol identitas artefak, bukan status kerentanan. Jalankan build dengan --pull saat policy mengizinkan refresh base, scan digest baru, review perubahan, lalu promosikan output yang disetujui saja.

Triage package

Bandingkan inventaris dengan kebutuhan aplikasi. Shell, package manager, compiler, tool debug, dan sertifikat yang tidak digunakan menambah komponen yang harus diperiksa. Image kecil tidak otomatis aman. Validasi kepemilikan executable, path yang dapat ditulis, port terbuka, perintah default, dan fetch jarak jauh. Pilih COPY eksplisit daripada menyalin seluruh context.

Temuan scan perlu triage, bukan penerimaan atau penolakan otomatis. Catat package, versi terpasang, digest, ketersediaan perbaikan, paparan, owner, keputusan, dan due date. Status pass hanya bila policy terpenuhi atau pengecualian berbatas waktu mencantumkan approver serta kontrol kompensasi. Suppression tanpa expiry gagal review. Perbaikan selesai memerlukan digest baru, scan revisi, dan referensi deployment yang diperiksa ulang.

Policy runtime

Workload Kubernetes sebaiknya memakai digest disetujui dan pengaturan ketat bila aplikasi mendukungnya:

securityContext:
  runAsNonRoot: true
  runAsUser: 10001
  allowPrivilegeEscalation: false
  readOnlyRootFilesystem: true
  capabilities: { drop: ["ALL"] }

Uji startup, logging, file sementara, dan ownership; root filesystem read-only sering memerlukan volume writable eksplisit. Admission policy dapat menolak tag mutable, container privileged, user root, atau digest belum discan. Simpan keputusan policy bersama manifest. Pengecualian memerlukan workload, alasan, owner, kontrol kompensasi, expiry, perbaikan, dan hasil retest.

Record keputusan rilis

Sebelum rilis, satukan revisi source, image digest, SBOM, scan, hasil admission, dan manifest deployment dalam satu record rilis yang tidak dapat diubah. Catat owner keputusan, waktu keputusan, environment, versi policy, dan status semua gate. Gate fail tetap fail sampai digest pengganti menyediakan bukti; membangun ulang tag sama tanpa mencatat digest bukan perbaikan. Untuk promosi darurat, simpan pengecualian eksplisit dan jadwalkan review normal setelah containment.

Deliverable dan batas

Deliver digest register, indeks bukti, temuan layer/package, hasil runtime policy, pengecualian, serta owner/status perbaikan. Review image tidak membuktikan workload berjalan bebas jalur eksploitasi. Pengujian infrastruktur dapat memeriksa scope deployment yang disepakati.

Kasus kerja: rebuild dari base disetujui

Build satu image layanan dari base yang dipin dan disetujui, tangkap digest, inventaris perangkat lunak, serta output scanner. Output deployment yang diharapkan merujuk digest immutable, bukan tag mutable. Masukkan package pelanggar kebijakan hanya di branch uji; pipeline harus memblok promosi dengan temuan yang terkait layer atau package, sedangkan image normal melalui jalur terdokumentasi tanpa pengecualian. Build ulang kemudian dari input sama dan bandingkan sinyal reproduksibilitas yang diharapkan tanpa mengklaim identik bit-per-bit bila sistem build tidak menjaminnya.

Uji credential registry dicabut, image tanpa signature jika kebijakan signature berlaku, feed kerentanan basi, dan penggantian image setelah scan. Bukti penutupan memuat run build, digest, inventaris, waktu scanner dan versi database, hasil admission, owner perbaikan, serta retest. Pengecualian harus mengikat digest atau package yang sempit, menetapkan masa berlaku, dan meminta konfirmasi independen bahwa image pengganti dipindai sebelum masa berlaku habis.

Serah-terima operasional: owner rilis memetakan digest terdeploy ke catatan build dan environment. Retensi registry menyimpan digest untuk respons insiden. Uji rollback memakai digest disetujui sebelumnya, lalu scan ulang bila policy atau feed berubah. Catat output bersama bukti rilis.

Pemeriksaan akhir menautkan digest terdeploy ke hasil build, inventaris package, dan keputusan policy admission. Output diharapkan: hanya artefak yang discan dan disetujui berjalan pada environment sasaran. Kasus tepi: tag dipindahkan setelah approval; verifikasi digest, bukan nama tag. Tutup setelah bukti rollback dan retest tersedia untuk owner rilis.

Sources

Punya sistem yang perlu diuji?