1. 概览
Cloud KMS 是一项云托管式密钥管理服务,让您能够使用与本地部署时相同的方式为云服务管理加密密钥。它支持使用各种密钥类型和来源(包括针对硬件支持的密钥的 Cloud HSM)进行加密、解密、签名和验证。本教程介绍如何使用对称 Cloud KMS 密钥加密和解密数据。
您将学习
- 如何启用 Cloud KMS API
- 如何创建 Cloud KMS 密钥环
- 如何创建用于对称加密/解密的 Cloud KMS 加密密钥
- 如何轮替对称 Cloud KMS 加密密钥
2. 设置和要求
自定进度的环境设置
请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID
。
- 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。
运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分部分,其中会指导您如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
启动 Cloud Shell
在此 Codelab 中,您将使用 Cloud Shell,这是一个在 Google Cloud 上运行的免费虚拟化环境。在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 上运行,大大增强了网络性能和身份验证功能。除非另有说明,否则请从此 shell 运行所有命令。
3. 启用 Cloud KMS 服务
您必须先在项目中启用该服务,然后才能使用 Cloud KMS。每个项目只需执行此操作一次。如需启用 Cloud KMS 服务,请运行以下命令:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
启用过程最长可能需要一分钟的时间。该命令会在完成后报告成功。
4. 创建 KMS 密钥
创建 Cloud KMS 密钥环。在 Cloud KMS 中,密钥环是加密密钥的逻辑集合。密钥环包含有关密钥的元数据,例如密钥的位置。在 global
区域中创建一个名为 my-keyring
的密钥环:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
现在,在您刚刚创建的密钥环内创建一个名为 my-symmetric-key
且用途为 encryption
的加密密钥。
$ gcloud kms keys create "my-symmetric-key" \ --location "global" \ --keyring "my-keyring" \ --purpose "encryption"
5. 加密数据
创建一个包含要加密数据的文件,并使用 gcloud
命令行工具加密文件中的数据:
$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "my-symmetric-key" \ --plaintext-file ./data.txt \ --ciphertext-file ./data.txt.enc
加密的数据(也称为“密文”)保存在磁盘上的 data.txt.enc
中。如果您打开 data.txt.enc
文件,会发现其中有奇怪的不可打印字符。这是因为生成的数据采用的是二进制格式。
将密文存储在数据库中或作为 HTTP 请求的一部分进行传输时,您可能需要对数据进行编码。一种常见的编码机制是 base64。
Cloud KMS 不会存储您提供的任何明文。您需要将此密文保存在安全位置,因为需要它才能检索明文值。
6. 解密数据
使用 gcloud
命令行工具解密文件中的密文:
$ gcloud kms decrypt \ --location "global" \ --keyring "my-keyring" \ --key "my-symmetric-key" \ --plaintext-file - \ --ciphertext-file ./data.txt.enc
gcloud
命令行工具从文件中读取密文,并使用 Cloud KMS 对其进行解密。请注意,此示例将 --plaintext-file
参数指定为 -
。此命令指示 gcloud
将结果输出到终端。
控制台将输出 my-contents
,这与上述文件中的明文值相同。
7. 轮替密钥
在 Cloud KMS 中,加密密钥实际上是加密密钥版本的集合。您可以创建新的加密密钥版本以执行密钥轮替。Cloud KMS 还可以按计划自动轮替密钥。
如需手动轮替密钥,请创建一个新的加密密钥版本,并将其设置为主要版本:
$ gcloud kms keys versions create \ --location "global" \ --keyring "my-keyring" \ --key "my-symmetric-key" \ --primary
今后所有对数据进行加密的请求都将使用此新密钥。旧密钥仍可用于对之前使用这些密钥加密的数据进行解密。Cloud KMS 会根据提供的密文自动确定适当的解密密钥,您无需指定要用于解密的加密密钥版本。
为了防止使用 Cloud KMS 对使用旧加密密钥版本加密的密文值进行解密,您可以停用或销毁该加密密钥版本。停用是可逆转的操作,而销毁是永久性的。如需停用某个版本,请执行以下操作:
$ gcloud kms keys versions disable "1" \ --location "global" \ --keyring "my-keyring" \ --key "my-symmetric-key"
8. 恭喜!
您启用了 Cloud KMS API,创建了对称加密密钥,并加密和解密了数据!Cloud KMS 是一款功能强大的产品,加密/解密只是其功能的皮毛。
清理
如果已完成探索,请考虑删除您的项目。
- 转到 Cloud Platform Console
- 选择要关停的项目,然后点击“删除”顶部。此操作会安排删除项目。
了解详情
许可
此作品已获得 Creative Commons Attribution 2.0 通用许可授权。