本主题概述了 Cloud HSM,并介绍了如何在 Cloud Key Management Service 中创建和使用 HSM 保护的加密密钥。
什么是 Cloud HSM?
Cloud HSM 是一种云托管的硬件安全模块 (HSM) 服务,该服务允许您在 FIPS 140-2 Level 3 认证的 HSM 集群中托管加密密钥并执行加密操作。Google 会为您管理 HSM 集群,因此您无需担心创建集群、伸缩或修补事宜。由于 Cloud HSM 使用 Cloud KMS 作为其前端,因此您可以利用 Cloud KMS 提供的所有便利和功能。
创建密钥环
创建密钥时,您将其添加到给定 Google Cloud 位置中的密钥环。您可以创建新的密钥环,也可以使用现有的密钥环。在本主题中,您将创建一个新的密钥环,并向其添加新密钥。
在支持 Cloud HSM 的 Google Cloud 位置创建密钥环。
控制台
转到 Google Cloud 控制台中的密钥管理页面。
点击创建密钥环。
在密钥环名称中,输入密钥环的名称。
对于密钥环位置,选择一个位置,例如
"us-east1"
。点击创建。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
-
在您的环境中,运行
gcloud kms keyrings create
命令:gcloud kms keyrings create KEY_RING \ --location LOCATION
替换以下内容:
KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。
如需了解所有标志和可能值,请使用
--help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \ --request "POST" \ --header "authorization: Bearer TOKEN"
替换以下内容:
PROJECT_ID
:包含密钥环的项目的 ID。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。
如需了解详情,请参阅 KeyRing.create
API 文档。
创建密钥
按照以下步骤在指定的密钥环和位置上创建一个 Cloud HSM 密钥。
控制台
转到 Google Cloud 控制台中的密钥管理页面。
点击您要为其创建密钥的密钥环的名称。
点击创建密钥。
在您要创建哪种类型的密钥?中,选择生成的密钥。
在密钥名称字段中,输入密钥的名称。
点击保护级别下拉列表,然后选择 HSM。
点击用途下拉列表,然后选择对称加密/解密。
接受轮替周期和开始日期的默认值。
点击创建。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms keys create key \ --keyring key-ring \ --location location \ --purpose "encryption" \ --protection-level "hsm"
将 key 替换为新密钥的名称。将 key-ring 替换为密钥将要存放到的现有密钥环的名称。将 location 替换为密钥环的 Cloud KMS 位置。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
加密数据
现在您有了密钥,就可以使用该密钥对文本或二进制内容进行加密。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms encrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --plaintext-file FILE_TO_ENCRYPT \ --ciphertext-file ENCRYPTED_OUTPUT
替换以下内容:
KEY_NAME
:您要用于加密的密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:包含密钥环的 Cloud KMS 位置。FILE_TO_ENCRYPT
:您要加密的文件的路径。ENCRYPTED_OUTPUT
:您要保存加密输出的路径。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
使用 JSON 和 REST API 时,内容必须先进行 base64 编码,然后才能由 Cloud KMS 加密。
如需加密数据,请发出 POST
请求并提供相应的项目和密钥信息,并在请求正文的 plaintext
字段中指定要加密的 base64 编码文本。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
替换以下内容:
PROJECT_ID
:包含您要用于加密的密钥环和密钥的项目的 ID。LOCATION
:包含密钥环的 Cloud KMS 位置。KEY_RING
:包含您要用于加密的密钥的密钥环。KEY_NAME
:您要用于加密的密钥的名称。PLAINTEXT_TO_ENCRYPT
:您要加密的明文数据。您必须先对明文进行 base64 编码,然后才能调用encrypt
方法。
以下是包含 base64 编码数据的示例载荷:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
对密文进行解密
如需对已加密内容进行解密,您必须使用加密该内容时使用的相同密钥。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms decrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file FILE_TO_DECRYPT \ --plaintext-file DECRYPTED_OUTPUT
替换以下内容:
KEY_NAME
:您要用于解密的密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:包含密钥环的 Cloud KMS 位置。FILE_TO_DECRYPT
:您要解密的文件的路径。DECRYPTED_OUTPUT
:您要保存解密输出的路径。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
从 Cloud KMS 中以 JSON 格式返回的解密后文本使用 base64 进行编码。
如需对加密数据进行解密,请发出 POST
请求并提供相应的项目和密钥信息,并在请求正文的 ciphertext
字段中指定要解密的加密文本(也称为ciphertext)。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
替换以下内容:
PROJECT_ID
:包含您要用于解密的密钥环和密钥的项目的 ID。LOCATION
:包含密钥环的 Cloud KMS 位置。KEY_RING
:包含您要用于解密的密钥的密钥环。KEY_NAME
:您要用于解密的密钥的名称。ENCRYPTED_DATA
:您要解密的加密数据。
以下是包含 base64 编码数据的示例载荷:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
后续步骤
本主题中的加密示例使用了保护级别为 HSM 的对称密钥。如需使用保护级别为 HSM 的非对称密钥进行加密,请按照使用非对称密钥加密和解密数据中的步骤进行操作,并做出以下更改:
- 在一个支持 Cloud HSM 的区域中创建密钥环。
- 创建保护级别为 HSM 的密钥。
如需为椭圆曲线签名或 RSA 签名使用保护级别为 HSM 的非对称密钥,请按照创建和验证签名中的步骤进行操作,并做出以下更改:
- 在一个支持 Cloud HSM 的区域中创建密钥环。
- 创建保护级别为 HSM 的密钥。
开始学习使用 API。
查看 Cloud KMS API 参考。
阅读操作指南,以开始创建、轮替和设置对密钥的权限。
查看概念,以更好地了解对象层次结构、密钥状态和密钥轮替。
了解 Cloud KMS 中的日志记录。请注意,日志记录基于操作,适用于保护级别为 HSM 和软件的密钥。
如需详细了解 Cloud HSM 如何保护您的数据,请参阅 Cloud HSM 架构白皮书。
已知限制
对于用户提供的明文和密文,消息大小限制为 8 KiB(作为对照,Cloud KMS 软件密钥限制是 64 KiB),包括经过身份验证的额外数据。
Cloud HSM 可能在某些多区域或双区域位置不可用。如需了解详情,请参阅支持 Cloud HSM 的区域。
如果您在其他 Google Cloud 服务中将 Cloud HSM 密钥与客户管理的加密密钥 (CMEK) 集成搭配使用,则您在服务中使用的位置必须与 Cloud HSM 密钥的位置完全匹配。这适用于区域、双区域和多区域位置。
如需详细了解 CMEK 集成,请参阅静态加密的相关部分。
与使用 Cloud KMS 软件密钥相比,对存储在 Cloud HSM 中的非对称密钥执行的操作目前可能有明显更长的延迟。
裸金属机架 HSM
Google Cloud 还提供其他 HSM 选项,例如单租户。裸金属机架 HSM 可供客户在 Google 提供的空间中托管自己的 HSM。如需了解详情,请咨询您的客户代表。