1. Docker Security - Tổng quan
Bảo mật Docker bao gồm nhiều lớp: từ Docker daemon, container runtime, image, đến application. Mỗi lớp cần được bảo vệ riêng biệt.
┌─────────────────────────────────────────┐
│ Layer 5: Application Security │
│ (Code, dependencies, secrets) │
├─────────────────────────────────────────┤
│ Layer 4: Image Security │
│ (Base images, scanning, signing) │
├─────────────────────────────────────────┤
│ Layer 3: Container Runtime Security │
│ (Namespaces, cgroups, capabilities) │
├─────────────────────────────────────────┤
│ Layer 2: Docker Daemon Security │
│ (TLS, authorization, rootless) │
├─────────────────────────────────────────┤
│ Layer 1: Host OS Security │
│ (Kernel, updates, hardening) │
└─────────────────────────────────────────┘
2. Docker Daemon Security
2.1. Rootless Docker
Chạy Docker daemon mà không cần root privileges:
# Cài đặt rootless Docker dockerd-rootless-setuptool.sh installCấu hình environment
export PATH=/home/user/bin:$PATH export DOCKER_HOST=unix:///run/user/1000/docker.sock
Verify
docker info | grep -i rootless
2.2. Docker Daemon TLS
// /etc/docker/daemon.json
{
"tls": true,
"tlsverify": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
}
3. Container Runtime Security
3.1. Non-root User
# Trong Dockerfile
FROM node:20-alpine
RUN addgroup -S app && adduser -S app -G app
WORKDIR /app
COPY --chown=app:app . .
RUN npm ci --only=production
USER app
CMD ["node", "server.js"]
# Verify container user
docker exec my-app whoami
docker exec my-app id
3.2. Read-only Filesystem
# Container với read-only filesystem
docker run -d \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=100m \
--tmpfs /var/run:rw,noexec,nosuid \
-v app-data:/data \
myapp
# Docker Compose
services:
api:
image: myapp:latest
read_only: true
tmpfs:
- /tmp
- /var/run
volumes:
- app-data:/data
3.3. Linux Capabilities
# Drop tất cả capabilities và chỉ add cần thiết docker run -d \ --cap-drop ALL \ --cap-add NET_BIND_SERVICE \ myappXem capabilities của container
docker exec my-app cat /proc/1/status | grep Cap
3.4. Security Options
# No new privileges docker run -d --security-opt=no-new-privileges:true myappSeccomp profile
docker run -d --security-opt seccomp=./seccomp-profile.json myapp
AppArmor profile
docker run -d --security-opt apparmor=docker-default myapp
# Docker Compose
services:
api:
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
4. Image Security
4.1. Vulnerability Scanning
# Trivy scan trivy image --severity HIGH,CRITICAL myapp:latestDocker Scout
docker scout cves myapp:latest
Snyk
snyk container test myapp:latest
Tích hợp vào CI/CD
Fail build nếu có critical vulnerabilities
trivy image --exit-code 1 --severity CRITICAL myapp:latest
4.2. Docker Content Trust (Image Signing)
# Enable Docker Content Trust export DOCKER_CONTENT_TRUST=1Push signed image
docker push myregistry/myapp:1.0
Pull chỉ signed images
docker pull myregistry/myapp:1.0
Cosign (modern alternative)
cosign sign myregistry/myapp:1.0 cosign verify myregistry/myapp:1.0
4.3. Image Best Practices
Sử dụng minimal base images (Alpine, Distroless)
Pin image versions (không dùng latest)
Scan images định kỳ
Không cài đặt unnecessary packages
Không copy secrets vào image
5. Network Security
# Isolate containers bằng custom networks docker network create --internal internal-netContainer trên internal network không thể access internet
docker run -d --network internal-net --name db postgres:16
Chỉ expose cần thiết
❌ Bad
docker run -p 5432:5432 postgres:16
✅ Good - chỉ bind localhost
docker run -p 127.0.0.1:5432:5432 postgres:16
6. CIS Docker Benchmark
CIS Docker Benchmark cung cấp checklist bảo mật cho Docker:
# Chạy Docker Bench Security
docker run --rm -it \
--net host \
--pid host \
--userns host \
--cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
docker/docker-bench-security
Các category kiểm tra:
Host Configuration
Docker Daemon Configuration
Docker Daemon Configuration Files
Container Images and Build Files
Container Runtime
Docker Security Operations
7. Production Security Checklist
☐ Chạy containers với non-root user
☐ Read-only filesystem khi có thể
☐ Drop all capabilities, chỉ add cần thiết
☐ No new privileges
☐ Scan images cho vulnerabilities
☐ Pin image versions
☐ Sử dụng Docker Secrets cho sensitive data
☐ Network isolation
☐ Resource limits (CPU, memory)
☐ Logging và monitoring
☐ Regular security audits
8. Tổng kết
Trong bài này, bạn đã nắm được:
Docker security multi-layer approach
Rootless Docker và daemon security
Container hardening: non-root, read-only, capabilities
Image scanning và signing
Network isolation
CIS Docker Benchmark
Production security checklist
Bài tiếp theo sẽ hướng dẫn Docker Logging và Monitoring.