创建 EKM 连接

本页面介绍如何设置 Cloud External Key Manager (Cloud EKM),以通过 Virtual Private Cloud (VPC) 网络连接到外部密钥管理 (EKM) 提供方。

在支持通过 VPC 的 EKM 的 Cloud KMS 位置,您可以通过 VPC 使用外部密钥。如需了解详情,请参阅“Cloud KMS 位置”页面

术语

  • EKM 连接

    用于配置与外部密钥管理器的连接的 Cloud KMS 资源。在 Google Cloud 控制台中,这称为“通过 VPC 连接的 EKM”

  • VPC 项目

    包含用于连接到外部密钥管理器的 VPC 资源的项目。

  • 关键项目

    在 Cloud KMS 中保存 EKM 连接资源和 Cloud EKM 密钥的项目。密钥项目可以与 VPC 项目相同,但这不是必需的。

  • 加密空间

    用于存放外部密钥管理合作伙伴内资源的容器。您的加密空间由唯一的加密空间路径标识。加密空间路径的格式因外部密钥管理合作伙伴而异,例如 v0/cryptospaces/YOUR_UNIQUE_PATH

准备工作

完成以下步骤后,您就可以开始使用 Cloud EKM 密钥来保护数据了。

创建新项目

  1. 在 Google Cloud 控制台中,前往“管理资源”页面。

    转到“管理资源”页面

  2. 创建新的 Google Cloud 项目或选择现有项目。

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 您可以详细了解 Cloud EKM 价格

启用 Cloud KMS

  1. 为项目启用 Cloud Key Management Service API。

    启用 Cloud Key Management Service API

  2. 请记下项目的 Cloud EKM 服务账号。在以下示例中,将 PROJECT_NUMBER 替换为您的 Google Cloud 项目的项目编号。每次您使用 Google Cloud 控制台创建 Cloud EKM 密钥时,也会看到此信息。

    service-PROJECT_NUMBER@gcp-sa-ekms.iam.gserviceaccount.com
    

确保 gcloud CLI 是最新版本

如果您要使用 Google Cloud CLI,请使用以下命令确保它是最新版本:

gcloud CLI

gcloud components update

准备 VPC 网络

设置 VPC 网络时,有两种选项可供选择:

默认情况下,新项目包含一个预先填充了防火墙规则的自动模式网络。如果 VPC 网络不用于生产目的,默认的自动模式网络是最快的入门方式。

如果您的外部密钥管理器在本地运行,并且您将通过混合连接连接到该管理器,则应使用自定义模式网络,因为它可以提供对子网 IP 地址范围的控制。

请按照以下步骤设置您的 VPC:

  1. 启用专用 Google 访问通道

    外部密钥管理器必须验证每个请求中包含的 OIDC 令牌。为了验证令牌,它需要从 www.googleapis.com 域名中检索 OAuth2 公钥。如果外部密钥管理器在 Google Cloud 中运行且无法通过互联网访问(例如没有外部 IP 或被防火墙屏蔽的虚拟机),请按照配置专用 Google 访问通道的说明进行操作。

  2. IP 范围 35.199.192.0/19 的防火墙配置

    来自 Cloud EKM 的请求将来自此范围。为外部密钥管理器所监听的端口创建 TCP 的入站和出站允许防火墙规则

设置混合连接

如果外部密钥管理器在本地运行,请使用混合连接解决方案将 VPC 连接到您的本地网络。设置连接后,还需执行以下步骤:

  1. 启用专用 Google 访问通道

    外部密钥管理器必须验证每个请求中包含的 OIDC 令牌。为了验证令牌,它需要从 www.googleapis.com 域名中检索 OAuth2 公钥。如果外部密钥管理器在本地运行且不能通过互联网访问,请按照为本地主机配置专用 Google 访问通道的说明进行操作。

  2. IP 范围 35.199.192.0/19 的防火墙配置

    来自 Cloud EKM 的请求将来自此范围。配置您的本地网络防火墙或类似设备,以允许外部密钥管理器正在监听的端口上的 TCP 流量。

  3. 确保您的 VPC 具有到 IP 范围 35.199.192.0/19 的返回路由

    您的本地网络必须具有 35.199.192.0/19 目的地的路由。如需了解如何满足此要求,请参阅本地目标的返回路由策略

本地目标的返回路由策略

  • 对于使用静态路由的 Cloud VPN 隧道,请在本地网络中手动创建目标为 35.199.192.0/19 且下一个跃点为 Cloud VPN 隧道的路由。对于使用基于政策的路由的 Cloud VPN 隧道,请配置 Cloud VPN 的本地流量选择器和本地 VPN 网关的远程流量选择器,以包含 35.199.192.0/19

  • 对于使用动态路由或 Cloud Interconnect 的 Cloud VPN 隧道,请在管理该隧道或 VLAN 连接的 Cloud Router 路由器的 BGP 会话上为 35.199.192.0/19 配置自定义路由通告

设置外部密钥管理器

按照 EKM 提供商的说明操作,以设置 EKM。

设置您的加密货币空间

如果您在合作伙伴管理的 EKM 安排中使用 Cloud EKM,则我们已在合作伙伴预配过程中为您完成这些步骤。

如果您的 EKM 提供方与 Cloud KMS 中的 EKM 密钥管理兼容,则需要在 EKM 中执行以下设置和配置步骤:

  • 在 EKM 中为 Cloud KMS 管理的资源创建加密空间。

  • 向 Cloud KMS 服务帐号授予对加密空间以及在其中创建的密钥的访问权限。

  • 设置 Key Access Justifications 政策以定义应允许或拒绝哪些访问理由。

上述每个步骤的确切流程取决于您的 EKM。如需了解详情,请参阅 EKM 提供方的文档。

创建 Service Directory 服务端点

在 VPC 项目中创建并配置 Service Directory 服务端点,该端点指向您的外部密钥管理器的专用 IP 地址和端口。如果您在多个 EKM 副本前面使用负载均衡器,请使用负载均衡器的 IP 地址和端口。确保 Service Directory 服务端点的 network 字段已填充。

授权 Cloud EKM 访问您的 VPC

对于每个密钥项目,您必须授权 Cloud EKM 代表该项目访问您的 VPC,即使密钥项目和 VPC 项目相同也是如此。通过授予访问权限,密钥项目中的密钥可以使用 VPC 项目中的 VPC。

  1. 确保项目存在 Cloud EKM 服务帐号。

    gcloud CLI

    gcloud beta services identity create \
      --service=cloudkms.googleapis.com \
      --project=KEY_PROJECT_ID
    
  2. 将 VPC 项目中的 servicedirectory.viewerservicedirectory.pscAuthorizedService 授予 service-KEY_PROJECT_NUMBER@gcp-sa-ekms.iam.gserviceaccount.com。如需获得项目 ID 和编号方面的帮助,请参阅创建和管理项目

    gcloud CLI

    gcloud projects add-iam-policy-binding VPC_PROJECT_ID \
      --member='serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-ekms.iam.gserviceaccount.com' \
      --role='roles/servicedirectory.viewer'
    
    gcloud projects add-iam-policy-binding VPC_PROJECT_ID \
      --member='serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-ekms.iam.gserviceaccount.com' \
      --role='roles/servicedirectory.pscAuthorizedService'
    

创建 EKM 连接

如需将外部密钥管理器连接到 Cloud EKM,请在密钥项目中创建 EKM 连接

控制台

  1. 在 Google Cloud 控制台中,转到 KMS 基础架构页面。

    转到 KMS 基础架构

  2. 点击 创建连接

  3. 对于连接名称,输入连接的名称。

  4. 对于区域,为 EKM 连接选择一个位置。与此连接关联的所有 Cloud KMS 密钥必须与该连接位于同一位置。

  5. 对于服务资源 ID (self_link) 字段,输入创建 Service Directory 服务端点部分中创建的 Service Directory 服务的值。服务目录服务必须与连接位于同一位置。

  6. Hostname(主机名)字段中,添加外部密钥管理器的主机名。

  7. 证书中,点击添加证书为您的外部密钥管理器上传一个或多个 X.509 服务器证书。证书必须采用 DER 格式。

  8. 对于 EKM 管理模式,请选择手动以将 EKM 连接用于手动管理的外部密钥,或选择 Cloud KMS 以将 EKM 连接用于协调的外部密钥。

  9. 如果您为 EKM 管理模式选择了 Cloud KMS,请在 Crypto Space path 字段中输入您的 EKM 提供的加密空间路径。

  10. 可选。如需将 EKM 连接设置为此项目和位置的默认连接,请选中将连接设为默认连接复选框。如果当前将另一个 EKM 连接设置为此项目和位置的默认连接,此 EKM 连接将替换现有的默认连接。

  11. 点击创建

gcloud

如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI

如需为手动管理的外部密钥创建 EKM 连接,请运行以下命令:

gcloud beta kms ekm-connections create EKM_CONNECTION \
    --location LOCATION \
    --service-directory-service SERVICE_DIRECTORY_SERVICE \
    --hostname HOSTNAME \
    --server-certificates-files SERVER_CERTIFICATE_FILES \
    --key-management-mode manual

替换以下内容:

  • EKM_CONNECTION:EKM 连接的名称。
  • LOCATION:您要创建 EKM 连接的 Cloud KMS 位置。与此连接关联的所有 Cloud KMS 密钥必须与该连接位于同一位置。
  • SERVICE_DIRECTORY_SERVICE:连接的 Service Directory 服务的资源 ID。
  • HOSTNAME:外部密钥管理器的主机名。
  • SERVER_CERTIFICATE_FILES:包含外部密钥管理器的 X.509 服务器证书的文件列表(以英文逗号分隔)。 证书必须采用 DER 格式。

如需为协调外部密钥创建 EKM 连接,请运行以下命令:

gcloud beta kms ekm-connections create EKM_CONNECTION \
    --location LOCATION \
    --service-directory-service SERVICE_DIRECTORY_SERVICE \
    --hostname HOSTNAME \
    --server-certificates-files SERVER_CERTIFICATE_FILES \
    --key-management-mode cloud-kms \
    --crypto-space-path CRYPTO_SPACE_PATH

替换以下内容:

  • EKM_CONNECTION:EKM 连接的名称。
  • LOCATION:您要创建 EKM 连接的 Cloud KMS 位置。与此连接关联的所有 Cloud KMS 密钥必须与该连接位于同一位置。
  • SERVICE_DIRECTORY_SERVICE:连接的 Service Directory 服务的资源 ID。
  • HOSTNAME:外部密钥管理器的主机名。
  • SERVER_CERTIFICATE_FILES:包含外部密钥管理器的 X.509 服务器证书的文件列表(以英文逗号分隔)。 证书必须采用 DER 格式。
  • CRYPTO_SPACE_PATH:您的 EKM 提供方提供的加密空间路径。

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

API

这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API

如需为协调外部密钥创建 EKM 连接,请运行以下命令:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ekmConnections" \
    --request "POST" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --header "x-goog-user-project: PROJECT_ID" \
    --data '{
      "name": "EKM_CONNECTION",
      "serviceResolvers": [
        {
          "serviceDirectoryService": "SERVICE_DIRECTORY_SERVICE",
          "hostname": "HOSTNAME",
          "serverCertificates": [
            {
              SERVER_CERTIFICATES
            }
          ]
        }
      ]
      "keyManagementMode": "CLOUD_KMS",
      "cryptoSpacePath": "CRYPTO_SPACE_PATH"
    }'

替换以下内容:

  • PROJECT_ID:您要在其中创建 EKM 连接的项目的 ID。
  • LOCATION:您要在其中创建 EKM 连接的 Cloud KMS。
  • EKM_CONNECTION:要用于 EKM 连接的名称。
  • SERVER_CERTIFICATES:代表叶服务器证书的 Certificate 对象列表(最多 10 个)。
  • HOSTNAME:外部密钥管理器的主机名。
  • CRYPTO_SPACE_PATH:您的 EKM 提供方提供的加密空间路径。

如需为手动管理的外部密钥创建 EKM 连接,请运行以下命令:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ekmConnections" \
    --request "POST" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --header "x-goog-user-project: PROJECT_ID" \
    --data '{
      "name": "EKM_CONNECTION",
      "serviceResolvers": [
        {
          "serviceDirectoryService": "SERVICE_DIRECTORY_SERVICE",
          "hostname": "HOSTNAME",
          "serverCertificates": [
            {
              SERVER_CERTIFICATES
            }
          ]
        }
      ]
    }'

替换以下内容:

  • PROJECT_ID:您要在其中创建 EKM 连接的项目的 ID。
  • LOCATION:您要在其中创建 EKM 连接的 Cloud KMS。
  • EKM_CONNECTION:要用于 EKM 连接的名称。
  • SERVER_CERTIFICATES:最多包含 10 个表示叶服务器证书的 Certificate 对象的列表。
  • HOSTNAME:外部密钥管理器的主机名。

如需了解详情,请参阅 EkmConnection.create API 文档

证书状态

为 EKM 连接上传证书后,您可以在 KMS 基础架构页面查看 EKM 连接的整体证书状态以及每个证书的状态。

EKM 连接在每个连接的证书状态列中显示总体状态。如果 EKM 连接的状态不是活跃,我们建议您更新 EKM 连接上的证书。

EKM 连接和各个证书都可能具有以下状态:

  • 有效:证书有效,并且即将到期。
  • 将在 30 天内过期:证书有效,但其到期日期在未来 30 天内。
  • 已过期:证书已过期且不再有效。建议您更新任何过期的证书。
  • 尚未生效:证书尚未生效。如果证书的开始日期是将来的日期,则可能会发生这种情况。

如果您的证书失效,请在 Google Cloud 控制台中更新您的 EKM 连接。

控制台

  1. 在 Google Cloud 控制台中,转到 KMS 基础架构页面。

    转到 KMS 基础架构

  2. 点击与需要更新的证书通过 VPC 连接的 EKM 的名称。

  3. 点击修改连接

  4. 点击添加证书,为您的外部密钥管理器上传一个或多个 X.509 服务器证书。证书必须采用 DER 格式。

  5. 移除过期的证书。将鼠标悬停在过期证书上,然后选择右侧的删除图标。

  6. 点击更新连接以通过 VPC 连接的 EKM 更新。

将 EKM 连接设为默认连接

您可以将 EKM 连接设置为给定项目和位置的默认连接。为项目和位置设置默认 EKM 连接后,除非选择其他 EKM 连接,否则在该位置的密钥环中创建的通过 VPC 密钥创建的新 Cloud EKM 将使用指定的 EKM 连接。

如需将某个 EKM 连接设置为其项目和位置的默认连接,请完成以下步骤:

控制台

  1. 在 Google Cloud 控制台中,转到 KMS 基础架构页面。

    转到 KMS 基础架构

  2. 点击要设为默认连接的 EKM 连接。

  3. 点击修改连接

  4. 默认连接下,选中将连接设置为 LOCATION 的默认连接复选框。

  5. 点击更新连接

gcloud CLI

gcloud beta kms ekm-config update
  --location=LOCATION
  --default-ekm-connection=projects/PROJECT_ID/locations/LOCATION/ekmConnections/DEFAULT_EKM_CONNECTION

替换以下内容:

  • LOCATION:要为其设置默认 EKM 连接的 Cloud KMS。
  • PROJECT_ID:要为其设置默认 EKM 连接的项目的名称。
  • DEFAULT_EKM_CONNECTION:您要设置为此位置默认值的 EKM 连接的名称。EKM 连接的位置必须与 LOCATION 中给定的位置一致。

API

如需为某个营业地点设置默认 EKM 连接,请使用 EkmConfig.patch 方法:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ekmConfig" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"defaultEkmConnection": "projects/PROJECT_ID/locations/LOCATION/ekmConnections/DEFAULT_EKM_CONNECTION"}'

替换以下内容:

  • PROJECT_ID:要为其设置默认 EKM 连接的项目的 ID。
  • LOCATION:要为其设置默认 EKM 连接的 Cloud KMS。
  • DEFAULT_EKM_CONNECTION:您要设置为此位置默认值的 EKM 连接的名称。EKM 连接的位置必须与 LOCATION 中给定的位置一致。

如果其他 EKM 连接已设置为此位置的默认连接,则所选 EKM 连接会取代它作为默认连接。对于给定的项目和位置,只能默认使用一个 EKM 连接。

后续步骤