安全概览

本页面概述了在 Google Cloud 上运行的 Container-Optimized OS 的安全功能。

操作系统安全性

Google 的 Container-Optimized OS 基于 Chromium OS,实施了多种安全设计原则,为正在运行的生产服务提供了一个配置良好的平台。

最小操作系统占用空间

这是 Container-Optimized OS 安全性的核心。Container-Optimized OS 专为运行容器而进行过优化,而容器封装了自己的依赖项,因此我们可以删减不必要的程序包,尽可能减少操作系统的攻击面。

不可变的根文件系统和验证启动

Container-Optimized OS 根文件系统始终以只读方式装载。 此外,内核在构建时会计算其校验和,并在每次启动时验证此校验和。这种机制可以防止攻击者通过永久的本地更改“拥有”机器。此外,在默认情况下,其他一些装载内容是不可执行的。如需了解详情,请参阅文件系统

无状态配置

虽然拥有只读根文件系统有益于安全,但会导致系统难以使用。例如,我们需要具备创建和添加用户的能力才能登录系统。为了解决这个问题,我们自定义了根文件系统,使得 /etc/ 可写但无状态。这允许您在运行时写入配置设置,但这些设置在重新启动后不会得到保留。因此,每次 Container-Optimized OS 节点重新启动时,都会恢复到“一张白纸”般的干净状态。某些数据(例如用户的主目录、日志和 Docker 映像)会在重新启动后得到保留,因为它们不属于根文件系统的一部分。

安全强化型内核

Container-Optimized OS 支持多种安全强化内核特性,包括完整性测量架构 (IMA)、审计、内核页表隔离 (KPTI) 以及 Chromium OS 的一些 Linux 安全模块 (LSM)。此外,Container-Optimized OS 支持 seccompAppArmor 等安全特性,可以强制执行更精细的安全政策。

以安全为中心的默认设置

Container-Optimized OS 通过为多项特性提供注重安全性的默认值进一步提升了强化水平。这包括诸如停用 ptrace 和无特权 BPF 的 sysctl 设置 以及锁定防火墙等。 这些默认设置自动应用于一组实例,有助于保护整个集群、项目和组织。

自动更新

Container-Optimized OS 的自动更新特性允许及时向正在运行的虚拟机传送安全补丁。当 Container-Optimized OS 由 Kubernetes Engine 管理时,节点会自动升级,在安全性和稳定性之间实现平衡。

文件系统

以下是 Container-Optimized OS 节点映像文件系统中的路径及其属性和建议用途的列表:

路径 属性 用途
/
  • 只读
  • 可执行
根文件系统以只读形式装载以保持完整性。内核在启动期间验证根文件系统完整性,如果出现错误,则拒绝启动。
/home
/var
  • 可写
  • 不可执行
  • 有状态
这些路径用于存储保留期为启动磁盘的生命周期的数据。它们会从 /mnt/stateful_partition 装载。
/var/lib/google
/var/lib/docker
/var/lib/toolbox
  • 可写
  • 可执行
  • 有状态
这些路径分别是 Compute Engine 软件包(例如帐号管理器服务)、Docker 和工具箱的工作目录。
/var/lib/cloud
  • 可写
  • 可执行
  • 无状态
  • tmpfs
此路径是 cloud-init 软件包的工作目录。
/etc
  • 可写
  • 不可执行
  • 无状态
  • tmpfs
/etc 通常包含您的配置(例如,通过 cloud-init 定义的 systemd 服务)。最好在 cloud-init 中捕获所需的实例状态,因为系统会在新创建实例以及重启实例时应用 cloud-init
/tmp
  • 可写
  • 不可执行
  • 无状态
  • tmpfs
/tmp 通常用作暂存空间,不应用于存储持久性数据。
/mnt/disks
  • 可写
  • 可执行
  • 无状态
  • tmpfs
您可以将永久性磁盘装载到 /mnt/disks 下的目录中。

防火墙

默认情况下,Container-Optimized OS 配置为丢弃端口 22 上 SSH 之外的所有传入 TCP/UDP 连接。请参阅配置主机防火墙,了解如何更改默认设置以打开更多端口。

实例访问权限

默认情况下,Container-Optimized OS 不包含任何可访问的用户帐号。用户帐号和 SSH 密钥通过实例或项目元数据进行管理。较新的 Container-Optimized OS 版本(里程碑 66 及更高版本)允许您使用 IAM 管理对映像的访问。它允许更精细地控制访问权限(sudo 与非 sudo)、可识别的 SSH 密钥和组织登录政策。如需了解详情,请参阅使用操作系统登录管理实例访问权限

SSH 守护进程配置为禁止基于密码的身份验证,并且不允许 root 登录。

基础架构安全

除了操作系统本身的各种安全强化功能之外,Container-Optimized OS 团队还依托于源自 Chromium OS 和 Google 整体工作的多年经验,在开发、构建和部署映像时非常重视软件供应链并确定基础架构安全的优先级。

根据 Google 的源代码构建

Container-Optimized OS 中的每个程序包(包括 Linux 内核本身)都是使用 ChromiumOS 代码库中的源代码构建的。这意味着我们确切地了解纳入操作系统的内容、签入代码的人员、所引入的具体版本等。这也让我们可以在发现处于任何层级上的漏洞时快速修补和更新任何程序包。

持续漏洞 (CVE) 扫描和响应

每当在操作系统的内核或任何程序包中发现漏洞时,CVE 扫描系统都会提醒我们注意。这个系统也是用于检测 Android 和 Chromium OS 中漏洞的系统。Container-Optimized OS 团队会按照优先级作出响应,制作带有补丁程序的版本。Container-Optimized OS 团队还与 Google 的事件响应团队合作,在 Container-Optimized OS 中快速提供更广泛的安全补丁程序。

测试和资格审查流程

在我们将 Container-Optimized OS 映像发布到 Google Cloud 之前,会在多个层级上执行测试 - 包括 syzkaller 执行的内核模糊测试、集群层级的 Kubernetes 测试、Compute Engine 特性的集成测试以及多项性能基准测试。这能确保我们各个版本的稳定性和质量。