执行环境安全性

每个函数均在 Cloud Run functions 安全执行环境中受版本控制的运行时映像上运行。运行时映像包含操作系统库、语言运行时和其他系统软件包。Google 会维护所有 Cloud Run functions 运行时映像,并在经过一段时间的稳定性测试后发布安全补丁和维护更新。

运行时映像

每个运行时均在 Artifact Registry 上的公共存储库中具有关联的运行时映像(也称为运行映像)。如需查看运行时 ID 及其运行时映像的列表,请参阅运行时

确定运行时映像

您可以通过检查函数的构建日志来确定用于创建函数的运行时映像。

在构建日志中,搜索 google.run-image。这样,您便可以获得来自构建步骤的日志条目,其中描述了用于构建函数的运行时映像的版本。例如,Nodejs 函数的日志条目可能如下所示:

{
  ...
  "textPayload": "Step #2 - \"build\": Adding image label google.run-image:
    us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/nodejs22:nodejs20_20230924_20_6_1_RC00",
  ...
}

安全更新政策

您可以选择以下安全更新政策之一:

  • 自动更新(默认):运行时环境的更新和安全补丁会在新版本的运行时映像中发布。在经过一段时间的稳定性和可靠性测试后,更新后的运行时会部署到所有函数,从而使更新停机时间为零。Cloud Run functions(第 1 代)和 Cloud Run functions 提供自动安全更新。如需进行语言级安全修复,您可能需要重新构建使用编译语言(如 Go 或 Java)的函数。

  • 在部署更新时:除非另有说明,否则更新或安全补丁仅在部署或重新部署函数时应用于运行时。部署时更新同时适用于 Cloud Run functions (第 1 代) 和 Cloud Run functions。

可以在 gcloud deploy 命令中使用 --runtime-update-policy 标志来更改运行时更新政策。

设置函数的更新政策

您可以通过在 gcloud deploy 命令中添加 --runtime-update-policy 标志来更改函数的更新政策,如下所示:

  gcloud functions deploy FUNCTION_NAME \
    --runtime-update-policy=POLICY ...

您需要进行如下替换:

  • FUNCTION_NAME 替换为函数的名称
  • POLICY 替换为 automaticon-deploy

所有函数的默认政策都是 automatic

检查函数的更新政策

您可以使用以下命令检查函数的更新政策:

  gcloud functions describe FUNCTION_NAME \

其中 FUNCTION_NAME 是函数的名称

  • 启用了自动安全更新的函数将具有键 automaticUpdatePolicy
  • 部署时更新的函数将具有键 onDeployUpdatePolicy

确定自动更新后使用的运行时映像

启用自动更新后,Cloud Run functions 会将函数的运行时映像与包含其他安全补丁和更新的较新修订版本交换。此更改会显示在函数的运行时日志中。

在运行时日志中,runtime_version 标签指示对函数使用新的运行时映像的时间。自动更新的 Nodejs 函数的日志条目可能如下所示:

{
  ...
  "labels:" {
    runtime_version: nodejs20_20230924_20_6_1_RC00
    execution_id: ...
  }
  ...
}

Cloud Run functions 的安全扫描

启用了自动更新的 Cloud Run functions 函数基于 scratch 映像构建。因此,在 Artifact Registry 中表示函数的容器没有基础映像,并且远远小于使用部署时更新的函数。基础映像会在运行时与函数映像组合起来,以创建完整的函数。

您可以使用安全扫描程序来监控为您的函数提供支持的 Google 管理的基础映像。您可以在 REGION-docker.pkg.dev/serverless-runtimes/STACK/runtimes/RUNTIME_ID 找到您的函数的最新基础映像:

您需要进行如下替换:

  • REGION 替换为首选区域,例如 us-central1
  • STACK 替换为首选操作系统栈,例如 google-22-full
  • RUNTIME_ID 替换为函数使用的运行时 ID,例如 python310

例如,使用 google-22-full 栈且托管在 us-central1 中的最新 Node.js 20 基础映像将通过以下网址进行引用:us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/nodejs22

由于您的映像现在是基于 scratch 构建的,因此存储在 Artifact Registry 中的映像将无法直接运行。如果您需要可运行的映像,请使用部署时政策