本主题概述了 Cloud HSM,并介绍了如何在 Cloud Key Management Service 中创建和使用 HSM 保护的加密密钥。
什么是 Cloud HSM?
Cloud HSM 是一项云托管的硬件安全模块 (HSM) 服务, 可让您在一个环境中托管加密密钥并执行加密操作 通过 FIPS 140-2 3 级认证的 HSM 集群。Google HSM 集群为您管理,因此您无需担心集群问题, 伸缩或修补由于 Cloud HSM 以 您可以利用自己在前端开发的所有便利和功能 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 \ --keyring key-ring \ --location location \ --plaintext-file file-with-data-to-encrypt \ --ciphertext-file file-to-store-encrypted-data
将 key 替换为用于加密的密钥的名称。将 key-ring 替换为密钥所在的密钥环的名称。将 location 替换为密钥环的 Cloud KMS 位置。将 file-with-data-to-encrypt 和 file-to-store-encrypted-data 替换为本地文件路径,以读取明文数据并保存加密输出。
如需了解所有标志和可能值,请使用 --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 时,内容必须先进行 base-64 编码,然后才能由 Cloud KMS 加密。
要加密数据,请发出 POST
请求并提供相应的项目和密钥信息,并在请求正文的 plaintext
字段中指定要加密的 base64 编码文本。
curl "https://cloudkms.googleapis.com/v1/projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name:encrypt" \ --request "POST" \ --header "authorization: Bearer token" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"base64-encoded-input\"}"
以下是包含 base64 编码数据的示例载荷:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
对密文进行解密
如需对已加密内容进行解密,您必须使用加密该内容时使用的相同密钥。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms decrypt \ --key key \ --keyring key-ring \ --location location \ --ciphertext-file file-path-with-encrypted-data \ --plaintext-file file-path-to-store-plaintext
将 key 替换为要用于解密的密钥的名称。将 key-ring 替换为密钥将要存放到的密钥环的名称。将 location 替换为密钥环的 Cloud KMS 位置。将 file-path-with-encrypted-data 和 file-path-to-store-plaintext 替换为本地文件路径,以读取加密数据并保存解密输出。
如需了解所有标志和可能值,请使用 --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
字段中指定要解密的加密(密文)文本。
curl "https://cloudkms.googleapis.com/v1/projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name:decrypt" \ --request "POST" \ --header "authorization: Bearer token" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"encrypted-content\"}"
以下是包含 base64 编码数据的示例载荷:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
后续步骤
本主题中的加密示例使用了保护级别为 HSM 的对称密钥。如需使用保护级别为 HSM 的非对称密钥进行加密,请按照使用非对称密钥加密和解密数据中的步骤进行操作,并做出以下更改:
- 在一个支持 Cloud HSM 的区域中创建密钥环。
- 创建保护级别为 HSM 的密钥。
为椭圆使用保护级别为 HSM 的非对称密钥 曲线签名或 RSA 签名,请按照 创建并验证 进行以下更改:
- 在一个支持 Cloud HSM 的区域中创建密钥环。
- 创建保护级别为 HSM 的密钥。
开始学习使用 API。
查看 Cloud KMS API 参考。
阅读方法指南,以开始创建、轮替和设置 密钥的权限。
阅读概念,更好地了解对象层次结构、键状态和 密钥轮替
了解 Cloud KMS 中的日志记录。请注意,日志记录是 基于操作,适用于同时使用 HSM 和软件的密钥 保护级别。
如需详细了解 Cloud HSM 如何保护您的数据,请参阅 Cloud HSM 架构白皮书。
已知限制
对于用户提供的明文和密文,消息大小限制为 8 KiB(作为对照,Cloud KMS 软件密钥限制是 64 KiB),包括经过身份验证的额外数据。
Cloud HSM 可能在某些多区域或双区域位置不可用。如需了解详情,请参阅支持 Cloud HSM 的区域。
如果您将 Cloud HSM 密钥与 CMEK(客户管理的加密密钥)搭配使用 (CMEK) 集成, 必须与 Cloud HSM 的位置相匹配 键。这适用于区域、双区域和多区域位置。
如需详细了解 CMEK 集成,请参阅静态加密的相关部分。
目前对存储在 Cloud HSM 中的非对称密钥的密钥操作 与使用新技术相比, Cloud KMS 软件密钥。
裸金属机架 HSM
Google Cloud 还提供其他 HSM 选项,例如单租户。裸金属机架 HSM 可供客户托管自己的 HSM Google 提供的空间中。请咨询您的客户代表 更多信息。