基础镜像强化
目录
什么是基础镜像强化?
基础镜像强化是通过最大限度地减少包含的内容,并使用安全优先的默认配置,来保护容器镜像基础层的过程。强化的基础镜像移除了不必要的组件,如 shell、编译器和包管理器,从而限制了可用的攻击面,使攻击者更难在容器内获得控制或提升权限。
强化还包括应用最佳实践,如以非 root 用户运行、减少可写表面,以及通过不变性确保一致性。虽然Docker 官方镜像和Docker 验证发布者镜像遵循安全最佳实践,但它们可能不像 Docker 强化镜像那样经过高度强化,因为它们旨在支持更广泛的用例。
为什么它很重要?
大多数容器从其使用的基础镜像继承其安全态势。如果基础镜像包含不必要的工具或以高权限运行,则在其上构建的每个容器都会暴露于这些风险中。
强化基础镜像
- 通过移除可能被利用的工具和库来减少攻击面
- 通过放弃 root 访问权限和限制容器可以执行的操作来强制执行最小权限
- 通过避免运行时更改和漂移来提高可靠性和一致性
- 与安全软件供应链实践保持一致,并有助于满足合规性标准
使用强化基础镜像是保护您在容器中构建和运行的软件的关键第一步。
移除了什么以及为什么
强化镜像通常不包括在安全生产环境中具有风险或不必要的常见组件
| 移除的组件 | 原因 |
|---|---|
Shell(例如,sh、bash) | 防止用户或攻击者在容器内执行任意命令 |
包管理器(例如,apt、apk) | 禁用构建后安装软件的能力,减少漂移和暴露 |
| 编译器和解释器 | 避免引入可能用于运行或注入恶意代码的工具 |
调试工具(例如,strace、curl、wget) | 降低利用或信息泄露的风险 |
| 未使用的库或区域设置 | 缩小镜像大小并最大限度地减少攻击向量 |
Docker 强化镜像如何应用基础镜像强化
Docker 强化镜像 (DHI) 通过设计应用了基础镜像强化原则。每个镜像都旨在仅包含其特定用途所必需的内容,无论是构建应用程序(使用 -dev 或 -sdk 标签)还是在生产环境中运行它们。
Docker 强化镜像特性
Docker 强化镜像旨在
- 最小化:仅包含基本库和二进制文件
- 不可变:镜像在构建时固定——无运行时安装
- 默认非 root:除非另行配置,否则容器以非特权用户身份运行
- 用途范围:提供用于开发 (
-dev)、基于 SDK 的构建 (-sdk) 和生产运行时的不同标签
这些特性有助于在开发、测试和生产环境中强制执行一致、安全的行为。
Docker 强化镜像兼容性考量
由于 Docker 强化镜像剥离了许多常用工具,它们可能无法直接用于所有用例。您可能需要
- 使用多阶段构建,在
-dev镜像中编译代码或安装依赖项,然后将输出复制到强化运行时镜像中 - 用等效的入口点二进制文件替换 shell 脚本,或在需要时显式包含 shell
- 使用Docker Debug临时检查或排除容器故障,而无需更改基础镜像
这些权衡是故意的,有助于支持构建安全、可重现和生产就绪容器的最佳实践。