创建 EKM 连接

本页面介绍了如何设置 Cloud External Key Manager (Cloud EKM),以便连接到 通过 虚拟私有云 (VPC) 网络

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

术语

  • EKM 连接

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

  • VPC 项目

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

  • 关键项目

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

  • 加密空间

    外部密钥管理合作伙伴中用于存储您的资源的容器。你的加密货币空间 由唯一的加密空间路径标识。Crypto Space 路径的格式因外部密钥管理合作伙伴而异,例如 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 令牌 请求。要验证令牌,需要检索 OAuth2 公钥 (来自 www.googleapis.com 域名)。如果外部密钥管理器在 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。

设置加密空间

如果您使用 Cloud EKM 作为合作伙伴管理的 EKM 安排的一部分,您的合作伙伴会在配置过程中为您完成这些步骤。

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

  • 为 Cloud KMS 中 EKM。

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

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

其中每个步骤的具体过程取决于您的 EKM。如需了解详情,请参阅您的 EKM 提供商的文档。

创建 Service Directory 服务端点

创建和配置 Service Directory 服务端点 在指向专用 IP 地址的 VPC 项目中, 外部密钥管理器的端口如果您在多个 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. 授予 servicedirectory.viewerservicedirectory.pscAuthorizedService(在您的 VPC 项目 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. 主机名字段中,添加外部密钥管理器的主机名。

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

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

  9. 如果您为 EKM 管理模式选择了 Cloud KMS,则 加密空间路径字段,然后输入您的 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 连接。
  • LOCATION:要在其中创建 EKM 连接。
  • EKM_CONNECTION:要为 EKM 连接使用的名称。
  • SERVER_CERTIFICATES:最多 10 个 Certificate 对象的列表,表示叶服务器证书。
  • 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 连接。
  • LOCATION:要在其中创建 EKM 连接。
  • EKM_CONNECTION:要用于 EKM 连接的名称。
  • SERVER_CERTIFICATES:最多包含 10 个 Certificate 的列表 对象 代表叶服务器证书
  • HOSTNAME:外部密钥管理器的主机名。

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

证书状态

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

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

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

  • 有效:证书有效且未接近到期日期。
  • 将在 30 天内过期:证书有效,但有有效期 日期。
  • 已过期:证书已过期且不再有效。我们建议您更新所有已过期的证书。
  • 尚未生效:证书未生效。如果证书的生效日期是未来的日期,就可能会出现这种情况。

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

控制台

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

    转到 KMS 基础架构

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

  3. 点击修改连接

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

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

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

将 EKM 连接设为默认连接

您可以将 EKM 连接设置为给定项目的默认连接 和位置。为项目和位置设置默认 EKM 连接后, 在该位置的密钥环中创建的新 Cloud EKM by VPC 密钥 使用指定的 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:要为其设置的 Cloud KMS 默认 EKM 连接。
  • 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:您要设置的项目的 ID 默认 EKM 连接。
  • LOCATION:要为其设置的 Cloud KMS 默认 EKM 连接。
  • DEFAULT_EKM_CONNECTION:EKM 的名称 。 EKM 连接的位置必须与 LOCATION 中指定的位置一致。

如果已将其他 EKM 连接设为此位置的默认连接,则所选 EKM 连接会取代它成为默认连接。在一个 EKM 连接中 是给定项目和位置的默认值。

后续步骤