安全设计概览

了解 Cloud Run 如何实施安全性方面的最佳实践来保护您的数据,并探索如何使用这些功能来满足您的安全要求。

架构

Cloud Run 在 Google 每周部署数十亿个容器的环境中的 Borg 上运行,托管着全球一些最大的网站,包括 Gmail 和 YouTube。由于 Cloud Run 组件共享同一个基础架构,因此它们构建所遵循的安全标准与其他 Google 服务相同。

如需详细了解我们的安全保障方法,请参阅 Google 安全概览白皮书。

Cloud Run 架构包含许多不同的基础架构组件。下图展示了这些组件如何响应对您的服务的请求Cloud Run Admin API 调用

Cloud Run 基础架构组件示意图
图 1. Cloud Run 基础架构组件示意图。

对您的服务的请求

当通过自定义网域或直接针对 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 攻击。
  • 控制平面:验证应用配置并将其写入存储空间。
  • 配置存储:将应用配置存储在 SpannerBigtable 中,以供应用服务器、调度器和网络元素等其他组件访问。

计算安全

Cloud Run 组件在 Google 的容器管理系统 Borg 上运行。对于容器,Cloud Run 提供两个执行环境

  • 第一代:此选项基于 gVisor 容器安全平台,具有小型代码库,可缩小攻击面。每项更改都经过安全审核,并且大多数更改都是以内存安全的方式编写的。使用安全计算模式 (seccomp) 系统调用过滤功能可实现进一步强化。

  • 第二代:此选项基于 Linux 微型虚拟机,可提高自定义工作负载的兼容性和性能。使用 seccomp 系统调用过滤功能和 Sandbox2 Linux 命名空间可实现进一步强化。

这两个执行环境都使用两层沙盒,由等效于各个虚拟机的硬件支持层(x86 虚拟化)和软件内核层组成,如下图所示:

在这两种执行环境中,用户容器都通过两层沙盒与其他工作负载隔离。
图 2. 在这两种执行环境中,用户容器都通过两层沙盒与其他工作负载隔离。

如果您的服务使用第三方基础架构来保护容器,请使用第二代执行环境。

数据加密和存储

Cloud Run 实例是无状态的。终止实例会舍弃其状态。因此,所有新实例都会从默认状态启动。

如果您有有状态数据,则可以通过以下方式管理数据:

除此之外,Cloud Run 还与许多其他 Google Cloud 系统集成,可通过以下方式管理和访问数据:

在整个 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 网络或公共互联网中的目标目的地。
Cloud Run 基础架构组件示意图
图 3. 出站流量可以通过连接器代理到 VPC 网络,也可以直接流入 VPC 或非 VPC 网络(预览版)。

控制出站流量

如需进一步控制出站流量,请使用 VPC 出站流量设置,通过直接 VPC 出站流量或连接器将所有流量路由到 VPC 网络。

流量进入 VPC 网络后,您可以使用 VPC 工具来管理流量,例如:

组织管理员还可以通过设置允许的 VPC 出站流量设置 (Cloud Run) 列表限制条件来强制控制出站流量。

入站流量

与出站流量相反,Cloud Run 的入站流量位于应用层 7 (HTTP)。

Cloud Run 接受从以下来源传入的入站流量:

  • 公共互联网:请求直接从公共来源路由到您的 Cloud Run 服务,并且可以通过外部 HTTP(S) 负载均衡器路由流量。

  • VPC 网络:您可以通过使用专用 Google 访问通道Private Service Connect内部应用负载均衡器将流量从 VPC 网络路由到 Cloud Run 服务。此类型的流量始终在 Google 的网络中。

  • Google Cloud 服务:流量从其他 Google Cloud 服务(例如 BigQuery,甚至 Cloud Run 本身)直接传输到 Cloud Run。在某些情况下,您还可以将这些服务配置为通过 VPC 网络进行路由。此类型的流量始终在 Google 的网络中。

Cloud Run 基础架构组件示意图
图 4. 流向 Cloud Run 的第 7 层 HTTP 网络入站流量。

Cloud Run 的网络安全模型包括以下入站流量属性:

  • 流向 run.app 网址的直接流量run.app 网址始终需要 HTTPS 以使流量进入 Cloud Run。Google 的前端服务基础架构会终止 TLS,然后通过加密通道将流量转发到 Cloud Run 和容器。
  • 流向与 Google Cloud 负载均衡器关联的自定义网域的流量:对于 HTTPS 流量,Google Cloud 内部和外部负载均衡器会终止 TLS,然后通过加密通道将流量转发到 Cloud Run 和容器。Google Cloud 负载均衡器还可让您应用 IAPGoogle Cloud ArmorSSL 政策等其他安全功能。

如需详细了解如何配置流向 Cloud Run 的 VPC 网络流量,请参阅接收来自 VPC 网络的请求

控制入站流量

Cloud Run 入站流量控制管理进入 Cloud Run 的流量,以确保流量仅来自可信来源。

对于仅为内部客户端提供服务的 Cloud Run 服务,您可以配置“内部”设置,以便只有来自以下内部来源的流量才能进入 Cloud Run:

  • 项目或 VPC Service Controls 边界中的 VPC 网络,包括通过 VPC 网络路由其所有流量的 Cloud Run 服务。
  • Cloud Run 服务连接到的共享 VPC 网络。
  • 项目或 VPC Service Controls 边界中的某些 Google Cloud 服务,例如 BigQuery。
  • 来自本地客户端并遍历 VPC 网络以访问 Cloud Run 的流量。

组织管理员还可以通过设置组织政策来强制控制入站流量。

如需详细了解如何控制入站流量,请参阅限制 Cloud Run 的入站流量

访问权限控制

访问权限控制用于限制谁有权访问您的 Cloud Run 服务和作业。

谁可以管理您的服务或作业

为了控制谁可以管理您的 Cloud Run 服务或作业,Cloud Run 使用 IAM 向用户和服务账号授权。

您的服务或作业可以访问哪些内容

如需控制 Cloud Run 工作负载可以通过网络访问的内容,您可以强制所有流量通过 VPC 网络并应用 VPC 防火墙规则,如前面的网络安全部分所述。

如果您使用的是直接 VPC 出站流量,则可以将网络标记附加到 Cloud Run 资源并在防火墙规则中引用网络标记。如果您使用的是无服务器 VPC 访问通道,则可以将防火墙规则应用于连接器实例。

使用 IAM 可控制 Cloud Run 服务或作业可以访问哪些资源。默认情况下,服务和作业使用 Compute Engine 默认服务账号。对于敏感工作负载,请使用专用服务账号,以便您可以仅授予工作负载完成工作所需的权限。详细了解如何使用基于服务的身份管理专用服务账号。如需了解 Cloud Run 如何提醒用户创建专用服务账号,请参阅使用 Recommender 保护 Cloud Run 服务

谁可以调用您的服务或执行您的作业

Cloud Run 提供了几种不同的选项来控制谁可以调用您的服务或执行您的作业。

入站流量控制

如需在网络级层管理 Cloud Run 服务的入站流量,请参阅上一部分中的控制入站流量

Cloud Run 作业不处理请求,因此在执行作业时不使用入站流量控制。

适用于您的服务的 IAM

Cloud Run 会对每个请求执行 IAM 检查。

使用 run.routes.invoke 权限通过以下方式配置谁可以访问您的 Cloud Run 服务:

  • 向选定的服务账号或群组授予此权限,以允许访问服务。所有请求都必须具有 HTTP 授权标头,其中包含由 Google 为其中一个已获授权的服务账号签名的 OpenID Connect ID 令牌。

  • 所有用户授予此权限,以允许未经身份验证的访问。

如需确保只有您的组织成员才能调用 Cloud Run 服务,组织管理员可以设置网域限定共享组织政策。组织管理员还可以选择停用特定的 Cloud Run 服务。了解如何在强制执行网域限制共享时创建公共 Cloud Run 服务

详细了解身份验证的常见使用场景以及 Cloud Run 如何将访问权限控制与 IAM 搭配使用

服务的负载均衡器安全功能

如果您已将 Cloud Run 服务配置为 Google Cloud 负载均衡器的后端,请使用以下方法确保此路径的安全:

适用于您的作业的 IAM

使用 run.jobs.run 权限通过以下方式配置谁可以执行 Cloud Run 作业:

  • 向选定的服务账号或群组授予此权限,以允许访问作业。如果作业由其他服务(例如 Cloud Scheduler)触发,则使用的服务账号必须具有作业的 run.jobs.run 权限。

  • 向已登录用户授予此权限,以通过 Google Cloud 控制台执行作业。如果作业由其他服务(例如 Cloud Scheduler)触发,则使用的服务账号或群组必须具有作业的 run.jobs.run 权限。

如需确保只有您的组织成员才能执行 Cloud Run 作业,组织管理员可以设置网域限定共享限制条件。组织管理员还可以选择停用特定的 Cloud Run 作业。

VPC Service Controls

Cloud Run 服务可以作为 VPC Service Controls 边界的一部分,以便利用 VPC Service Controls 来控制访问并降低渗漏风险。详细了解如何使用 VPC Service Controls

供应链安全

Google Cloud 的 Buildpack 管理的基础映像

使用 Google Cloud 的 Buildpack 从源代码部署的服务是使用 Google 提供的基础映像构建的。Google 会维护这些基础映像,并每周提供日常补丁。在涉及严重安全漏洞的紧急情况下,我们能够在几个小时内提供补丁。

Cloud Run 内部供应链安全

由于 Cloud Run 在 Borg 上运行,因此实现了所有 Google 服务(例如 Gmail 和 YouTube)中所有标准的供应链安全机制。如需详细了解 Google 内部供应链实践,请参阅 BeyondProdBinary Authorization for Borg 白皮书。

Binary Authorization

Cloud Run 内置了对 Binary Authorization 的支持,可确保仅在 Cloud Run 上部署可信的容器映像。如需了解详情,请参阅 Cloud Run 设置概览

Software Delivery Shield

借助 Software Delivery Shield,Cloud 管理员可以直接从 Google Cloud 控制台中的面板查看有关已部署容器的供应链的安全信息。如需了解详情,请参阅查看 Software Delivery Shield 的详细信息

后续步骤

如需查看有关如何设置网络的端到端演示,请参阅 Cloud Run 无服务器网络指南