本页介绍了如何设置 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 项目相同,但这不是必需的。
加密空间
外部密钥管理合作伙伴中用于存放资源的容器。您的加密空间由唯一的加密空间路径标识。Crypto Space 路径的格式因外部密钥管理合作伙伴而异,例如
v0/cryptospaces/YOUR_UNIQUE_PATH
。
准备工作
完成以下步骤后,您就可以开始使用 Cloud EKM 密钥来保护您的数据了。
创建新项目
在 Google Cloud 控制台中,前往“管理资源”页面。
创建新的 Google Cloud 项目或选择现有项目。
-
Make sure that billing is enabled for your Google Cloud project.
您可以详细了解 Cloud EKM 价格。
启用 Cloud KMS
为项目启用 Cloud Key Management Service API。
请记下项目的 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:
启用专用 Google 访问通道
外部密钥管理器必须验证每个请求中包含的 OIDC 令牌。为了验证令牌,它需要从
www.googleapis.com
域名检索 OAuth2 公钥。如果外部密钥管理器在 Google Cloud 中运行且无法通过互联网访问(例如,没有外部 IP 地址或被防火墙屏蔽的虚拟机),请按照配置专用 Google 访问通道中的说明操作。IP 地址范围
35.199.192.0/19
的防火墙配置来自 Cloud EKM 的请求将来自此范围。为外部密钥管理器正在监听的端口创建允许 TCP 的入站和出站防火墙规则。
设置混合连接
如果外部密钥管理器在本地运行,请使用混合连接解决方案将 VPC 与本地网络连接起来。设置好连接后,请按以下额外步骤操作:
启用专用 Google 访问通道
外部密钥管理器必须验证每个请求中包含的 OIDC 令牌。为了验证令牌,它需要从
www.googleapis.com
域名检索 OAuth2 公钥。如果外部密钥管理器在本地运行且无法通过互联网访问,请按照为本地主机配置专用 Google 访问通道中的说明操作。IP 地址范围
35.199.192.0/19
的防火墙配置来自 Cloud EKM 的请求将来自此范围。配置本地网络防火墙或类似设备,以允许外部密钥管理器正在监听的端口上的 TCP 流量。
确保您的 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 管理的资源创建一个 Crypto Space。
向您的 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。
确保项目存在 Cloud EKM 服务账号。
gcloud CLI
gcloud beta services identity create \ --service=cloudkms.googleapis.com \ --project=KEY_PROJECT_ID
将 VPC 项目中的
servicedirectory.viewer
和servicedirectory.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 连接。
控制台
在 Google Cloud 控制台中,前往 KMS 基础架构页面。
点击
Create connection(创建连接)。在连接名称中,输入连接的名称。
在区域中,选择 EKM 连接的位置。与此连接关联的所有 Cloud KMS 密钥都必须与该连接位于同一位置。
对于 Service resource ID (self_link) 字段,请输入在创建 Service Directory 服务端点部分创建的 Service Directory 服务的值。服务目录服务必须与连接位于同一位置。
在主机名字段中,添加外部密钥管理器的主机名。
在证书中,点击添加证书,为您的外部密钥管理器上传一个或多个 X.509 服务器证书。证书必须采用 DER 格式。
对于 EKM 管理模式,选择 Manual(手动)以将 EKM 连接用于手动管理的外部密钥,或选择 Cloud KMS(Cloud KMS)以将 EKM 连接用于协调的外部密钥。
如果您为 EKM 管理模式选择了 Cloud KMS,请在 Crypto Space 路径字段中输入 EKM 提供的 Crypto Space 路径。
可选。如需将 EKM 连接设置为此项目和位置的默认连接,请选中将连接设为默认连接复选框。如果其他 EKM 连接目前已设置为此项目和位置的默认连接,则此 EKM 连接会替换现有的默认连接。
点击创建。
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
:最多 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 连接的项目的 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 连接。
控制台
在 Google Cloud 控制台中,前往 KMS 基础架构页面。
点击包含需要更新的证书的通过 VPC 连接的 EKM 的名称。
点击修改关联。
点击添加证书,为您的外部密钥管理器上传一个或多个 X.509 服务器证书。证书必须采用 DER 格式。
移除过期的证书。将光标悬停在已过期的证书上,然后选择右侧的删除图标。
点击更新连接,通过 VPC 连接更新 EKM。
将 EKM 连接设为默认连接
您可以将 EKM 连接设置为给定项目和位置的默认连接。为项目和位置设置默认 EKM 连接后,在该位置的密钥环中创建的新 Cloud EKM by VPC 密钥将使用所指明的 EKM 连接,除非选择了其他 EKM 连接。
如需将 EKM 连接设置为其项目和位置的默认连接,请完成以下步骤:
控制台
在 Google Cloud 控制台中,前往 KMS 基础架构页面。
点击要设为默认的 EKM 连接。
点击修改关联。
在默认连接下,选中将连接设为“LOCATION”的默认连接复选框。
点击更新连接。
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 连接。