默认情况下,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 中使用此功能之前,您应该:
控制台
-
Enable the Cloud KMS and Eventarc APIs.
- 创建密钥环。
- 为指定的密钥环创建密钥。
gcloud
- 更新
gcloud
组件。gcloud components update
- 为存储加密密钥的项目启用 Cloud KMS 和 Eventarc API。
gcloud services enable cloudkms.googleapis.com eventarc.googleapis.com
- 创建密钥环。
- 为指定的密钥环创建密钥。
如需了解所有标志和可能值,请使用 --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 密钥。
控制台
在 Google Cloud 控制台中,转到 Eventarc > Eventarc页面。
点击包含 Google 提供商的渠道。
在修改渠道页面中,选中使用客户管理的加密密钥 (CMEK) 复选框。
点击添加加密密钥。
选择一个区域,然后在 CMEK 加密密钥列表中,选择您为该区域创建的密钥环。请注意,您只能为渠道的每个区域添加一个加密密钥。
可选:如需手动输入密钥的资源名称,请在 CMEK 加密密钥列表中,点击没有看到您的密钥?请输入密钥资源名称,以便以指定格式输入密钥名称。
如果出现提示,请将
cloudkms.cyptoKeyEncrypterDecrypter
角色授予给具有eventarc.serviceAgent
角色的 Eventarc 服务账号。可选:点击添加加密密钥,添加您为其他区域创建的另一个密钥环。
点击保存。
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,请执行以下操作:
控制台
在 Google Cloud 控制台中,转到 Eventarc > Eventarc页面。
点击将 Google Cloud 来源列为其事件提供方的触发器和一个您使用 CMEK 保护的区域。
在触发器详情页面中,加密的状态会显示消息
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,请执行以下操作:
控制台
在 Google Cloud 控制台中,转到 Eventarc > Eventarc页面。
点击包含第三方提供商的渠道。
在渠道详情页面中,点击修改。
在修改渠道页面中,选中使用客户管理的加密密钥 (CMEK) 复选框。
在 CMEK 加密密钥列表中,选择您为该区域创建的密钥环。请注意,您只能为渠道的每个区域添加一个加密密钥。
可选:如需手动输入您要使用的密钥的资源名称,请在 CMEK 加密密钥列表中,点击手动输入密钥,然后以指定格式输入密钥名称。
如果出现提示,请将
cloudkms.cyptoKeyEncrypterDecrypter
角色授予给具有eventarc.serviceAgent
角色的 Eventarc 服务账号。点击保存。
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,请执行以下操作:
控制台
在 Google Cloud 控制台中,转到 Eventarc > Eventarc页面。
点击第三方来源作为其事件提供方的触发器以及您使用 CMEK 保护的区域。
在触发器详情页面中,加密的状态会显示消息
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 保护,请执行以下操作:
控制台
在 Google Cloud 控制台中,转到 Eventarc > Eventarc页面。
根据渠道类型执行以下操作:
Google 渠道
- 点击包含 Google 提供商的渠道。
- 在修改渠道页面中,将指针悬停在 CMEK 加密密钥列表上,以查看 删除项按钮。
- 点击 删除项。
- 点击保存。
第三方渠道
- 点击包含第三方提供商的渠道。
- 在渠道详情页面中,点击修改。
- 在修改渠道页面中,取消选中使用客户管理的加密密钥 (CMEK) 复选框。
- 点击保存。
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 使用该密钥加密或解密事件数据,请执行以下任一操作:
- 我们建议您停用为渠道配置的密钥版本。这仅影响与特定密钥关联的 Eventarc 渠道和触发器。
- 可选:撤销 Eventarc 服务账号的
cloudkms.cryptoKeyEncrypterDecrypter
角色。这会影响项目中为使用 CMEK 进行加密的事件提供支持的所有 Eventarc 渠道和触发器。
虽然这两项操作均不能保证即时撤销访问权限,但 Identity and Access Management (IAM) 更改通常会传播得更快。如需了解详情,请参阅 Cloud KMS 资源一致性和访问权限更改传播。
重新启用 Cloud KMS 密钥
要继续传送和发布事件,请恢复对 Cloud KMS 的访问权限。
价格
除了密钥操作费用(会计入您的 Google Cloud 项目)以外,这种集成不会产生额外的费用。针对渠道使用 CMEK 会产生基于 Pub/Sub 价格的 Cloud KMS 服务使用费。
如需详细了解最新价格信息,请参阅 Cloud KMS 价格。