4.5 生产环境安全加固
容器在生产环境中大规模运行时,安全性是底线要求。安全加固目标涵盖:镜像来源可信、镜像内容合规、运行时防护等。以下详细解析这三大方向的重点措施与实践。
一、镜像源可信
1. 使用官方/可信镜像仓库
- 优选官方镜像:如 Docker Hub 的官方库(
library/
前缀)、知名厂商/组织认证镜像。 - 企业/私有镜像仓库:如 Harbor、阿里云、AWS ECR,便于集中管理和权限管控。
- 禁止直接用未知第三方镜像:防止被植入后门或恶意代码。
2. 镜像签名与校验
- 内容信任(Docker Content Trust, DCT)
- 可启用
DOCKER_CONTENT_TRUST=1
,拉取/推送镜像时自动校验签名。
- 可启用
- Notary/签名服务:配合私有仓库,实现镜像签名、溯源与篡改检测。
- SBOM(软件物料清单):追踪镜像内软件包来源和版本,便于合规与溯源。
3. 镜像拉取策略
- 明确指定镜像 tag(如
nginx:1.25.4
),避免latest
带来的不可控升级和安全风险。 - 定期同步、扫描和审查自有镜像仓库内容。
二、镜像内容合规性
1. 镜像瘦身,减少攻击面
- 只保留业务实际需要的依赖和二进制,删除调试工具、shell、编译工具等“无用”组件。
- 优先使用 distroless/alpine 等极简镜像。
2. 自动化扫描与合规检测
- 漏洞扫描:集成 Trivy、Clair、Anchore、镜像云厂商自带扫描工具,CI/CD 阶段自动检测高危漏洞、过期包。
- 敏感信息检测:检查镜像内是否包含明文密码、私钥、API Token 等敏感文件。
- 合规性检测:如 PCI DSS、GDPR 等行业规范自动校验镜像内容。
3. 不用 root 用户运行
-
Dockerfile 里用
USER
指令指定非 root 用户,降低容器被攻破后的危害面。FROM nginx:alpine ... RUN adduser -D appuser USER appuser
-
生产环境可禁用 shell、编译器等,减少横向攻击风险。
三、容器运行时安全(如 seccomp、AppArmor)
1. 最小权限原则
- 只开放必要端口、只挂载必要卷、只分配最小 CPU/内存资源。
- 禁止特权模式(
--privileged
),除非极特殊需求。
2. seccomp 配置
- seccomp(secure computing mode):内核系统调用过滤机制,防止恶意容器调用危险 syscall。
- Docker 默认启用 seccomp,支持自定义 profile:
docker run --security-opt seccomp=/path/to/seccomp-profile.json ...
- 企业生产环境建议审查/定制 seccomp 策略,进一步收紧权限。
3. AppArmor/SELinux 加固
- AppArmor/SELinux:Linux 安全模块,基于策略限制进程访问文件、网络、系统资源。
- 可为容器分配自定义 profile:
docker run --security-opt apparmor=your-profile ...
- Kubernetes 支持通过 PodSecurityPolicy、SecurityContext 指定 AppArmor/SELinux 策略。
4. 只读文件系统与挂载限制
- 启用只读 rootfs(
read_only: true
),防止容器进程写入镜像层。 tmpfs
挂载敏感目录(如/tmp
),避免数据落盘。- 挂载卷时用
:ro
明确只读需求。
5. 运行时监控与审计
- 集成 Falco、Sysdig、Aqua 等容器安全监控与入侵检测工具。
- 定期审计容器运行日志,关注异常行为。
四、最佳实践梳理
- 所有镜像必须来源可溯源、可信仓库,启用签名校验。
- 镜像构建和推送流程集成漏洞和合规扫描,执行“CI 阶段不过,生产不发布”。
- 生产环境容器必须运行在最小权限模式(非 root、无特权、只读 rootfs)。
- 结合 seccomp、AppArmor/SELinux 自定义细粒度安全策略,收紧系统调用和资源访问。
- 定期扫描和更新镜像,及时修复高危漏洞。
- 监控与审计容器运行时行为,发现异常即响应。