云与基础设施安全
容器安全
约 4 分钟阅读
最后更新: 2026-02-12
什么是容器安全
容器安全是指在容器从构建到部署再到运行的整个生命周期中确保安全性的实践。由于容器共享宿主操作系统内核,因此需要与虚拟机不同的安全模型。
容器安全大致分为三个阶段:构建时(镜像安全性)、部署时(配置安全性)和运行时(执行时的监控与保护)。任何阶段的漏洞或配置错误都可能危及整个容器环境。
镜像安全与供应链保护
容器镜像容易成为攻击入口,因此构建时的安全性最为关键。
- 基础镜像选择:使用 Alpine 或 distroless 等仅包含最少软件包的基础镜像。不必要的软件包越少,攻击面就越小
- 镜像扫描:将 Trivy、Grype 或 Snyk 等漏洞扫描器集成到 CI/CD 流水线中,在部署前检测镜像中的已知漏洞 (CVE)。阻止包含严重或高危漏洞的镜像部署
- 镜像签名:使用 Cosign 或 Docker Content Trust 对镜像进行数字签名,并在部署时验证签名。防止被篡改的镜像部署到生产环境
- 多阶段构建:将构建工具和依赖项与最终运行时镜像分离。防止构建时工具(编译器、包管理器)残留在生产镜像中
运行时安全与最小权限
在容器运行时,权限最小化和异常检测是防御的两大支柱。
- 非 root 运行:以非 root 用户运行容器进程。在 Dockerfile 中使用
USER指令指定非特权用户 - 只读文件系统:通过
readOnlyRootFilesystem: true将容器文件系统挂载为只读。仅对需要写入的目录(如临时目录或日志目录)使用单独的可写卷 - 能力删除:使用
drop: [ALL]删除所有 Linux 能力,仅添加回最低限度所需的能力。限制容器可用的系统调用 - 运行时监控:使用 Falco 或 Sysdig 等工具实时监控系统调用,检测异常行为(意外的进程执行、可疑的文件访问、连接到未知目标的网络连接)
Kubernetes 安全配置
在 Kubernetes 环境中,编排层的安全配置不可或缺。
- Pod 安全标准:通过 Kubernetes Pod Security Admission 应用 Restricted 配置文件,禁止特权容器执行和 hostNetwork 使用
- 网络策略:定义 NetworkPolicy 资源来控制 Pod 间通信。默认情况下所有 Pod 可以相互通信,因此应采用默认拒绝策略,仅显式允许必要的通信
- RBAC(基于角色的访问控制):最小化 Kubernetes API 访问权限。特别是将创建和修改 Pod、Secret 和 ClusterRole 的权限限制为仅管理员可用
- 密钥管理:不要以明文形式在 Kubernetes Secret 中存储敏感信息。使用 Secrets Store CSI Driver 与外部密钥管理服务(如 AWS Secrets Manager 或 HashiCorp Vault)集成
常见误解
- 容器与虚拟机具有相同级别的隔离性,因此是安全的
- 容器共享宿主操作系统内核,不具备与虚拟机相同级别的隔离性。内核漏洞可能被利用,导致攻击者从容器逃逸到宿主机(容器逃逸)。需要 Seccomp、AppArmor 和非 root 运行等多层防御。
- 官方 Docker 镜像可以直接用于生产环境
- 即使是官方镜像也常常包含已知漏洞。在生产使用前必须进行镜像扫描,并创建删除了不必要软件包的自定义镜像。此外,应通过摘要 (SHA256) 而非标签固定镜像,防止意外更新。
容器安全与虚拟机安全的区别
容器
共享宿主操作系统内核。启动快速,镜像轻量。攻击面取决于镜像内容。容易受到内核漏洞影响。易于实现不可变运维。
虚拟机
通过虚拟机管理程序完全隔离。启动较慢,镜像较大。需要完整的操作系统补丁管理。内核级隔离性强。通常以有状态方式运维。
分享