默认情况下,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 来加密通过以下 Eventarc Advanced 资源的事件消息:
MessageBus
- Eventarc Advanced 总线Pipeline
- Eventarc Advanced 流水线GoogleApiSource
- 表示特定总线的 Google API 事件订阅的 Eventarc Advanced 资源
如需了解详情,请参阅 Eventarc Advanced 概览。
为资源启用 CMEK 后,它会使用只有您可以访问的加密密钥来保护相应区域中与该资源相关联的数据。
Cloud KMS 和 Eventarc 是区域化服务。Cloud KMS 密钥和受保护的 Eventarc Advanced 资源的区域必须相同。
准备工作
在 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
标志运行命令。
向 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 密钥进行完全加密。
控制台
在 Google Cloud 控制台中,前往 Eventarc > 总线页面。
您可以创建总线,或者如果您要更新总线,请点击总线的名称。
在总线详情页面中,点击
修改。在修改总线页面的加密部分中,选择 Cloud KMS 密钥。
在密钥类型列表中,选择一种管理密钥的方法。
您可以手动管理密钥,也可以使用 Autokey,可让您按需生成密钥环和密钥。如果 Autokey 选项处于停用状态,则表明其尚未与当前的资源类型集成。
在选择 Cloud KMS 密钥列表中,选择一个密钥。
可选:如需手动输入密钥的资源名称,请在选择 Cloud KMS 密钥列表中,点击手动输入密钥,然后以指定的格式输入密钥名称。
如果系统提示,请将
cloudkms.cryptoKeyEncrypterDecrypter
角色授予 Eventarc Service Agent。点击保存。
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 要求。
控制台
在 Google Cloud 控制台中,前往 Eventarc > 总线页面。
点击您已使用 CMEK 保护的总线的名称。
在总线详情页面上,加密状态指示正在使用的客户管理的加密密钥。您可以点击该密钥以在 Security Command Center 中找到该密钥。
否则,状态消息为
Event messages encrypted using Google-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-owned and Google-managed encryption keys 保护。
控制台
在 Google Cloud 控制台中,前往 Eventarc > 总线页面。
点击总线的名称。
在总线详情页面中,点击
修改。在修改总线页面的加密部分中,选择 Google 管理的加密密钥。
点击保存。
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 密钥进行完全加密。
控制台
在 Google Cloud 控制台中,前往 Eventarc > 流水线页面。
您可以创建流水线,或者如果您要更新流水线,请点击流水线的名称。
在流水线详情页面中,点击
修改。在修改流水线页面的加密部分中,选择 Cloud KMS 密钥。
在密钥类型列表中,选择一种管理密钥的方法。
您可以手动管理密钥,也可以使用 Autokey,可让您按需生成密钥环和密钥。如果 Autokey 选项处于停用状态,则表明其尚未与当前的资源类型集成。
在选择 Cloud KMS 密钥列表中,选择一个密钥。
可选:如需手动输入密钥的资源名称,请在选择 Cloud KMS 密钥列表中,点击手动输入密钥,然后以指定的格式输入密钥名称。
如果系统提示,请将
cloudkms.cryptoKeyEncrypterDecrypter
角色授予 Eventarc Service Agent。点击保存。
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 要求。
控制台
在 Google Cloud 控制台中,前往 Eventarc > 流水线页面。
点击您已使用 CMEK 保护的流水线的名称。
在流水线详情页面上,加密状态指示正在使用的客户管理的加密密钥。您可以点击该密钥以在 Security Command Center 中找到该密钥。
否则,状态消息为
Event messages encrypted using Google-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-owned and Google-managed encryption keys 保护。
控制台
在 Google Cloud 控制台中,前往 Eventarc > 流水线页面。
点击流水线的名称。
在流水线详情页面中,点击
修改。在修改流水线页面的加密部分中,选择 Google 管理的加密密钥。
点击保存。
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 密钥进行完全加密。
控制台
在 Google Cloud 控制台中,前往 Eventarc > 总线页面。
您可以创建总线,或者如果您要更新总线,请点击总线的名称。
在总线详情页面中,点击
修改。如需添加消息来源,请点击
添加来源。如果消息来源已存在,您必须先将其删除,然后再添加新的消息来源。
在添加消息来源窗格中,对于 Google API 消息提供方,接受默认值
google-api-source
。在加密部分中,选择 Cloud KMS 密钥,然后执行以下操作:
在密钥类型列表中,选择一种管理密钥的方法。
您可以手动管理密钥,也可以使用 Autokey,可让您按需生成密钥环和密钥。如果 Autokey 选项处于停用状态,则表明其尚未与当前的资源类型集成。
在选择 Cloud KMS 密钥中,选择一个密钥。
您必须先选择区域,然后才能查看客户管理的密钥。
可选:如需手动输入密钥的资源名称,请在选择 Cloud KMS 密钥列表中,点击手动输入密钥,然后以指定的格式输入密钥名称。
如果系统提示,请将
cloudkms.cryptoKeyEncrypterDecrypter
角色授予 Eventarc Service Agent。
点击创建。
这样一来,系统便可自动收集直接来自 Google 来源的事件,并且所有事件消息都会使用 CMEK 密钥进行完全加密。
系统仅会发布与
GoogleApiSource
位于同一 Google Cloud 项目中的资源的事件。如需了解详情,请参阅发布来自 Google 来源的事件。点击保存。
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_NAME
:GoogleApiSource
资源的 ID 或完全限定标识符REGION
:受支持的 Eventarc Advanced 位置KEY
:完全限定的 Cloud KMS 密钥名称,格式为projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
密钥的
REGION
必须与要保护的资源的位置匹配。
验证 Cloud KMS 使用情况
验证资源现在是否符合 CMEK 要求。
控制台
在 Google Cloud 控制台中,前往 Eventarc > 总线页面。
点击您已使用 Cloud KMS 密钥保护其消息来源的总线的名称。
在总线详情页面中,点击
修改。系统应列出加密消息来源的密钥。您可以点击该密钥以在 Security Command Center 中找到该密钥。
否则,加密状态消息为
Event messages encrypted using Google-managed encryption keys
。
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-owned and Google-managed encryption keys 保护。
控制台
在 Google Cloud 控制台中,前往 Eventarc > 总线页面。
点击您已使用 CMK 保护其消息来源的总线的名称。
在总线详情页面中,点击
修改。如需删除由 Cloud KMS 密钥加密的消息来源,请点击
删除资源。如有必要,请重新添加消息来源。
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
应用 CMEK 组织政策
Eventarc 集成了两种组织政策限制条件,以帮助确保整个组织中使用 CMEK:
constraints/gcp.restrictNonCmekServices
用于要求 CMEK 保护。constraints/gcp.restrictCmekCryptoKeyProjects
用于限制哪些 Cloud KMS 密钥用于 CMEK 保护。
借助此集成,您可以为组织中的 Eventarc 资源指定以下加密合规性要求:
应用组织政策时的注意事项
在应用任何 CMEK 组织政策之前,您应注意以下事项。
为传播延迟做好准备
设置或更新组织政策后,新政策最多可能需要 15 分钟才能生效。
考虑现有资源
现有资源不受新创建的组织政策约束。例如,组织政策不会以追溯方式应用于现有流水线。这些资源在没有 CMEK 的情况下仍然可供访问,并且(如果适用)仍然会使用现有密钥进行加密。
验证设置组织政策所需的权限
出于测试目的,可能难以获取设置或更新组织政策的权限。必须具有 Organization Policy Administrator 角色,该角色只能在组织级层(而不是项目或文件夹级层)授予。
虽然该角色必须在组织级层授予,但仍然可以指定仅应用于特定项目或文件夹的政策。
要求为新的 Eventarc 资源使用 CMEK
您可以使用 constraints/gcp.restrictNonCmekServices
限制条件来要求使用 CMEK 保护组织中的新 Eventarc 资源。
如果设置,此组织政策会导致没有指定 Cloud KMS 密钥的所有资源创建请求失败。
设置此政策后,它仅适用于项目中的新资源。未应用 Cloud KMS 密钥的所有现有资源都将继续存在,并且可以正常访问。
控制台
在 Google Cloud 控制台中,转到组织政策页面。
使用过滤条件搜索以下限制条件:
constraints/gcp.restrictNonCmekServices
在“名称”列中,点击限制哪些服务可以在没有 CMEK 的情况下创建资源。
点击
管理政策。在修改政策页面的政策来源下方,选择覆盖父资源的政策。
在规则下方,点击添加规则。
在政策值列表中,选择自定义。
在政策类型列表中,选择拒绝。
在自定义值字段中,输入以下内容:
is:eventarc.googleapis.com
点击完成,然后点击设置政策。
gcloud
创建临时文件
/tmp/policy.yaml
以存储政策:name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices spec: rules: - values: deniedValues: - is:eventarc.googleapis.com
将
PROJECT_ID
替换为您要应用此限制条件的项目的 ID。运行
org-policies set-policy
命令:gcloud org-policies set-policy /tmp/policy.yaml
如需验证政策是否已成功应用,您可以尝试在项目中创建 Eventarc Advanced 流水线。除非您指定 Cloud KMS 密钥,否则该过程会失败。
限制 Eventarc 项目的 Cloud KMS 密钥
您可以使用 constraints/gcp.restrictCmekCryptoKeyProjects
限制条件来限制可用于保护 Eventarc 项目中的资源的 Cloud KMS 密钥。
例如,您可以指定类似于以下内容的规则:“对于 projects/my-company-data-project
中的适用 Eventarc 资源,此项目中使用的 Cloud KMS 密钥必须来自 projects/my-company-central-keys
或 projects/team-specific-keys
”。
控制台
在 Google Cloud 控制台中,转到组织政策页面。
使用过滤条件搜索以下限制条件:
constraints/gcp.restrictCmekCryptoKeyProjects
在“名称”列中,点击限制哪些项目可以为 CMEK 提供 KMS CryptoKey。
点击
管理政策。在修改政策页面的政策来源下方,选择覆盖父资源的政策。
在规则下方,点击添加规则。
在政策值列表中,选择自定义。
在政策类型列表中,选择允许。
在自定义值字段中,输入以下内容:
under:projects/KMS_PROJECT_ID
将
KMS_PROJECT_ID
替换为您要使用的 Cloud KMS 密钥所在的项目的 ID。例如
under:projects/my-kms-project
。点击完成,然后点击设置政策。
gcloud
创建临时文件
/tmp/policy.yaml
以存储政策:name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects spec: rules: - values: allowedValues: - under:projects/KMS_PROJECT_ID
替换以下内容
PROJECT_ID
:您要应用此限制条件的项目的 ID。KMS_PROJECT_ID
:您要使用的 Cloud KMS 密钥所在的项目的 ID。
运行
org-policies set-policy
命令:gcloud org-policies set-policy /tmp/policy.yaml
如需验证政策是否已成功应用,您可以尝试使用其他项目中的 Cloud KMS 密钥创建 Eventarc Advanced 流水线。该过程将失败。
停用和启用 Cloud KMS 密钥
密钥版本存储您用于加密、解密、签名和验证数据的加密密钥材料。您可以停用此密钥版本,使得使用该密钥加密的数据无法访问。
当 Eventarc 无法访问 Cloud KMS 密钥时,事件路由会失败并显示 FAILED_PRECONDITION
错误,然后事件传送会停止。您可以启用处于已停用状态的密钥,以便再次访问加密的数据。
停用 Cloud KMS 密钥
如需防止 Eventarc 使用该密钥加密或解密事件数据,请执行以下任一操作:
- 我们建议您停用为总线或流水线配置的密钥版本。这仅会影响与特定密钥关联的 Eventarc Advanced 总线或流水线。
- 可选:撤销 Eventarc 服务账号的
cloudkms.cryptoKeyEncrypterDecrypter
角色。这会影响项目中为使用 CMEK 进行加密的事件提供支持的所有 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 价格。