使用Cloud KMS加密和解密数据

Cloud KMS是一种云托管的密钥管理服务,可让您以与本地处理相同的方式管理云服务的加密密钥。它包括使用多种密钥类型和来源(包括用于硬件支持的密钥的Cloud HSM)支持加密,解密,签名和验证。本教程教您如何使用对称Cloud KMS密钥加密和解密数据。

您将学习

  • 如何启用Cloud KMS API
  • 如何创建Cloud KMS钥匙圈
  • 如何创建用于对称加密/解密的Cloud KMS加密密钥
  • 如何旋转对称的Cloud KMS加密密钥

自定进度的环境设置

  1. 登录到Cloud Console并创建一个新项目或重用现有项目。 (如果您还没有Gmail或G Suite帐户,则必须创建一个。)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKmMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30HwXtZ8

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQQQkuzGp4R01

8-tA_Lheyo8Ss​​cAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCANASvVN6

请记住项目ID,这是所有Google Cloud项目中的唯一名称(上面的名称已被使用,对您不起作用,对不起!)。在本代码实验室的后面部分将其称为PROJECT_ID

  1. 接下来,您需要在Cloud Console中启用计费功能才能使用Google Cloud资源。

在此代码实验室中运行,花的钱不多,如果有的话。确保遵循“清理”部分中的所有说明,该建议为您提供了如何关闭资源的建议,这样您就不会在本教程之外产生账单。 Google Cloud的新用户有资格获得$ 300USD的免费试用计划。

启动Cloud Shell

在此代码实验室中,您将使用Cloud Shell ,这是在Google Cloud上运行的免费虚拟化环境。在GCP控制台中,单击右上方工具栏上的Cloud Shell图标:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyyfulful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKKNywBZL111

供应和连接到环境只需要花费一些时间。完成后,您应该会看到以下内容:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViu

该虚拟机装有您需要的所有开发工具。它提供了一个持久的5GB主目录,并在Google Cloud上运行,从而大大提高了网络性能和身份验证。除非另有说明,否则请从此Shell运行所有命令。

在使用Cloud KMS之前,必须首先在项目中启用该服务。每个项目只需执行一次。要启用Cloud KMS服务,请运行以下命令:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

最多可能需要一分钟才能启用。该命令完成后将报告成功。

创建一个Cloud KMS钥匙圈。在Cloud KMS中,密钥环是加密密钥的逻辑集合。密钥环包含有关密钥的元数据,例如它们的位置。在global区域中创建一个名为my-keyring

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

现在创建一个名为my-symmetric-keyencryption my-symmetric-key并在您刚刚创建的密钥环内进行目的encryption

$ gcloud kms keys create "my-symmetric-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

创建一个包含要加密的数据的文件,并使用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不存储您提供的任何纯文本。您需要将此密文保存在安全的位置,因为检索明文值将需要使用该密文。

使用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 ,与上面文件中的明文值相同。

在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"

您启用了Cloud KMS API,创建了对称加密密钥,以及加密和解密的数据! Cloud KMS是功能强大的产品,加密/解密只是其功能的表面。

清理

如果您已完成探索,请考虑删除您的项目。

  • 转到云平台控制台
  • 选择要关闭的项目,然后单击顶部的“删除”。这将计划删除项目。

学到更多

执照

这项工作已获得知识共享署名2.0通用许可的许可。