容器优化 OS - 使用 Bottlerocket 强化容器主机的安全与运维
详解使用 AWS Bottlerocket 优化容器主机。介绍最小化 OS 设计、自动更新、不可变基础设施以及与 ECS/EKS 的集成。
容器主机 OS 的挑战
使用 EC2 实例作为 ECS 或 EKS 的工作节点时,主机 OS 的选择对安全和运维有重大影响。Amazon Linux 2 或 Ubuntu 等通用 OS 包含大量容器运行不需要的包(包管理器、Shell、各种工具),这些扩大了攻击面(Attack Surface)。OS 补丁的应用需要重启,可能影响运行中的容器。Bottlerocket 是 AWS 开发的容器专用 Linux OS,通过最小化设计解决这些问题。
安全设计与不可变基础设施
Bottlerocket 的安全设计是多层次的。根文件系统以只读方式挂载,通过 dm-verity 验证块级完整性。检测到篡改时系统拒绝启动。SELinux 默认启用,将容器进程的权限限制到最小。由于不存在包管理器,运行时无法安装软件,从根本上阻止了攻击者在入侵后安装恶意工具。更新采用原子方式,整个 OS 镜像作为一个单元替换,失败时自动回滚到前一版本。
| 观察点 | 通用 OS | Bottlerocket |
|---|---|---|
| 内置软件 | 包含包管理器、shell 和各种实用工具 | 只有 containerd、kubelet 或 ECS 代理,以及最小限度的系统组件 |
| 根文件系统 | 可读写 | 只读,并用 dm-verity 校验完整性;检测到篡改就拒绝启动 |
| 运行中安装软件 | 随时可以通过包管理器安装 | 没有包管理器,无法安装 |
| 管理访问 | 以 SSH 登录后手工修改为前提 | 默认关闭 SSH,通过 SSM 代理的 API 进行管理 |
| 强制访问控制 | 取决于发行版与配置 | 默认启用 SELinux |
| OS 更新粒度 | 按软件包更新,可能出现依赖问题 | 按镜像原子更新;A/B 分区在新镜像启动失败时自动回滚 |
| 排查故障的入口 | 直接登录主机 | 从专用容器临时访问 |
与 ECS/EKS 的集成与运维
Bottlerocket 提供支持 ECS 和 EKS 的 AMI。在 EKS 中,只需在托管节点组的 AMI 类型中选择 Bottlerocket 即可使用。Karpenter(节点自动扩缩器)也可指定 Bottlerocket AMI。在 ECS 中,使用 ECS 优化的 Bottlerocket AMI 创建容器实例。通过 SSM 进行管理操作,API 服务器提供配置变更接口。Bottlerocket Update Operator 在 EKS 中自动管理节点的滚动更新。
Bottlerocket 的费用
Bottlerocket 免费使用。选择 Bottlerocket AMI 作为 EC2 实例的 OS 时,仅收取与 Amazon Linux 2 相同的 EC2 实例费用。不产生 OS 许可证费用。引入 Bottlerocket 不会直接降低成本,但通过安全补丁自动应用减少运维工时、缩小攻击面降低安全事件风险等间接效果显著。
总结 - Bottlerocket 的活用指南
Bottlerocket 是为容器工作负载优化的最小化 Linux OS。不可变文件系统、SELinux、dm-verity、原子更新带来的高安全性,以及与 ECS/EKS 的原生集成是其主要优势。如果正在使用 EC2 作为 ECS 或 EKS 的工作节点,从 Amazon Linux 2 迁移到 Bottlerocket 可同时提升安全性和运维效率。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。