使用客户管理的加密密钥 (CMEK)

默认情况下,Eventarc 会对静态客户内容进行加密。Eventarc 会为您处理加密,您无需执行任何其他操作。此选项称为 Google 默认加密

如果您想要控制加密密钥,则可以将 Cloud KMS 中客户管理的加密密钥 (CMEK) 与集成 CMEK 的服务(包括 Eventarc)结合使用。使用 Cloud KMS 密钥时,您可以控制其保护级别、位置、轮替时间表、使用和访问权限以及加密边界。此外,您还可使用 Cloud KMS 查看审核日志并控制密钥生命周期。这样您就可以在 Cloud KMS 中控制和管理用于保护您数据的对称密钥加密密钥 (KEK),而不是由 Google 拥有和管理这些密钥。

使用 CMEK 设置资源后,访问 Eventarc 资源的体验与使用 Google 默认加密功能类似。如需详细了解加密选项,请参阅客户管理的加密密钥 (CMEK)

客户管理的加密密钥会作为软件密钥存储在 Cloud HSM 集群中,或者使用 Cloud External Key Manager 存储在外部

受 CMEK 保护的内容

您可以配置 CMEK 来加密通过以下资源传递的事件消息:

  • MessageBus - Eventarc Advanced 总线
  • Pipeline - Eventarc Advanced 流水线
  • GoogleApiSource - 表示对特定公交车的 Google API 事件的订阅的资源

如需了解详情,请参阅 Eventarc Advanced 概览

为资源启用 CMEK 后,系统会使用只有您可以访问的加密密钥保护与该资源在该区域关联的数据。

Cloud KMS 和 Eventarc 是区域化服务。Cloud KMS 密钥和受保护的 Eventarc Advanced 资源的区域必须相同。

准备工作

在 Eventarc 中使用此功能之前,您必须执行以下操作:

控制台

  1. Enable the Cloud KMS and Eventarc APIs.

    Enable the APIs

  2. 创建密钥环
  3. 为指定的密钥环创建密钥

gcloud

  1. 更新 gcloud 组件。
    gcloud components update
  2. 为存储加密密钥的项目启用 Cloud KMS 和 Eventarc API。
    gcloud services enable cloudkms.googleapis.com eventarc.googleapis.com
  3. 创建密钥环
  4. 为指定的密钥环创建密钥

如需了解所有标志和可能值,请使用 --help 标志运行命令。

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

如需向 Eventarc 服务账号授予对 Cloud KMS 密钥的访问权限,请将服务账号添加为密钥的主账号,并向服务账号授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色:

控制台

使用 Google Cloud 控制台为总线或流水线启用 CMEK 时,系统会提示您向服务账号授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色。如需了解详情,请参阅本文档中的为总线启用 CMEK为流水线启用 CMEK

gcloud

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

替换以下内容:

  • KEY_NAME:密钥的名称,例如 my-key
  • KEY_RING:密钥环的名称,例如 my-keyring
  • REGION:密钥的位置,例如 us-central1
  • SERVICE_AGENT_EMAIL:具有 eventarc.serviceAgent 角色的服务账号的电子邮件地址

    例如 service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com。 如需了解详情,请参阅服务代理

为公交车启用 CMEK

为 Eventarc Advanced 总线启用 CMEK 后,通过该总线传输的所有消息都会使用该 CMEK 密钥进行完全加密。

控制台

  1. 在 Google Cloud 控制台中,依次前往 Eventarc > Bus 页面。

    前往“公交”

  2. 您可以创建公交车,如果要更新公交车,请点击公交车的名称。

  3. 巴士详情页面中,点击 修改

  4. 修改数据总线页面中,针对加密,选择 Cloud KMS 密钥

  5. 密钥类型列表中,选择用于管理密钥的方法。

    您可以手动管理密钥,也可以使用 Autokey,以按需生成密钥环和密钥。如果 Autokey 选项处于停用状态,则表明其尚未与当前的资源类型集成。

  6. 选择客户管理的密钥。

  7. 可选:如需手动输入密钥的资源名称,请在选择客户管理的密钥列表中,点击手动输入密钥,然后以指定格式输入密钥名称。

  8. 如果出现提示,请向 Eventarc Service Agent 授予 cloudkms.cryptoKeyEncrypterDecrypter 角色

  9. 点击保存

gcloud

使用 gcloud beta eventarc message-buses update 命令为您的总线启用 CMEK:

gcloud beta eventarc message-buses update BUS_NAME \
    --location=REGION \
    --crypto-key=KEY

替换以下内容:

  • BUS_NAME:您的巴士的 ID 或完全限定标识符
  • REGION受支持的 Eventarc Advanced 位置
  • KEY:完全限定的 Cloud KMS 密钥名称,格式为 projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

    密钥的 REGION 必须与要保护的总线的位置相匹配。

验证 Cloud KMS 使用情况

验证该总线现在是否符合 CMEK 要求。

控制台

  1. 在 Google Cloud 控制台中,依次前往 Eventarc > Bus 页面。

    前往“公交”

  2. 点击您使用 CMEK 保护的总线的名称。

  3. 总线详情页面中,加密状态会显示消息 Event messages encrypted using customer-managed encryption keys

gcloud

使用 gcloud beta eventarc message-buses describe 命令描述您的公交车:

 gcloud beta eventarc message-buses describe BUS_NAME \
     --location=REGION

输出应类似如下所示:

 cryptoKeyName: projects/PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 name: projects/PROJECT_ID/locations/REGION/messageBuses/BUS_NAME
 updateTime: '2022-06-28T17:24:56.365866104Z'

cryptokeyName 值显示了用于该数据总线的 Cloud KMS 密钥。

为公交车停用 CMEK

您可以停用与总线关联的 CMEK 保护。通过该总线传送的事件仍受 Google 拥有且 Google 管理的密钥保护。

控制台

  1. 在 Google Cloud 控制台中,依次前往 Eventarc > Bus 页面。

    前往“公交”

  2. 点击相应公交车的名称。

  3. 巴士详情页面中,点击 修改

  4. 修改数据总线页面上,取消选中使用客户管理的加密密钥 (CMEK) 复选框。

  5. 点击保存

gcloud

使用 gcloud beta eventarc message-buses update 命令为您的总线停用 CMEK:

gcloud beta eventarc message-buses update BUS_NAME \
    --location=REGION \
    --clear-crypto-key

为流水线启用 CMEK

为 Eventarc Advanced 流水线启用 CMEK 后,通过该流水线的所有消息都会使用该 CMEK 密钥进行完全加密。

控制台

  1. 在 Google Cloud 控制台中,前往 Eventarc > 流水线页面。

    前往“流水线”

  2. 您可以创建流水线,如果要更新流水线,请点击流水线的名称。

  3. 流水线详情页面中,点击 修改

  4. 修改流水线页面中,针对加密,选择 Cloud KMS 密钥

  5. 密钥类型列表中,选择用于管理密钥的方法。

    您可以手动管理密钥,也可以使用 Autokey,以按需生成密钥环和密钥。如果 Autokey 选项不可用,则表明其尚未与当前的资源类型集成。

  6. 选择客户管理的密钥。

  7. 可选:如需手动输入密钥的资源名称,请在选择客户管理的密钥列表中,点击手动输入密钥,然后以指定格式输入密钥名称。

  8. 如果出现提示,请向 Eventarc Service Agent 授予 cloudkms.cryptoKeyEncrypterDecrypter 角色

  9. 点击保存

gcloud

使用 gcloud beta eventarc pipelines update 命令为流水线启用 CMEK:

 gcloud beta eventarc pipelines update PIPELINE_NAME \
     --location=REGION \
     --crypto-key=KEY

替换以下内容:

  • PIPELINE_NAME:流水线的 ID 或完全限定标识符
  • REGION受支持的 Eventarc Advanced 位置
  • KEY:完全限定的 Cloud KMS 密钥名称,格式为 projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

    密钥的 REGION 必须与要保护的流水线的位置相匹配。

验证 Cloud KMS 使用情况

验证流水线现在是否符合 CMEK 要求。

控制台

  1. 在 Google Cloud 控制台中,前往 Eventarc > 流水线页面。

    前往“流水线”

  2. 点击您使用 CMEK 保护的流水线的名称。

  3. 流水线详情页面中,加密的状态会显示消息 Event messages encrypted using customer-managed encryption keys

gcloud

使用 gcloud beta eventarc pipelines describe 命令验证流水线的 CMEK:

 gcloud beta eventarc pipelines describe PIPELINE_NAME \
     --location=REGION

输出应类似如下所示:

 createTime: '2022-06-28T18:05:52.403999904Z'
 cryptoKeyName: projects/PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 destinations: ...
 name: projects/PROJECT_ID/locations/REGION/pipelines/PIPELINE_NAME
 uid: 5ea277f9-b4b7-4e7f-a8e0-6ca9d7204fa3
 updateTime: '2022-06-28T18:09:18.650727516Z'

cryptokeyName 值显示了用于流水线的 Cloud KMS 密钥。

为流水线停用 CMEK

您可以停用与流水线关联的 CMEK 保护。通过该流水线传送的事件仍受 Google 拥有且 Google 管理的密钥保护。

控制台

  1. 在 Google Cloud 控制台中,前往 Eventarc > 流水线页面。

    前往“流水线”

  2. 点击流水线的名称。

  3. 流水线详情页面中,点击 修改

  4. 修改流水线页面中,取消选中使用客户管理的加密密钥 (CMEK) 复选框。

  5. 点击保存

gcloud

使用 gcloud beta eventarc pipelines update 命令为流水线停用 CMEK:

gcloud beta eventarc pipelines update PIPELINE_NAME \
    --location=REGION \
    --clear-crypto-key

为 Google API 来源启用 CMEK

GoogleApiSource 资源启用 CMEK 后,系统会使用 CMEK 密钥对为该资源收集的所有消息进行完全加密。

控制台

  1. 在 Google Cloud 控制台中,依次前往 Eventarc > Bus 页面。

    前往“公交”

  2. 您可以创建公交车,如果要更新公交车,请点击公交车的名称。

  3. 巴士详情页面中,点击 修改

  4. 如需添加消息来源,请点击 Add source(添加来源)。

    如果消息来源已存在,您必须先将其删除,然后再添加新的消息来源。

  5. 添加消息来源窗格中,对于 Google API 消息提供程序,接受默认值 google-api-source

  6. 对于加密,请选择 Cloud KMS 密钥,然后执行以下操作:

    1. 密钥类型列表中,选择用于管理密钥的方法。

      您可以手动管理密钥,也可以使用 Autokey,以按需生成密钥环和密钥。如果 Autokey 选项不可用,则表明其尚未与当前的资源类型集成。

    2. 选择客户管理的密钥中,选择一个密钥。

      您必须先选择区域,然后才能查看客户管理的密钥。

    3. 可选:如需手动输入密钥的资源名称,请在选择客户管理的密钥列表中,点击手动输入密钥,然后以指定格式输入密钥名称。

    4. 如果出现提示,请向 Eventarc Service Agent 授予 cloudkms.cryptoKeyEncrypterDecrypter 角色

  7. 点击创建

    这样一来,系统便可自动收集直接来自 Google 来源的事件,并且所有事件消息均会使用 CMEK 密钥进行完全加密。

    系统只会发布与 GoogleApiSource 位于同一 Google Cloud 项目中的资源发出的事件。如需了解详情,请参阅发布来自 Google 来源的事件

  8. 点击保存

gcloud

使用 gcloud beta eventarc google-api-sources update 命令为 GoogleApiSource 资源启用 CMEK:

gcloud beta eventarc google-api-sources update GOOGLE_API_SOURCE_NAME \
    --location=REGION \
    --crypto-key=KEY

替换以下内容:

  • GOOGLE_API_SOURCE_NAMEGoogleApiSource 资源的 ID 或完全限定标识符
  • REGION受支持的 Eventarc Advanced 位置
  • KEY:完全限定的 Cloud KMS 密钥名称,格式为 projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

    密钥的 REGION 必须与要保护的资源的位置相匹配。

验证 Cloud KMS 使用情况

验证资源现在是否符合 CMEK 要求。

控制台

  1. 在 Google Cloud 控制台中,依次前往 Eventarc > Bus 页面。

    前往“公交”

  2. 点击您已使用 Cloud KMS 密钥保护消息来源的公交车名称。

  3. 巴士详情页面中,点击 修改

    系统应列出用于加密消息来源的密钥。

gcloud

使用 gcloud beta eventarc google-api-sources describe 命令验证 GoogleApiSource 资源的 CMEK:

  gcloud beta eventarc google-api-sources describe GOOGLE_API_SOURCE_NAME \
      --location=REGION

输出应类似如下所示:

  createTime: '2022-06-28T18:05:52.403999904Z'
  cryptoKeyName: projects/PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
  destination: projects/PROJECT_ID/locations/REGION/messageBuses/BUS_NAME
  name: projects/PROJECT_ID/locations/REGION/googleApiSources/GOOGLE_API_SOURCE_NAME
  uid: 5ea277f9-b4b7-4e7f-a8e0-6ca9d7204fa3
  updateTime: '2022-06-28T18:09:18.650727516Z'

cryptokeyName 值显示了用于流水线的 Cloud KMS 密钥。

为 Google API 来源停用 CMEK

您可以停用与 Google API 来源关联的 CMEK 保护。通过 GoogleApiSource 资源收集的事件仍受 Google 拥有的密钥和 Google 管理的密钥保护。

控制台

  1. 在 Google Cloud 控制台中,依次前往 Eventarc > Bus 页面。

    前往“公交”

  2. 点击您已使用 CMEK 保护消息来源的总线的名称。

  3. 巴士详情页面中,点击 修改

  4. 如需删除使用 Cloud KMS 密钥加密的消息来源,请点击 删除资源

  5. 如有必要,请重新添加消息来源。

gcloud

使用 gcloud beta eventarc google-api-sources update 命令为 GoogleApiSource 资源停用 CMEK:

gcloud beta eventarc google-api-sources update GOOGLE_API_SOURCE_NAME \
    --location=REGION \
    --clear-crypto-key

停用和启用 Cloud KMS 密钥

密钥版本存储您用于加密、解密、签名和验证数据的加密密钥材料。您可以停用此密钥版本,使得使用该密钥加密的数据无法访问。

当 Eventarc 无法访问 Cloud KMS 密钥时,事件路由会失败并显示 FAILED_PRECONDITION 错误,然后事件传送会停止。您可以启用处于已停用状态的密钥,以便再次访问加密的数据。

停用 Cloud KMS 密钥

如需防止 Eventarc 使用该密钥加密或解密事件数据,请执行以下任一操作:

虽然这两项操作均不能保证即时撤销访问权限,但 Identity and Access Management (IAM) 更改通常会传播得更快。如需了解详情,请参阅 Cloud KMS 资源一致性访问权限更改传播

重新启用 Cloud KMS 密钥

如需继续传送和路由事件,请恢复对 Cloud KMS 的访问权限

审核日志记录和问题排查

当 Eventarc Advanced 资源启用密钥、停用密钥或使用密钥对消息进行加密和解密时,Cloud KMS 会生成审核日志。如需了解详情,请参阅 Cloud KMS 审核日志记录信息

如需解决通过 Cloud External Key Manager (Cloud EKM) 使用外部管理的密钥时可能遇到的问题,请参阅 Cloud EKM 错误参考

价格

除了密钥操作费用(会计入您的 Google Cloud 项目)以外,这种集成不会产生额外的费用。针对流水线使用 CMEK 会产生基于 Pub/Sub 价格的 Cloud KMS 服务使用费。

如需详细了解最新价格信息,请参阅 Cloud KMS 价格

后续步骤