使用 Cloud KMS 创建加密密钥

本快速入门介绍了如何在您拥有的项目中通过 Cloud Key Management Service 创建和使用加密密钥。这些说明使用Google Cloud 控制台在 Cloud KMS 中创建密钥环、密钥和密钥版本。如需了解使用其他方法的说明,请参阅 Autokey 概览创建密钥环创建密钥

本快速入门使用命令行将请求发送到 Cloud KMS API。如需了解使用客户端库向 Cloud KMS API 发送请求的编程示例,请参阅加密和解密

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 安装 Google Cloud CLI。

  3. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  6. 验证是否已为您的 Google Cloud 项目启用结算功能

  7. 启用 Cloud KMS API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    gcloud services enable cloudkms.googleapis.com
  8. 向您的用户账号授予角色。对以下每个 IAM 角色运行以下命令一次: roles/cloudkms.admin, roles/cloudkms.cryptoKeyEncrypterDecrypter

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • USER_IDENTIFIER:您的用户 账号的标识符。例如,myemail@example.com
    • ROLE:您授予用户账号的 IAM 角色。
  9. 安装 Google Cloud CLI。

  10. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  11. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  12. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  13. 验证是否已为您的 Google Cloud 项目启用结算功能

  14. 启用 Cloud KMS API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    gcloud services enable cloudkms.googleapis.com
  15. 向您的用户账号授予角色。对以下每个 IAM 角色运行以下命令一次: roles/cloudkms.admin, roles/cloudkms.cryptoKeyEncrypterDecrypter

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • USER_IDENTIFIER:您的用户 账号的标识符。例如,myemail@example.com
    • ROLE:您授予用户账号的 IAM 角色。

密钥环和密钥

要对内容进行加密和解密,您需要一个 Cloud KMS 密钥,该密钥是密钥环的一部分。

创建一个名为 test 的密钥环和一个名为 quickstart 的密钥。如需了解有关这些对象及其相互关系的更多信息,请参阅对象层次结构概览

gcloud kms keyrings create "test" \
    --location "global"
gcloud kms keys create "quickstart" \
    --location "global" \
    --keyring "test" \
    --purpose "encryption"

您可以使用 list 选项来查看您刚创建的密钥的名称和元数据。

gcloud kms keys list \
    --location "global" \
    --keyring "test"

您应该会看到:

NAME                                                                      PURPOSE          PRIMARY_STATE
projects/PROJECT_ID/locations/global/keyRings/test/cryptoKeys/quickstart  ENCRYPT_DECRYPT  ENABLED

加密数据

现在您有了密钥,就可以使用该密钥对文本或二进制内容进行加密。

将“some text to be encrypted”存储在名为“mysecret.txt”的文件中。

echo -n "Some text to be encrypted" > mysecret.txt

要使用 gcloud kms encrypt 加密数据,请提供密钥信息,指定要加密的纯文本文件的名称,并指定将要包含加密后的内容的文件名称:

gcloud kms encrypt \
    --location "global" \
    --keyring "test" \
    --key "quickstart" \
    --plaintext-file ./mysecret.txt \
    --ciphertext-file ./mysecret.txt.encrypted

encrypt 方法将会把加密后的内容保存在 --ciphertext-file 标志指定的文件中。

对密文进行解密

要使用 gcloud kms decrypt 解密数据,请提供密钥信息,指定要解密的加密文件(密文文件)的名称,并指定将包含解密后的内容的文件名称:

gcloud kms decrypt \
    --location "global" \
    --keyring "test" \
    --key "quickstart" \
    --ciphertext-file ./mysecret.txt.encrypted \
    --plaintext-file ./mysecret.txt.decrypted

decrypt 方法将会把解密后的内容保存在 --plaintext-file 标志指定的文件中。

要对已加密内容进行解密,您必须使用加密该内容时使用的相同密钥。

清理

为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。

列出您的密钥可用的版本:

gcloud kms keys versions list \
    --location "global" \
    --keyring "test" \
    --key "quickstart"

如需销毁版本,请运行以下命令,其中 1 是您要销毁的密钥版本的编号:

gcloud kms keys versions destroy 1 \
    --location "global" \
    --keyring "test" \
    --key "quickstart"

后续步骤