# Pemindaian Keamanan Container Docker dengan Trivy: Panduan Produksi

> Integrasikan pemindaian kerentanan container Trivy ke dalam alur kerja Docker Anda — mencakup integrasi CI/CD, pemilihan base image, dan mengurangi attack surface container.

URL: https://www.matthewswong.com/id/blog/docker-container-security-scanning/

- Author: Matthews Wong (https://www.matthewswong.com/id/about/)
- Published: 2025-06-10
- Updated: 2025-06-10
- Category: DevOps

Setiap image Docker yang Anda tarik adalah keputusan kepercayaan. Image Node.js 20 resmi di Docker Hub berisi instalasi Debian atau Alpine Linux penuh — dan paket sistem operasi tersebut memiliki kerentanan. Pada 2024, laporan keamanan container Snyk menemukan bahwa 84% image container memiliki setidaknya satu kerentanan yang diketahui, dan 45% memiliki CVE kritis atau tinggi. Saya menjalankan pemindaian container Trivy dalam pipeline CI/CD saya untuk semua deployment produksi dan telah memblokir beberapa pembaruan image yang akan memperkenalkan CVE baru.

## Mengapa Pemindaian Container Penting

Container tidak menyediakan isolasi keamanan — mereka menyediakan isolasi proses. Kerentanan dalam library di dalam container Anda adalah kerentanan yang dapat dieksploitasi dalam aplikasi Anda. Kerentanan Log4Shell (CVE-2021-44228) pada akhir 2021 mempengaruhi aplikasi Java mana pun yang menggunakan log4j — termasuk aplikasi yang berjalan dalam container. Container yang belum dibangun ulang dengan dependensi yang dipatch tetap rentan bahkan ketika OS host sudah di-patch sepenuhnya.

### Trivy: Scanner yang Saya Gunakan

Trivy adalah pemindai kerentanan open-source oleh Aqua Security yang memindai image Docker, filesystem, repositori git, dan manifes Kubernetes. Ini memeriksa: paket OS (Debian, Alpine, Ubuntu, RHEL), paket khusus bahasa (npm, pip, modul Go, Maven), miskonfigurasi infrastruktur, dan rahasia yang terekspos dalam image. Trivy memperbarui database kerentanannya setiap hari dari NVD, GitHub Advisory, dan database kerentanan khusus OS.

> Dari pengalaman saya menjalankan Trivy dalam CI/CD produksi: gunakan `--ignore-unfixed` dalam pipeline CI Anda untuk hanya gagal pada kerentanan yang memiliki perbaikan yang tersedia. Gagal pada setiap CVE termasuk yang tidak dapat diperbaiki menciptakan kelelahan alert — developer mulai mengabaikan output scanner. Hanya temuan yang dapat ditindaklanjuti yang ditindaklanjuti.

## Mengintegrasikan Trivy ke GitHub Actions

Pola integrasi CI yang saya gunakan: bangun image Docker di CI, jalankan pemindaian Trivy pada image yang dibangun, gagalkan pipeline pada kerentanan kritis atau tinggi dengan perbaikan yang tersedia, dan unggah laporan SARIF ke tab GitHub Security untuk pelacakan. Ini memastikan tidak ada image dengan kerentanan kritis yang didorong ke produksi.

### Mengurangi Attack Surface: Pemilihan Base Image

Kontrol keamanan container paling efektif adalah memilih base image minimal. Perbandingan untuk aplikasi Node.js: node:20 (berbasis Debian) — 600MB, 300+ paket, banyak yang tidak dibutuhkan. node:20-slim — 200MB, paket Debian minimal. node:20-alpine — 65MB, Alpine Linux dengan hanya ~20 paket. Distroless (gcr.io/distroless/nodejs20) — tidak ada shell, tidak ada package manager, attack surface minimal. Saya menggunakan node:20-alpine untuk sebagian besar layanan.

> **Peringatan Pinning Base Image**

> Menggunakan `FROM node:20` dalam Dockerfile Anda berbahaya — ini diam-diam diperbarui ke patch terbaru saat Anda rebuild, yang dapat memperkenalkan kerentanan baru atau breaking change. Selalu pin ke digest tertentu: `FROM node:20.18.1-alpine3.20@sha256:'<'digest>`. Gunakan Renovate Bot atau Dependabot untuk mengotomatiskan pembaruan base image — mereka membuat PR dengan changelog ketika base image baru tersedia.

## Praktik Terbaik Keamanan Dockerfile

Di luar pemilihan base image, keamanan Dockerfile bergantung pada: menjalankan sebagai pengguna non-root (USER node atau USER 1001 — jangan pernah jalankan container produksi sebagai root), tidak menyalin rahasia ke dalam image (gunakan rahasia build-time dengan --mount=type=secret, bukan ARG), menggunakan multi-stage build untuk mengecualikan alat build dan source code dari image final, dan menetapkan sistem file read-only jika memungkinkan.

## Keamanan Runtime dengan Trivy dan Kebijakan

Trivy dapat memindai container yang berjalan dan manifes Kubernetes selain image. Untuk Kubernetes: `trivy k8s --report summary cluster` memindai seluruh cluster Anda untuk kerentanan dan miskonfigurasi. OPA Gatekeeper atau Kyverno dapat menegakkan kebijakan yang mencegah pod menggunakan image yang tidak dipindai atau tidak sesuai agar tidak berjalan di produksi.

## Alur Kerja Keamanan Container Saya

Alur kerja lengkap: Dockerfile menggunakan base image Alpine yang di-pin dan pengguna non-root. Multi-stage build mengecualikan devDependencies dan alat build dari image final. GitHub Actions membangun image dan menjalankan Trivy dengan --exit-code 1 pada CVE kritis/tinggi yang dapat diperbaiki. Output SARIF Trivy diunggah ke tab GitHub Security untuk pelacakan. Image yang di-tag dengan git SHA dan didorong ke registry hanya setelah pemindaian lulus. Renovate Bot membuat PR mingguan untuk pembaruan base image.

## Sumber & Bacaan Lanjutan

- Aqua Security — Trivy Documentation — https://trivy.dev/latest/docs/
- Snyk — Container Security Report 2024 — https://snyk.io/reports/container-security/
- NIST — CVE-2021-44228 Log4Shell — https://nvd.nist.gov/vuln/detail/CVE-2021-44228

## Source links

- https://trivy.dev/latest/docs/
- https://snyk.io/reports/container-security/
- https://nvd.nist.gov/vuln/detail/CVE-2021-44228

## FAQ

### Mengapa saya harus menggunakan Trivy alih-alih sekadar mempercayai image resmi dari Docker Hub?

Image resmi seperti node:20 tetap berisi instalasi OS penuh dengan ratusan paket, banyak di antaranya memiliki CVE yang diketahui. Laporan keamanan container Snyk 2024 menemukan 84% image container memiliki setidaknya satu kerentanan yang diketahui dan 45% memiliki CVE kritis atau tinggi. Trivy memindai paket OS, paket khusus bahasa, dan rahasia yang terekspos sehingga Anda tahu persis risiko apa yang Anda terima sebelum deployment.

### Apa fungsi flag --ignore-unfixed dan mengapa direkomendasikan untuk pipeline CI?

Flag --ignore-unfixed membuat Trivy hanya menggagalkan pipeline pada kerentanan yang sudah memiliki perbaikan yang tersedia, melewati CVE yang belum ada patch-nya. Tanpa flag ini, pipeline akan gagal pada isu yang tidak bisa diperbaiki dan developer mulai mengabaikan output scanner — fenomena yang disebut kelelahan alert. Post ini merekomendasikan memisahkan pelaporan kerentanan yang tidak bisa diperbaiki ke dalam tinjauan keamanan mingguan khusus untuk pengambilan keputusan risiko yang lebih disengaja.

### Seberapa besar pengurangan eksposur kerentanan dengan beralih ke base image minimal?

Beralih dari node:20 berbasis Debian (600 MB, 300+ paket) ke node:20-alpine (65 MB, ~20 paket) biasanya mengurangi temuan Trivy dari 80–120 kerentanan menjadi hanya 5–15. Untuk komponen yang kritis dari sisi keamanan, image distroless melangkah lebih jauh dengan menghapus shell dan package manager sepenuhnya. Semakin sedikit paket berarti semakin sedikit permukaan kerentanan yang potensial.

### Mengapa menggunakan FROM node:20 tanpa digest dianggap berbahaya?

Referensi hanya dengan tag akan secara diam-diam menarik patch terbaru setiap kali image dibangun ulang, yang dapat memperkenalkan CVE baru atau breaking change tanpa ada tinjauan sebelumnya. Post ini merekomendasikan untuk selalu pin ke digest tertentu — misalnya FROM node:20.18.1-alpine3.20@sha256:<digest> — dan menggunakan Renovate Bot atau Dependabot untuk mengelola pembaruan terkontrol melalui PR yang ditinjau. Penulis pernah mengalami insiden nyata di mana pembaruan tanpa pin mengubah pengguna default dari root ke node dan merusak asumsi izin file dalam aplikasi.

### Alur kerja CI/CD apa yang digunakan penulis untuk menerapkan keamanan container di produksi?

Alur kerjanya membangun image Docker di GitHub Actions, menjalankan Trivy dengan --exit-code 1 pada CVE kritis/tinggi yang bisa diperbaiki, mengunggah laporan SARIF ke tab GitHub Security untuk pelacakan, dan hanya mendorong image yang di-tag dengan git SHA ke registry setelah pemindaian lulus. Renovate Bot membuat PR mingguan untuk pembaruan base image, dan pemindaian Trivy bulanan berjalan terhadap semua image di cluster produksi. Proses ini berhasil mengurangi jumlah CVE kritis dari 40+ menjadi konsisten di bawah 5.

---

- HTML version: https://www.matthewswong.com/id/blog/docker-container-security-scanning/
- English: https://www.matthewswong.com/en/blog/docker-container-security-scanning/
- Site index for agents: https://www.matthewswong.com/llms.txt
- Sitemap: https://www.matthewswong.com/sitemap.xml
- API description (OpenAPI): https://www.matthewswong.com/openapi.json
