mcpField
H
hardening-docker-containers-for-production

hardening-docker-containers-for-production

github.com/mukul975安全35.2k330 次安装8 周前更新
代码仓库

关于 hardening-docker-containers-for-production

面向生产环境 Docker 部署团队的容器安全加固指南,依据 CIS Docker Benchmark v1.8.0。涵盖主机、守护进程、镜像和运行时控制,并提供配置示例与验证步骤。

主要功能

  1. 01加固 Dockerfile 和镜像
  2. 02配置 Docker 守护进程安全
  3. 03限制容器运行时权限
  4. 04启用镜像内容信任
  5. 05设置主机级审计
  6. 06按安全检查验证配置

适用场景

  1. 01为生产环境部署准备 Docker
  2. 02实施符合 CIS 的安全控制
  3. 03审查容器及主机配置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill hardening-docker-containers-for-production

安装后在 Claude Code 中输入/hardening-docker-containers-for-production确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

详细介绍

强化生产环境 Docker 容器

概述

强化生产环境 Docker 容器需要应用与 CIS Docker Benchmark v1.8.0 对齐的安全最佳实践,以在 Docker 守护进程、镜像、容器和运行时配置中最小化攻击面、防止权限提升并强制执行最小权限原则。

何时使用

  • 在环境中部署或配置用于生产环境能力的强化 Docker 容器时
  • 建立与合规要求对齐的安全控制时
  • 为该领域构建或改进安全架构时
  • 执行需要此实现的安全评估时

前提条件

  • 已安装 Docker Engine 24.0+
  • Docker Compose v2
  • 内核为 5.10+ 的 Linux 主机
  • Docker 主机上的 root 或 sudo 访问权限
  • docker-bench-security 工具
  • 用于 Dockerfile 检查的 Hadolint
  • 用于镜像检查的 Dockle

核心概念

CIS Docker Benchmark 章节
  1. 主机配置 - 审计 Docker 守护进程文件,限制对 /var/run/docker.sock 的访问
  2. Docker 守护进程配置 - 启用 TLS,限制容器间通信,配置日志记录
  3. Docker 守护进程配置文件 - 设置 daemon.json 的所有权和权限
  4. 容器镜像和构建文件 - 使用可信基础镜像,扫描漏洞,多阶段构建
  5. 容器运行时 - 移除能力,只读 rootfs,限制系统调用
  6. Docker 安全运维 - 监控、审计和轮换凭证
关键强化原则
  • 最小权限:以非 root 用户运行容器,除所需能力外移除所有能力
  • 不可变性:使用只读根文件系统,可写目录使用 tmpfs
  • 最小化:使用 distroless 或 Alpine 基础镜像,多阶段构建
  • 隔离:应用 seccomp 配置文件、AppArmor/SELinux、命名空间限制
  • 可审计性:启用内容信任,记录所有容器活动

工作流

步骤 1:强化 Dockerfile
# Use specific digest for reproducibility
FROM python:3.12-slim@sha256:abc123... AS builder

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt

# Production stage - minimal image
FROM gcr.io/distroless/python3-debian12

# Copy only necessary artifacts
COPY --from=builder /root/.local /root/.local
COPY --from=builder /app /app

WORKDIR /app

# Create non-root user
USER 65534:65534

# Set read-only filesystem expectation
LABEL org.opencontainers.image.source="https://github.com/org/app"

ENTRYPOINT ["python", "app.py"]
步骤 2:强化 Docker 守护进程配置
{
  "icc": false,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "live-restore": true,
  "userland-proxy": false,
  "no-new-privileges": true,
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 64000,
      "Soft": 64000
    },
    "nproc": {
      "Name": "nproc",
      "Hard": 1024,
      "Soft": 1024
    }
  },
  "seccomp-profile": "/etc/docker/seccomp-default.json",
  "tls": true,
  "tlscacert": "/etc/docker/tls/ca.pem",
  "tlscert": "/etc/docker/tls/server-cert.pem",
  "tlskey": "/etc/docker/tls/server-key.pem",
  "tlsverify": true
}
步骤 3:强化容器运行时
docker run -d \
  --name production-app \
  --read-only \
  --tmpfs /tmp:rw,noexec,nosuid,size=100m \
  --tmpfs /var/run:rw,noexec,nosuid,size=10m \
  --cap-drop ALL \
  --cap-add NET_BIND_SERVICE \
  --security-opt no-new-privileges:true \
  --security-opt seccomp=/etc/docker/seccomp-default.json \
  --security-opt apparmor=docker-default \
  --pids-limit 100 \
  --memory 512m \
  --memory-swap 512m \
  --cpus 1.0 \
  --user 65534:65534 \
  --network custom-bridge \
  --restart on-failure:3 \
  --health-cmd "curl -f http://localhost:8080/health || exit 1" \
  --health-interval 30s \
  --health-timeout 10s \
  --health-retries 3 \
  myapp:latest
步骤 4:启用 Docker 内容信任
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://notary.example.com

# Sign and push image
docker trust sign myregistry.com/myapp:v1.0.0

# Verify image signature before pull
docker trust inspect --pretty myregistry.com/myapp:v1.0.0
步骤 5:配置主机级审计
# Add audit rules for Docker files and directories
cat >> /etc/audit/rules.d/docker.rules << 'EOF'
-w /usr/bin/docker -k docker
-w /var/lib/docker -k docker
-w /etc/docker -k docker
-w /lib/systemd/system/docker.service -k docker
-w /lib/systemd/system/docker.socket -k docker
-w /etc/default/docker -k docker
-w /etc/docker/daemon.json -k docker
-w /usr/bin/containerd -k docker
-w /usr/bin/runc -k docker
EOF

systemctl restart auditd

验证命令

# Run Docker Bench Security
docker run --rm --net host --pid host \
  --userns host --cap-add audit_control \
  -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
  -v /etc:/etc:ro \
  -v /usr/bin/containerd:/usr/bin/containerd:ro \
  -v /usr/bin/runc:/usr/bin/runc:ro \
  -v /usr/lib/systemd:/usr/lib/systemd:ro \
  -v /var/lib:/var/lib:ro \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  docker/docker-bench-security

# Lint Dockerfile
hadolint Dockerfile

# Lint built image
dockle myapp:latest

# Verify no containers running as root
docker ps -q | xargs docker inspect --format '{{.Id}}: User={{.Config.User}}'

关键安全控制

控制实现CIS 章节
非 root 用户Dockerfile 中的 USER 指令4.1
只读 rootfs--read-only 标志5.12
移除能力--cap-drop ALL5.3
资源限制--memory, --cpus, --pids-limit5.10
无新权限--security-opt no-new-privileges5.25
内容信任DOCKER_CONTENT_TRUST=14.5
守护进程 TLSdaemon.json TLS 配置2.6
审计日志auditd 规则1.1

参考

评论

支持 Markdown