Hana — VyuApp Support
Online
20/20 pesan tersisa
🌸 Selamat datang di VyuApp! Saya Hana, ada yang bisa saya bantu hari ini?
Semua artikel

DevOps

Docker Container Security Hardening Guide: Panduan Lengkap 2026

Panduan lengkap tentang cara mengamankan Docker containers mulai dari image hardening, runtime security, network isolation, hingga secrets management untuk produksi yang aman.

15 Juli 2026 11 min read#docker#container-security#devops#hardening
Docker Container Security Hardening Guide: Panduan Lengkap 2026
Panduan Lengkap Hardening Keamanan Docker Container untuk Produksi

Docker telah menjadi fondasi utama dalam deployment aplikasi modern, menawarkan kecepatan dan skalabilitas yang luar biasa. Namun, kemudahan ini sering kali datang bersama biaya tersembunyi: attack surface yang kompleks dan terus berkembang. Banyak organisasi mengadopsi Docker tanpa memahami implikasi keamanannya sepenuhnya, meninggalkan mereka rentan terhadap serangan mulai dari supply chain attacks hingga container breakouts.

Panduan ini membahas secara mendalam strategi hardening container yang dapat diimplementasikan oleh tim engineering secara langsung, mulai dari pemilihan base images yang aman hingga konfigurasi runtime security yang robust.

Diagram arsitektur keamanan Docker container dengan multiple layers pertahanan

1. Mengapa Keamanan Container Penting untuk Produksi

Container berbagi kernel bersama host system. Berbeda dari virtual machines yang memiliki isolasi hardware-level, container hanya mengandalkan namespaces dan cgroups untuk isolasi. Jika penyerang berhasil mengeksploitasi kernel vulnerability atau melakukan container escape, mereka mendapatkan akses ke seluruh host system.

Beberapa serangan umum yang mengincar container meliputi container escape untuk keluar dari isolasi, supply chain attacks melalui image yang dikompromi dari registry publik, privilege escalation dengan memanfaatkan capabilities berlebih, lateral movement antar container di jaringan yang sama, serta secrets leakage di mana kredensial tertinggal di dalam image layers.

Praktik hardening yang tepat dapat memitigasi risiko-risiko tersebut secara signifikan. Berikut penjelasan masing-masing strategi yang dapat langsung diimplementasikan. Artikel terkait mengenai optimasi pipeline CI/CD juga membahas bagaimana keamanan terintegrasi ke dalam alur kerja otomasi.

2. Gunakan Base Images Minimal dan Terverifikasi

Salah satu langkah paling berdampak dalam keamanan container adalah membangun container di atas fondasi yang aman dan tepercaya. Gunakan base images dari sumber resmi seperti Docker Hub Official Images atau Verified Publisher. Base images resmi dirawat oleh pengembang upstream, menjalani security scan, dan secara rutin diperbarui bersama patch untuk kerentanan yang diketahui.

Gunakan versi spesifik dengan tag yang jelas, bukan tag :latest yang menyebabkan build tidak stabil dan membuat pelacakan kerentanan menjadi sulit. Contoh: gunakan python:3.9.18-slim-bookworm alih-alih python:latest. Pertimbangkan juga menggunakan Distroless images dari Google yang tidak memiliki shell, tidak memiliki package manager, dan hanya berisi application runtime. Pendekatan ini secara drastis mengurangi attack surface container.

# Contoh penggunaan base image minimal dan spesifik
FROM python:3.9.18-slim-bookworm

# Atau untuk aplikasi Go
FROM golang:1.21-alpine AS builder
FROM alpine:3.18 AS runtime
Arsitektur orkestrasi container dengan multiple security layers pada infrastruktur cloud

3. Jalankan Container sebagai Pengguna Non-Root

Secara default, proses di dalam container berjalan dengan hak akses root (UID 0). Jika penyerang berhasil mengkompromi aplikasi yang berjalan sebagai root, mereka mendapatkan kontrol penuh atas environment container dan berpotensi melakukan container escape ke host system. Menjalankan container dengan user unprivileged yang dedicated membatasi potensi kerusakan dari security breach.

Penyerang yang mengendalikan proses non-root dibatasi oleh permission user tersebut, mencegah mereka menginstal package berbahaya, memodifikasi file sistem, atau melakukan privilege escalation. Platform cloud seperti Google Cloud Run dan Red Hat OpenShift secara default mewajibkan container berjalan sebagai non-root, membuktikan bahwa pendekatan ini sudah menjadi standar industri yang mapan.

# Contoh Dockerfile dengan pengguna non-root
FROM node:20-alpine

# Buat user khusus untuk aplikasi
RUN groupadd -r appgroup && useradd -r -s /bin/false -g appgroup appuser

# Salin file aplikasi dengan ownership yang benar
COPY --chown=appuser:appgroup . /app

# Atur working directory
WORKDIR /app

# Instal dependensi (diperlukan akses sementara)
RUN npm ci --only=production

# Beralih ke pengguna non-root
USER appuser

# Jalankan aplikasi
CMD ["node", "server.js"]

4. Multi-Stage Builds untuk Mengurangi Attack Surface

Multi-stage builds memungkinkan Anda memisahkan build dependencies dari runtime image. Dengan teknik ini, compiler, build tools, dan development dependencies diinstal di stage pertama, lalu hanya binary yang sudah di-compile yang disalin ke stage akhir yang minimal. Hasilnya adalah image yang jauh lebih kecil dengan attack surface yang minimal.

Approach ini memastikan alat-alat berbahaya seperti compilers, shells, dan package managers tidak ada di image akhir. Penyerang tidak dapat menggunakannya meskipun berhasil mengakses container. Selain keamanan, multi-stage builds juga mengurangi ukuran image secara signifikan — dari ratusan MB menjadi puluhan MB.

# Tahap 1: Build
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .

# Tahap 2: Runtime (minimal)
FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
COPY --from=builder /app/main /usr/local/bin/main
USER appuser
CMD ["main"]
Dashboard monitoring cluster Kubernetes untuk pengelolaan keamanan container

5. Vulnerability Scanning dalam Pipeline CI/CD

Integrasikan vulnerability scanning ke dalam CI/CD pipeline Anda untuk mendeteksi kerentanan pada images sebelum mencapai production. Tools seperti Trivy, Snyk, Grype, dan Docker Scout dapat memindai images untuk known vulnerabilities (CVEs) dan memberikan laporan detail tentang tingkat keparahan. Pastikan pipeline memblokir deployment jika ditemukan vulnerabilities dengan severity CRITICAL atau HIGH.

Buat policy yang jelas tentang batas kerentanan yang diperbolehkan, dan pastikan semua images di-scanner secara berkala untuk menemukan kerentanan baru yang mungkin ditemukan sesudah deployment. Pendekatan shift-left ini memastikan masalah keamanan tertangani sedini mungkin, mengurangi biaya perbaikan secara signifikan. Pelajari lebih lanjut tentang panduan deployment Kubernetes untuk memahami konteks orkestrasi yang lebih luas.

# Contoh scanning dengan Trivy di CI/CD
# GitHub Actions
- name: Jalankan Trivy vulnerability scanner
  uses: aquasecurity/trivy-action@master
  with:
    image-ref: 'myapp:latest'
    format: 'sarif'
    output: 'trivy-results.sarif'
    severity: 'CRITICAL,HIGH'

# Atau menggunakan Docker Scout
docker scout cves myapp:latest --only-severities critical,high

// Advertisement

6. Capability Dropping dan Pengelolaan Privilege

Linux kernel capabilities adalah sekumpulan hak akses yang dapat digunakan oleh proses privileged. Secara default container berjalan dengan subset capabilities. Anda dapat mengubahnya dengan men-drop capabilities yang tidak diperlukan menggunakan --cap-drop dan menambahkan yang dibutuhkan menggunakan --cap-add.

Paling aman adalah men-drop semua capabilities terlebih dahulu, lalu menambahkan hanya yang benar-benar diperlukan. Selain itu, gunakan flag --security-opt=no-new-privileges untuk mencegah privilege escalation via setuid/setgid binaries. Jangan pernah menjalankan container dengan flag --privileged karena flag ini menambahkan SEMUA Linux kernel capabilities ke container, memberikan hak akses yang sama dengan host system.

# Men-drop semua capabilities, menambahkan hanya yang dibutuhkan
docker run --cap-drop ALL --cap-add CHOWN --cap-add SETGID --cap-add SETUID myapp:latest

# Contoh di docker-compose.yml
services:
  webapp:
    image: myapp:latest
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
      - CHOWN
    security_opt:
      - no-new-privileges:true
Pipeline otomasi deployment dengan security scanning terintegrasi

7. Seccomp Profiles dan Mandatory Access Control

Seccomp (Secure Computing Mode) adalah fitur Linux yang membatasi system calls yang dapat diakses oleh proses. Platform ini menggunakan default seccomp profile yang memblokir sekitar 44 dari lebih 300 available syscalls. Anda dapat membuat custom seccomp profile untuk membatasi syscall lebih ketat sesuai kebutuhan aplikasi. Gunakan tools seperti strace atau sysdig saat development untuk mengetahui syscall apa saja yang digunakan, lalu buat profile yang memperbolehkan hanya syscall yang benar-benar dibutuhkan.

AppArmor dan SELinux adalah Mandatory Access Control systems yang memberikan lapisan keamanan tambahan di atas discretionary access controls. AppArmor menggunakan path-based profiles untuk membatasi kemampuan program, cocok untuk distribusi Ubuntu dan Debian. SELinux menggunakan label-based policy yang lebih fleksibel namun kompleks, umum digunakan di RHEL, CentOS, dan Fedora.

# Contoh custom seccomp profile (seccomp.json)
{
  "defaultAction": "SCMP_ACT_ERRNO",
  "architectures": ["SCMP_ARCH_X86_64"],
  "syscalls": [
    {
      "names": ["read", "write", "open", "close", "stat", "fstat",
                "mmap", "mprotect", "munmap", "brk", "exit_group",
                "futex", "nanosleep"],
      "action": "SCMP_ACT_ALLOW"
    }
  ]
}

# Menggunakan seccomp profile
docker run --security-opt seccomp=my-seccomp-profile.json myapp:latest

# Menggunakan AppArmor profile
docker run --security-opt apparmor=my-custom-profile myapp:latest

# Memverifikasi AppArmor profile yang aktif
docker inspect --format '{{.AppArmorProfile}}' container_name

8. Rootless Mode untuk Dampak Minimal

Rootless mode menjalankan daemon dan semua container di bawah akun user reguler, bukan root. Jika penyerang berhasil melakukan container escape, mereka hanya mendapatkan akses sebagai user unprivileged di host — bukan root. Dari semua langkah hardening, pendekatan ini memiliki dampak terbesar terhadap keamanan karena secara fundamental mengubah privilege model runtime.

Rootless mode memiliki beberapa keterbatasan seperti tidak dapat menggunakan ports di bawah 1024 dan beberapa fitur jaringan tertentu. Namun, manfaat keamanannya jauh lebih besar daripada keterbatasan tersebut untuk sebagian besar use case di produksi. Pelajari lebih lanjut tentang otomasi tools DevOps yang dapat mendukung migrasi ke rootless mode.

# Instalasi dependencies untuk rootless mode
sudo apt-get install -y uidmap docker-ce-rootless-extras

# Verifikasi subordinate UIDs/GIDs
grep "^$(whoami):" /etc/subuid
grep "^$(whoami):" /etc/subgid

# Stop daemon root-based
sudo systemctl disable --now docker.service docker.socket

# Jalankan rootless setup
dockerd-rootless-setuptool.sh install

# Atur environment variables
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock

# Enable linger agar aktif saat boot
sudo loginctl enable-linger $(whoami)

# Verifikasi rootless mode
docker info --format '{{.SecurityOptions}}'
# Output harus termasuk "rootless"

9. Segregasi Jaringan dan Pengelolaan Rahasia

Inter-Container Connectivity (ICC) diaktifkan secara default, memungkinkan semua container berkomunikasi satu sama lain melalui docker0 bridged network. Daripada menonaktifkan komunikasi antar container sepenuhnya, buatlah network khusus dan tentukan container mana yang terhubung ke dalamnya. Di Kubernetes, gunakan Network Policies untuk mendefinisikan aturan yang mengontrol interaksi pod di cluster.

Jangan pernah menyimpan secrets seperti passwords, API keys, atau certificates di dalam images atau source code. Gunakan Docker secrets untuk Swarm deployments atau integrasikan bersama external secret management platforms seperti HashiCorp Vault, AWS Secrets Manager, atau GCP Secret Manager. Aktifkan juga Docker Content Trust (export DOCKER_CONTENT_TRUST=1) untuk memastikan integritas images yang di-pull hanya dari publisher yang tepercaya.

# Membuat network khusus untuk isolasi
docker network create --driver bridge --internal isolated-net

# Menjalankan container di network terisolasi
docker run --network isolated-net --name webapp myapp:latest

# Docker Compose dengan network segmentation
services:
  frontend:
    image: nginx:alpine
    networks:
      - frontend-net
  backend:
    image: myapp:latest
    networks:
      - frontend-net
      - backend-net
  database:
    image: postgres:15-alpine
    networks:
      - backend-net

networks:
  frontend-net:
    driver: bridge
  backend-net:
    driver: bridge
    internal: true  # Tidak ada akses internet

# Menggunakan Docker secrets
services:
  webapp:
    image: myapp:latest
    secrets:
      - db_password
    environment:
      - DB_PASSWORD_FILE=/run/secrets/db_password

secrets:
  db_password:
    file: ./db_password.txt
Infrastruktur cloud enterprise dengan monitoring keamanan real-time dan logging

10. Read-Only Filesystem, Resource Limits, dan Monitoring

Mount filesystem container sebagai read-only untuk mencegah modifikasi file system oleh attacker. Kombinasikan bersama tmpfs mounts untuk direktori yang memang perlu ditulis secara temporary. Tetapkan resource limits menggunakan --memory, --cpus, dan --pids-limit untuk mencegah container menghabiskan seluruh resources host yang dapat menyebabkan denial of service terhadap container lain.

Implementasi logging dan monitoring yang comprehensif untuk mendeteksi dan merespons ancaman secara real-time. Aktifkan logging driver, konfigurasi auditd di host untuk memantau syscall, dan gunakan runtime security tools seperti Falco atau Sysdig untuk anomaly detection. Integrasikan bersama SIEM systems seperti Splunk atau ELK stack untuk analisis log yang lebih mendalam. Pantau daemon logs secara rutin untuk mendeteksi aktivitas mencurigakan seperti unauthorized image pulls atau privilege escalation attempts.

# Jalankan dengan read-only filesystem
docker run --read-only --tmpfs /tmp --tmpfs /var/run myapp:latest

# Resource limits untuk mencegah DoS
docker run \
  --memory="256m" \
  --cpus="0.5" \
  --pids-limit=100 \
  --read-only \
  myapp:latest

# Konfigurasi logging
# /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3",
    "labels": "service",
    "env": "os,app"
  }
}

# Audit rules untuk Docker
auditctl -w /usr/bin/docker -p rwxa -k docker
auditctl -w /var/lib/docker -p rwxa -k docker
auditctl -w /etc/docker -p rwxa -k docker

Checklist Keamanan Container

No Praktik Keamanan Prioritas Dampak
1 Base images minimal dan terverifikasi Tinggi Mengurangi attack surface hingga 70%
2 Non-root user execution Tinggi Mencegah 90% privilege escalation vectors
3 Multi-stage builds Sedang Mengurangi image size 40-80%
4 Vulnerability scanning di CI/CD Tinggi Mendeteksi 95% known CVEs sebelum deployment
5 Capability dropping Tinggi Menurunkan privileges 60% dari default
6 Seccomp profiles Sedang Membatasi 85% available syscalls
7 AppArmor/SELinux Sedang MAC enforcement mencegah 75% lateral movement
8 Rootless mode Tinggi Mengurangi dampak container escape hingga 95%
9 Network segmentation Tinggi Mencegah 80% lateral movement antar container
10 Secrets management Kritis Menghilangkan 100% credentials exposure di image
11 Read-only filesystem Sedang Mencegah 90% file modification attacks
12 Monitoring dan logging Tinggi Mendeteksi ancaman dalam hitungan detik

// Advertisement

Pertanyaan Umum

1. Apa perbedaan rootless mode dan menjalankan container sebagai non-root?

Menjalankan container sebagai non-root hanya memastikan proses di dalam container berjalan dengan user unprivileged. Namun, Docker daemon tetap berjalan sebagai root di host. Rootless mode berbeda karena menjalankan daemon itu sendiri sebagai user reguler. Jika terjadi container escape, penyerang hanya mendapatkan akses user biasa di host, bukan root. Kombinasi keduanya memberikan pertahanan paling kuat.

2. Tools apa yang direkomendasikan untuk vulnerability scanning images?

Trivy menjadi pilihan populer karena open-source, mendukung berbagai vulnerability databases, dan terintegrasi mudah bersama CI/CD pipelines. Snyk menawarkan analisis yang lebih mendalam bersama remediation advice. Grype dari Anchore cocok untuk integrasi bersama Syft untuk SBOM generation. Docker Scout menjadi pilihan natif bagi pengguna Docker Desktop. Kombinasikan minimal dua tools untuk cakupan yang lebih luas.

3. Bagaimana cara mengetahui apakah container sudah aman?

Jalankan vulnerability scanner terhadap image untuk memeriksa known CVEs. Verifikasi bahwa container berjalan sebagai non-root, menggunakan base image minimal, dan tidak memiliki capabilities berlebih. Periksa apakah filesystem di-mount sebagai read-only, resource limits sudah ditetapkan, serta logging dan monitoring sudah aktif. Gunakan tools seperti Docker Bench Security yang mengautomasi audit terhadap CIS Docker Benchmark.

4. Apakah Docker Content Trust wajib diaktifkan untuk semua deployment?

Docker Content Trust memastikan hanya images yang ditandatangani oleh publisher tepercaya yang di-pull. Untuk production environments, mengaktifkan fitur ini sangat disarankan karena mencegah supply chain attacks. Namun, DCT memiliki keterbatasan seperti tidak mendukung semua registries dan menambah latensi pada pull operations. Evaluasi berdasarkan tingkat keamanan yang dibutuhkan oleh aplikasi Anda.

Sumber Referensi

// Advertisement

V

VyuApp Studio

Bespoke web engineering — Garut, ID