使用客户管理的加密密钥

默认情况下,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 存储在外部

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

受 CMEK 保护的内容

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

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

请注意,在 Google Cloud项目中为 Google 渠道启用 CMEK 后,该项目和区域中 Google 事件类型的所有 Eventarc Standard 触发器都会使用该 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 > 渠道页面。

    前往“渠道”

  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 > 触发器页面。

    转到“触发器”

  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 > 渠道页面。

    前往“渠道”

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

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

  4. 修改渠道页面的加密部分中,选择 Cloud KMS 密钥

  5. 密钥类型列表中,选择一种密钥管理方法。

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

  6. 选择 Cloud KMS 密钥列表中,选择一个密钥。请注意,在每个区域中,您只能为一个渠道添加一个加密密钥。

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

  8. 如果出现提示,请将 cloudkms.cryptoKeyEncrypterDecrypter 角色授予 Eventarc 服务代理

  9. 点击保存

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 > 触发器页面。

    转到“触发器”

  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 密钥。

显示用于某个渠道的密钥

您可以描述 Eventarc 渠道并显示用于该渠道的 Cloud KMS 密钥。

控制台

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

    前往“渠道”

  2. 点击某个频道名称。

  3. 系统会显示用于该渠道的所有 CMEK 加密密钥。

gcloud

根据渠道类型,运行以下命令:

Google 渠道

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

第三方渠道

gcloud eventarc channels describe CHANNEL_NAME \
    --location=LOCATION

输出应包含类似以下内容的行:

cryptoKeyName: projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

cryptoKeyName 值显示了用于该渠道的 Cloud KMS 密钥。

停用 CMEK

您可以停用与渠道关联的 CMEK 保护。通过此类渠道传送的事件仍受 Google-owned and Google-managed encryption keys 保护。如需删除与渠道关联的 CMEK 保护,请执行以下操作:

控制台

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

    前往“渠道”

  2. 根据渠道类型完成以下步骤:

    Google 渠道

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

      您可能需要刷新页面才能启用使用客户管理的加密密钥 (CMEK) 复选框。

    第三方渠道

    1. 点击包含第三方提供商的渠道。
    2. 渠道详情页面中,点击 修改
    3. 修改渠道页面的加密部分中,选择 Google 管理的加密密钥
    4. 点击保存

gcloud

根据渠道类型,运行以下命令:

Google 渠道

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

第三方渠道

gcloud eventarc channels CHANNEL_NAME \
    update --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 密钥的所有现有资源都将继续存在,并且可以正常访问。

控制台

  1. 在 Google Cloud 控制台中,转到组织政策页面。

    转到“组织政策”

  2. 使用过滤条件搜索以下限制条件:

    constraints/gcp.restrictNonCmekServices
    
  3. 在“名称”列中,点击限制哪些服务可以在没有 CMEK 的情况下创建资源

  4. 点击 管理政策

  5. 修改政策页面的政策来源下方,选择覆盖父资源的政策

  6. 规则下方,点击添加规则

  7. 政策值列表中,选择自定义

  8. 政策类型列表中,选择拒绝

  9. 自定义值字段中,输入以下内容:

    is:eventarc.googleapis.com
    
  10. 点击完成,然后点击设置政策

gcloud

  1. 创建临时文件 /tmp/policy.yaml 以存储政策:

      name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices
      spec:
        rules:
        - values:
            deniedValues:
            - is:eventarc.googleapis.com

    PROJECT_ID 替换为您要应用此限制条件的项目的 ID。

  2. 运行 org-policies set-policy 命令:

    gcloud org-policies set-policy /tmp/policy.yaml

如需验证政策是否已成功应用,您可以尝试在项目中创建 Eventarc Standard 渠道。除非您指定 Cloud KMS 密钥,否则该过程会失败。

为 Eventarc 项目限制 Cloud KMS 密钥

您可以使用 constraints/gcp.restrictCmekCryptoKeyProjects 限制条件来限制可用于保护 Eventarc 项目中的资源的 Cloud KMS 密钥。

例如,您可以指定类似于以下内容的规则:“对于 projects/my-company-data-project 中的适用 Eventarc 资源,此项目中使用的 Cloud KMS 密钥必须来自 projects/my-company-central-keysprojects/team-specific-keys”。

控制台

  1. 在 Google Cloud 控制台中,转到组织政策页面。

    转到“组织政策”

  2. 使用过滤条件搜索以下限制条件:

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. 在“名称”列中,点击限制哪些项目可以为 CMEK 提供 KMS CryptoKey

  4. 点击 管理政策

  5. 修改政策页面的政策来源下方,选择覆盖父资源的政策

  6. 规则下方,点击添加规则

  7. 政策值列表中,选择自定义

  8. 政策类型列表中,选择允许

  9. 自定义值字段中,输入以下内容:

    under:projects/KMS_PROJECT_ID
    

    KMS_PROJECT_ID 替换为您要使用的 Cloud KMS 密钥所在的项目的 ID。

    例如 under:projects/my-kms-project

  10. 点击完成,然后点击设置政策

gcloud

  1. 创建临时文件 /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。
  2. 运行 org-policies set-policy 命令:

    gcloud org-policies set-policy /tmp/policy.yaml

如需验证政策是否已成功应用,您可以尝试使用其他项目中的 Cloud KMS 密钥创建 Eventarc Standard 渠道。该过程将失败。

停用和启用 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 价格

后续步骤