架构
Cloud Run 在 Google 每周部署数十亿个容器的环境中的 Borg 上运行,托管着全球一些最大的网站,包括 Gmail 和 YouTube。由于 Cloud Run 组件共享同一个基础架构,因此它们构建所遵循的安全标准与其他 Google 服务相同。
如需详细了解我们的安全方法,请参阅 Google 安全概览白皮书。
Cloud Run 架构包含许多不同的基础架构组件。下图展示了这些组件如何响应对您的服务的请求和 Cloud Run Admin API 调用:
对您的服务的请求
当通过自定义网域或直接针对 run.app 网址向 Cloud Run 服务发出请求时,以下组件会处理该请求:
- Google Front End (GFE):Google 全球基础架构服务,在对
run.app网址发出请求时会终止 TLS 连接并应用保护措施来防御 DoS 攻击。Cloud Run 是区域级服务,因此当通过run.app网址访问请求时,GFE 会通过相应区域的加密通道将请求转发到 Cloud Run。 - Google Cloud 负载均衡器:当您设置 Cloud Load Balancing 来处理自定义网域时,它包含前面提到的 GFE 功能。您还可以配置 Google Cloud负载均衡器来执行其他功能,例如流量管理和访问权限控制。
- HTTP 代理:一种可用区级组件,对传入到沙盒化应用的实例的 HTTP 请求进行负载均衡。
- 调度器:选择应用服务器来托管沙盒化应用的实例。
- 应用服务器:一种可用区级多租户计算节点,用于创建和管理运行每个应用容器的实例的沙盒。
- 沙盒:将用户代码与系统和其他客户隔离。如需了解详情,请参阅下面的计算安全部分。
- 存储:为从支持的容器注册表导入的容器映像公开文件服务器接口。
- 元数据服务器:提供特定于沙盒的凭据和元数据。
- 出站网络:管理沙盒发起的出站流量。
Cloud Run Admin API 调用
向 Cloud Run Admin API 发出请求时,以下组件会处理该请求:
- Google Front End (GFE):Google 全球基础架构服务,可终止 TLS 连接并应用保护措施来防御 DoS 攻击。
- 控制平面:验证应用配置并将其写入存储空间。
- 配置存储:将应用配置存储在 Spanner 和 Bigtable 中,以供应用服务器、调度器和网络元素等其他组件访问。
计算安全
实例是指运行您所配置容器的单元。如果您部署单个容器映像,每个容器都会在其专属的实例中启动。如果您部署多个容器映像(边车),每个实例将包含每种容器各一个。
每个 Cloud Run 实例都经过沙盒化处理,利用虚拟机监控程序 (VMM) 强制执行的边界与其他实例隔离。虽然我们也提供一定程度的容器边界强制执行,但其强度不及围绕在您容器外部的实例边界。
执行环境
Cloud Run 组件在 Google 的容器管理系统 Borg 上运行。Cloud Run 为您的容器提供两种执行环境:
第一代:此选项基于 gVisor 容器安全平台,具有小型代码库,可缩小攻击面。每项更改都经过安全审核,并且大多数更改都是以内存安全的方式编写的。使用安全计算模式 (seccomp) 系统调用过滤功能可实现进一步强化。
第二代:此选项基于 Linux 微型虚拟机,可提高自定义工作负载的兼容性和性能。使用 seccomp 系统调用过滤功能和 Sandbox2 Linux 命名空间可实现进一步强化。
这两个执行环境都使用两层沙盒,由等效于各个虚拟机的硬件支持层(x86 虚拟化)和软件内核层组成,如下图所示:
如果您的服务使用第三方基础架构来保护容器,请使用第二代执行环境。
数据加密和存储
Cloud Run 实例是无状态的。终止实例会舍弃其状态。因此,所有新实例都会从默认状态启动。
如果您拥有有状态数据,则可以通过以下方式管理数据:
- 将有状态数据存储在外部存储服务(例如 Cloud SQL 或 Memorystore)中。
- 与 Secret Manager 集成,以便安全地存储敏感数据(例如 API 密钥和密码)。
除此之外,Cloud Run 还与许多其他Google Cloud 系统集成,可通过以下方式管理和访问数据:
- 将服务配置数据存储在 Spanner 和 Bigtable 中。
- 监控和日志记录数据会发送到 Google Cloud Observability。
- 从支持的容器注册表中导入容器映像,并且可视需要使用客户管理的加密密钥 (CMEK) 进行加密。
在整个 Google Cloud中,您的所有数据都会静态加密。
Cloud Run 符合 Google Cloud范围内的数据保护和透明度计划,包括访问透明度和数据驻留。
网络安全
Cloud Run 和所有其他 Google Cloud 服务都会对传输中的所有流量进行加密。您可以将出站流量和入站流量控制整合到 Cloud Run 服务或作业中,以额外增加一层限制。组织管理员还可以通过设置组织政策来强制控制出站流量和入站流量。
出站流量
来自 Cloud Run 的出站流量被视为传输层 4(TCP 和 UDP)。
默认情况下,出站流量在离开 Cloud Run 时采用以下路径之一:
- 目标目的地在 VPC 网络中:流量通过使用直接 VPC 出站流量或无服务器 VPC 访问通道连接器流入您项目中的 VPC 网络或共享 VPC 网络。该连接器是直接位于 VPC 网络中的区域级资源。
- 目标目的地不在 VPC 网络中:流量直接路由到 Google 网络或公共互联网中的目标目的地。
控制出站流量
如需进一步控制出站流量,请使用 VPC 出站流量设置,通过直接 VPC 出站流量或连接器将所有流量路由到 VPC 网络。
流量进入 VPC 网络后,您可以使用 VPC 工具来管理流量,例如: