使用 CMEK 保护您的数据

本页面提供了有关为使用 gcloud functions 命令或 Cloud Functions v2 API 创建的函数使用客户管理的加密密钥 (CMEK) 保护数据的补充信息。

如需详细了解 CMEK,包括手动设置、使用 Autokey 和测试 CMEK 保护,请参阅 Cloud Run 文档

在使用 CMEK 时,将会加密以下类型的 Cloud Run functions 数据:

  • 上传用于部署且由 Google 存储在 Cloud Storage 中的函数源代码,这些源代码将用于构建过程。
  • 函数构建过程的结果,包括:
    • 通过函数源代码构建的容器映像。
    • 已部署的函数的每个实例。

函数构建过程本身是由一个针对每个构建唯一生成的临时密钥来保护的。如需了解详情,请参阅 Cloud Build 中的 CMEK 合规性。此外,请注意以下事项:

  • 文件元数据(例如文件系统路径或修改时间戳)未加密。

  • 如果密钥已停用,则无法部署容器映像,并且新实例将无法启动。

  • Cloud Run functions CMEK 保护仅适用于 Google 管理的 Cloud Run functions 资源;您需要负责保护由您管理的数据和资源,例如源代码库、位于客户项目中的事件通道,或者函数使用的任何服务。

准备工作

  1. 创建用于加密函数的单区域密钥。如需了解如何创建密钥,请参阅创建对称加密密钥

  2. 创建 Artifact Registry 代码库,并启用 CMEK。对于 Artifact Registry 代码库,必须使用与为函数启用 CMEK 时相同的密钥。

  3. 对于事件驱动型函数,请按照为 Google 渠道启用 CMEK 中概述的额外设置步骤操作。

向服务账号授予对密钥的访问权限

对于所有函数,您必须授予以下服务账号对密钥的访问权限:

  • Cloud Run functions 服务代理 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

  • Artifact Registry 服务代理 (service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com)

  • Cloud Storage 服务代理 (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

  • Cloud Run 服务代理 (service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com)

  • Eventarc 服务代理 (service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com)

要向这些服务账号授予密钥的访问权限,请将每个服务账号添加为密钥的主账号,然后向服务账号授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色:

控制台

  1. 前往 Google Cloud 控制台中的 Cloud Key Management Service 页面:
    前往 Cloud KMS 页面

  2. 点击包含所选密钥的密钥环的名称。

  3. 点击密钥的名称以查看密钥详细信息。

  4. 权限标签页中,点击授予访问权限

  5. 新主账号字段中,输入所有三个服务账号的电子邮件地址,以便一次为三个账号分配权限。

  6. 选择角色菜单中,选择 Cloud KMS CryptoKey Encrypter/Decrypter

  7. 点击保存

gcloud

对于前面讨论的每个服务账号,请运行以下命令:

gcloud kms keys add-iam-policy-binding KEY \
  --keyring KEY_RING \
  --location LOCATION \
  --member serviceAccount:SERVICE_AGENT_EMAIL \
  --role roles/cloudkms.cryptoKeyEncrypterDecrypter

替换以下内容:

  • KEY:密钥的名称。例如 my-key

  • KEY_RING:密钥环的名称。例如 my-keyring

  • LOCATION:密钥的位置。例如 us-central1

  • SERVICE_AGENT_EMAIL:服务账号的电子邮件地址。

为函数启用 CMEK

设置启用了 CMEK 的 Artifact Registry 代码库并授予 Cloud Run functions 对您的密钥的访问权限后,您就可以为函数启用 CMEK 了。

如需为函数启用 CMEK,请运行以下命令:

gcloud functions deploy FUNCTION \
    --kms-key=KEY \
    --docker-repository=REPOSITORY \
    --source=YOUR_SOURCE_LOCATION
    FLAGS...
 

替换以下内容:

  • FUNCTION:要启用 CMEK 的函数的名称。例如 cmek-function

  • KEY:完全限定的密钥名称,格式如下:projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME

  • REPOSITORY:完全限定的 Artifact Registry 代码库名称,格式如下:projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY

  • YOUR_SOURCE_LOCATION:为已存在的函数启用 CMEK 时,请确保明确指定此参数,以重新部署预期的源代码。

  • FLAGS...:部署函数可能需要的其他标志,尤其是用于创建部署的标志。如需了解详情,请参阅部署 Cloud Run 函数

已为该函数启用 CMEK。 (可选)启用 CMEK 组织政策,以强制所有新函数符合 CMEK。

请注意,Cloud Run functions 始终使用密钥的主要版本来实现 CMEK 保护。为函数启用 CMEK 时,您无法指定要使用的特定密钥版本。

如果密钥被销毁停用,或者其必需的权限被撤消,则受该密钥保护的函数的有效实例不会关停。正在进行的函数执行将继续运行,但只要 Cloud Run functions 无权访问该密钥,新的执行就会失败。