使用客户管理的加密密钥

默认情况下,Google 会对静态存储的数据进行加密。Google Cloud 会为您处理和管理此加密,您无需进行任何其他操作。

如果您对保护数据的密钥有特定的合规性或监管要求,则可以使用客户管理的加密密钥 (CMEK)。借助 CMEK,您可以使用只有您可以访问的加密密钥保护 Eventarc 和关联的静态数据,您可以使用 Cloud Key Management Service (Cloud KMS) 创建和管理这些静态数据。由于密钥归您自己所有,且不受 Google 控制,因此在停用或销毁密钥后,没有人(包括您)可以访问受该密钥保护的数据。

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

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

受 CMEK 保护的内容

您可以为 Eventarc 使用的渠道配置 CMEK,并加密通过该渠道的事件。

启用具有 CMEK 的渠道后,您可以使用只有您可以访问的加密密钥来保护与其关联的数据(例如,用作传输层的 Pub/Sub 主题)。

请注意,在 Google Cloud 项目中为 Google 渠道启用 CMEK 后,该项目和区域中 Google 事件类型的所有 Eventarc 触发器都会使用该 CMEK 密钥进行完全加密。您无法按触发器应用 CMEK 密钥。

准备工作

在 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 标志运行命令。

请注意,Cloud KMS 和 Eventarc 是区域化服务。Cloud KMS 密钥和受保护的 Eventarc 渠道的区域必须相同。

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

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

控制台

通过控制台为 Google 或第三方渠道启用 CMEK 时,系统会提示您向服务账号授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色。如需了解详情,请参阅本文档中的为 Google 事件类型启用 CMEK为第三方事件渠道启用 CMEK

gcloud

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

替换以下内容:

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

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

为 Google 事件类型启用 CMEK

用于路由 Google 事件类型的 Eventarc 触发器会将事件发布到称为项目和区域特定的 Google 渠道的虚拟渠道。此虚拟通道在所有 Eventarc 区域中都可用。

在 Google Cloud 项目中为 Google 渠道启用 CMEK 后,该项目和区域中 Google 事件类型的所有 Eventarc 触发器都会使用该 CMEK 密钥进行完全加密。您可以添加多个 CMEK 密钥,并将每个密钥与 Google 渠道的特定区域相关联。您无法按触发器应用 CMEK 密钥。

控制台

  1. 在 Google Cloud 控制台中,转到 Eventarc > 渠道页面。

    转到 Eventarc

  2. 点击包含 Google 提供商的渠道。

  3. 修改渠道页面中,选中使用客户管理的加密密钥 (CMEK) 复选框。

  4. 点击添加加密密钥

  5. 选择一个区域,然后在 CMEK 加密密钥列表中,选择您为该区域创建的密钥环。请注意,您只能为渠道的每个区域添加一个加密密钥。

  6. 可选:如需手动输入密钥的资源名称,请在 CMEK 加密密钥列表中,点击没有看到您的密钥?请输入密钥资源名称,以便以指定格式输入密钥名称。

  7. 如果出现提示,请将 cloudkms.cryptoKeyEncrypterDecrypter 角色授予给具有 eventarc.serviceAgent 角色的 Eventarc 服务账号。

  8. 可选:点击添加加密密钥,添加您为其他区域创建的另一个密钥环。

  9. 点击保存

gcloud

 gcloud eventarc google-channels update \
    --location=LOCATION \
    --crypto-key=KEY

替换以下内容:

  • LOCATION:要保护的 Google 渠道的位置。它必须与使用的密钥位置匹配。
  • KEY:完全限定的 Cloud KMS 密钥名称,格式为 projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

如果您使用自己的现有主题创建 Pub/Sub 触发器,则为了全面保护 CMEK,我们还建议您为该主题配置 KMS 密钥。如需了解详情,请参阅配置 Pub/Sub 主题

验证 Cloud KMS 使用情况

如需验证渠道现在是否符合 CMEK,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Eventarc > 触发器页面。

    转到 Eventarc

  2. 点击将 Google Cloud 来源列为其事件提供方的触发器和一个您使用 CMEK 保护的区域

  3. 触发器详情页面中,加密的状态会显示消息 Events encrypted using Customer-managed encryption keys

gcloud

 gcloud eventarc google-channels describe \
    --location=LOCATION

输出应类似如下所示:

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

cryptokeyName 值显示了用于 Google 渠道的 Cloud KMS 密钥。

为第三方渠道启用 CMEK

第三方的 Eventarc 渠道是一种资源,供提供 Eventarc 来源的非 Google Cloud 实体与目标进行交互。此渠道仅适用于特定区域,并且您只能为每个第三方渠道添加一个密钥。

如需为第三方渠道启用 CMEK,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Eventarc > 渠道页面。

    转到 Eventarc

  2. 点击包含第三方提供商的渠道。

  3. 渠道详情页面中,点击修改

  4. 修改渠道页面中,选中使用客户管理的加密密钥 (CMEK) 复选框。

  5. CMEK 加密密钥列表中,选择您为该区域创建的密钥环。请注意,您只能为渠道的每个区域添加一个加密密钥。

  6. 可选:如需手动输入您要使用的密钥的资源名称,请在 CMEK 加密密钥列表中,点击手动输入密钥,然后以指定格式输入密钥名称。

  7. 如果出现提示,请将 cloudkms.cryptoKeyEncrypterDecrypter 角色授予给具有 eventarc.serviceAgent 角色的 Eventarc 服务账号。

  8. 点击保存

gcloud

 gcloud eventarc channels update CHANNEL_NAME \
    --location=LOCATION \
    --crypto-key=KEY

替换以下内容:

  • CHANNEL_NAME:第三方渠道的名称。要创建新的第三方渠道,请参阅创建渠道
  • LOCATION:要保护的第三方渠道的位置。它必须与密钥的位置匹配。
  • KEY:完全限定的 Cloud KMS 密钥名称,格式为 projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

验证 Cloud KMS 使用情况

如需验证渠道现在是否符合 CMEK,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Eventarc > 触发器页面。

    转到 Eventarc

  2. 点击第三方来源作为其事件提供方的触发器以及您使用 CMEK 保护的区域

  3. 触发器详情页面中,加密的状态会显示消息 Events encrypted using Customer-managed encryption keys

gcloud

 gcloud eventarc channels describe CHANNEL_NAME \
    --location=LOCATION

输出应类似如下所示:

 createTime: '2022-06-28T18:05:52.403999904Z'
 cryptoKeyName: projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 name: projects/PROJECT_ID/locations/LOCATION/googleChannelConfig
 pubsubTopic: projects/PROJECT_ID/topics/PUBSUB_TOPIC_ID
 state: ACTIVE
 uid: 5ea277f9-b4b7-4e7f-a8e0-6ca9d7204fa3
 updateTime: '2022-06-28T18:09:18.650727516Z'

cryptokeyName 值显示用于第三方渠道的 Cloud KMS 密钥。

停用 CMEK

您可以停用与渠道关联的 CMEK 保护。通过此类渠道传送的事件仍受 Google 拥有的密钥和 Google 管理的密钥保护。如需删除与频道关联的 CMEK 保护,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Eventarc > 渠道页面。

    转到 Eventarc

  2. 根据渠道类型执行以下操作:

    Google 渠道

    1. 点击包含 Google 提供商的渠道。
    2. 修改渠道页面中,将指针悬停在 CMEK 加密密钥列表上,以查看 删除项按钮。
    3. 点击 删除项
    4. 点击保存

    第三方渠道

    1. 点击包含第三方提供商的渠道。
    2. 渠道详情页面中,点击修改
    3. 修改渠道页面中,取消选中使用客户管理的加密密钥 (CMEK) 复选框。
    4. 点击保存

gcloud

根据渠道类型执行以下操作:

Google 渠道

gcloud eventarc google-channels \
    update --clear-crypto-key

第三方渠道

gcloud eventarc channels CHANNEL_NAME \
    update --clear-crypto-key

停用和启用 Cloud KMS 密钥

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

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

停用 Cloud KMS 密钥

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

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

重新启用 Cloud KMS 密钥

要继续传送和发布事件,请恢复对 Cloud KMS 的访问权限

价格

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

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

后续步骤