Docker Güvenliği

Container güvenliği, best practices ve hardening

Güvenlik Best Practices

1. Root Olmayan Kullanıcı

FROM node:18-alpine

# Kullanıcı oluştur
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

WORKDIR /app
COPY --chown=appuser:appgroup . .

# Kullanıcıyı değiştir
USER appuser

CMD ["node", "server.js"]

2. Read-Only Filesystem

docker run --read-only \
  --tmpfs /tmp \
  --tmpfs /var/run \
  myapp

3. Capabilities Kısıtlama

# Tüm capabilities'i kaldır
docker run --cap-drop ALL myapp

# Gerekli olanları ekle
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE myapp

4. Resource Limits

docker run -d \
  --memory 512m \
  --memory-swap 512m \
  --cpus 0.5 \
  --pids-limit 100 \
  myapp

Image Güvenliği

# Image tarama
docker scan myapp:latest

# Trivy ile tarama
docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  aquasec/trivy image myapp:latest

Secrets Yönetimi

# Docker secret oluştur
echo "mysecret" | docker secret create db_password -

# Compose'da kullanım
version: '3.8'

services:
  db:
    image: mysql
    secrets:
      - db_password
    environment:
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password

secrets:
  db_password:
    external: true

.dockerignore

# .dockerignore
.git
.env
*.log
node_modules
Dockerfile
docker-compose.yml
.dockerignore
*.md
tests/
.coverage