arrow_back

Cloud KMS 使用入门

登录 加入
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

Cloud KMS 使用入门

实验 45 分钟 universal_currency_alt 1 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

GSP079

Google Cloud 自定进度实验

概览

在本实验中,您将学习如何使用 Google Cloud 安全和隐私 API 的一些高级功能,包括:

  • 设置安全的 Cloud Storage 存储桶
  • 使用密钥管理服务管理密钥和已加密数据
  • 查看 Cloud Storage 审核日志

您将使用安然语料库 (Enron Corpus) 中的节选数据,对其进行加密,并将其加载到 Cloud Storage 中。

学习内容

  • 如何使用 Cloud Key Management Service (KMS) 加密数据并管理加密密钥。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。我们会为您提供新的临时凭据,让您可以在实验规定的时间内用来登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:如果您已有自己的个人 Google Cloud 账号或项目,请不要在此实验中使用,以避免您的账号产生额外的费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:

    • 打开 Google Cloud 控制台按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示登录页面。

    提示:请将这些标签页安排在不同的窗口中,并将它们并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在实验详细信息面板中找到用户名

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在实验详细信息面板中找到密码

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本次实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于该账号为临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需查看列有 Google Cloud 产品和服务的菜单,请点击左上角的导航菜单导航菜单图标

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

如果您连接成功,即表示您已通过身份验证,且当前项目会被设为您的 PROJECT_ID 环境变量所指的项目。输出内容中有一行说明了此会话的 PROJECT_ID

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

  2. 现在,输出的内容应如下所示:

输出:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出

[core] project = <project_ID>

输出示例

[core] project = qwiklabs-gcp-44776a13dea667a6 Note: For full documentation of gcloud, in Google Cloud, refer to the gcloud CLI overview guide.

任务 1. 创建 Cloud Storage 存储桶

要存储本实验的数据,您需要创建自己的 Cloud Storage 存储桶。

  1. 为您的 Cloud Storage 存储桶选择一个名称,例如 -enron_corpus。要详细了解如何为存储桶命名,请参阅 Cloud Storage 存储桶命名准则。在 Cloud Shell 中运行以下命令,以便将一个变量设置为存储桶名称:
BUCKET_NAME="{{{ project_0.project_id }}}-enron_corpus"
  1. 现在运行以下命令,以创建存储桶:
gsutil mb gs://${BUCKET_NAME}

运行此命令也应有助于验证 gsutil 命令行客户端设置是否正确、身份验证是否正常、是否拥有正在操作的云项目的写入权限。

  1. 创建存储桶后,继续下一步,即下载安然语料库。

点击检查我的进度以验证是否完成了以下目标:

创建 Cloud Storage 存储桶。

任务 2. 查看数据

安然语料库是一个大型数据库,包含安然公司 (Enron Corporation) 158 名员工生成的 60 多万封电子邮件。这些数据已被复制到 Cloud Storage 存储桶 gs://enron_emails/

  1. 运行以下命令,在本地下载一份源文件,以便查看其具体内容:
gsutil cp gs://enron_emails/allen-p/inbox/1. .
  1. 现在,tail 下载后的文件,查证电子邮件文本是否存在:
tail 1.

您应该会看到下面的输出内容:

Attached is the Delta position for 1/18, 1/31, 6/20, 7/16, 9/24 << File: west_delta_pos.xls >> Let me know if you have any questions.

这时应该会显示一份纯文本邮件文件的内容。您要找到两类文件:纯文本邮件文件和图片文件。如果您有兴趣,可以使用同样的方法查看其他文件的内容。

任务 3. 启用 Cloud KMS

Cloud KMS 是 Google Cloud 上的一项加密密钥管理服务。使用 KMS 之前,您需要在项目中对其进行启用。在本实验中,为您预配的 KMS 应已启用。您可以使用 gcloud CLI 命令之一来确保这一点。

  • 在 Cloud Shell 会话中运行以下命令:
gcloud services enable cloudkms.googleapis.com 注意:也可以使用 Cloud 控制台界面在您的项目中启用 KMS 和其他服务。

您应该不会收到任何输出内容。现在,您的项目中已启用 Cloud KMS!

任务 4. 创建密钥环和 Cryptokey

要加密数据,您需要创建一个密钥环和一个 CryptoKey。密钥环用于将密钥分组。密钥可以按环境(例如测试预演生产环境)或其他概念进行分组。在本实验中,您的密钥环称为 test,CryptoKey 称为 qwiklab

  1. 在 Cloud Shell 中运行以下命令,以设置环境变量:
KEYRING_NAME=test CRYPTOKEY_NAME=qwiklab
  1. 执行 gcloud 命令,创建密钥环。在本实验中,您将使用全局位置,但也可以设置为特定区域:
gcloud kms keyrings create $KEYRING_NAME --location global
  1. 接下来,使用新密钥环来创建一个名为 qwiklab 的 CryptoKey:
gcloud kms keys create $CRYPTOKEY_NAME --location global \ --keyring $KEYRING_NAME \ --purpose encryption 注意:在 Cloud KMS 中,CryptoKey 和密钥环不可删除!

您应该不会看到任何输出内容。这样您就创建了密钥环和 CryptoKey!

  1. 前往导航菜单 > 安全性 > 密钥管理,通过控制台打开密钥管理

通过密钥管理网页界面,您可以查看和管理自己的 CryptoKey 和密钥环。您将在日后管理权限时使用此界面。

点击检查我的进度以验证是否完成了以下目标:

创建密钥环和 CryptoKey。

任务 5. 加密您的数据

接下来,尝试加密一些数据!

  1. 将您之前查看的电子邮件内容,通过运行以下命令进行 base64 编码:
PLAINTEXT=$(cat 1. | base64 -w0) 注意:利用 Base64 编码,二进制数据可作为纯文本发送到 API。此命令适用于图片、视频或任何其他类型的二进制数据。

使用加密端点,您可以将要加密的 base64 编码文本发送到指定密钥。

  1. 运行以下命令:
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:encrypt" \ -d "{\"plaintext\":\"$PLAINTEXT\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)"\ -H "Content-Type: application/json" 注意:即便使用同样的文本和密钥,encrypt 操作每次也都会返回一个不同的结果。

响应将是一个 JSON 载荷,其中包含属性 ciphertext 中的已加密文本。

  1. 数据加密后,您可以将其保存到文件中并上传到 Cloud Storage 存储桶。要从 JSON 响应中抓取已加密文本并将其保存到文件中,可使用命令行实用程序 jq.上一次调用的响应可以传输到 jq,而 jq 可以解析 1.encrypted 文件的 ciphertext 属性。运行以下命令:
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:encrypt" \ -d "{\"plaintext\":\"$PLAINTEXT\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)"\ -H "Content-Type:application/json" \ | jq .ciphertext -r > 1.encrypted
  1. 要验证已加密数据能否解密,调用 decrypt 端点来验证解密后的文本与原始电子邮件是否一致。已加密数据中包含用于对其进行加密的 CryptoKey 版本的信息,因此不会向解密端点提供具体版本。运行以下命令:
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:decrypt" \ -d "{\"ciphertext\":\"$(cat 1.encrypted)\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)"\ -H "Content-Type:application/json" \ | jq .plaintext -r | base64 -d 注意:解密通常在应用层执行。您可以阅读 Cloud KMS 快速入门,了解有关如何使用多种编程语言来加密和解密数据的演示。
  1. 在验证文本已成功加密后,可以将已加密文件上传到 Cloud Storage 存储桶。
gsutil cp 1.encrypted gs://${BUCKET_NAME}

点击检查我的进度以验证是否完成了以下目标:

使用 Cloud KMS 密钥加密数据并将其上传到存储桶。

任务 6. 配置 IAM 权限

在 KMS 中需要重点关注两大权限。其一是允许用户或服务账号管理 KMS 资源的权限,另一个是允许用户或服务账号使用密钥加密和解密数据的权限。

管理密钥的权限是 cloudkms.admin,拥有此权限的任何人都可以创建密钥环,还可以创建、修改、停用和销毁 CryptoKey。加密和解密的权限是 cloudkms.cryptoKeyEncrypterDecrypter,它用于调用加密和解密 API 端点。

在本练习中,您将使用当前授权用户来分配 IAM 权限。

  1. 要获取当前授权用户,运行以下命令:
USER_EMAIL=$(gcloud auth list --limit=1 2>/dev/null | grep '@' | awk '{print $2}')
  1. 接下来,为此用户分配管理 KMS 资源的权限。运行以下 gcloud 命令,分配 IAM 权限以管理刚刚创建的密钥环:
gcloud kms keyrings add-iam-policy-binding $KEYRING_NAME \ --location global \ --member user:$USER_EMAIL \ --role roles/cloudkms.admin

由于 CryptoKey 属于密钥环,而密钥环属于项目,因此,在该层次结构中的上一级拥有特定角色或权限的用户会继承对子资源的相同权限。例如,拥有一个项目 Owner 角色的用户也是该项目中所有密钥环和 CryptoKey 的 Owner。同样,如果用户被授予针对密钥环的 cloudkms.admin 角色,则其对该密钥环中的 CryptoKey 也拥有相关权限。

如果没有 cloudkms.cryptoKeyEncrypterDecrypter 权限,授权用户将无法使用密钥来加密和解密数据。

  1. 运行以下 gcloud 命令,为所创建的密钥环下的任何 CryptoKey 分配 IAM 权限,从而加密和解密数据:
gcloud kms keyrings add-iam-policy-binding $KEYRING_NAME \ --location global \ --member user:$USER_EMAIL \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter

现在,您可以在密钥管理的“加密密钥”部分查看已分配权限。

  1. 勾选密钥环名称 (test) 旁边的复选框,然后点击右侧信息面板中的主账号

这将打开一个菜单,在其中可以看到您刚刚添加的密钥环的账号和权限。

任务 7. 使用命令行备份数据

了解如何加密单个文件并获得相关权限之后,您可以运行一个脚本来备份一个目录中的所有文件。在本例中,复制 allen-p 的所有电子邮件,对其进行加密,然后将其上传到 Cloud Storage 存储桶。

  1. 首先,将 allen-p 的所有电子邮件复制到当前工作目录中:
gsutil -m cp -r gs://enron_emails/allen-p .
  1. 现在,请将以下代码复制并粘贴到 Cloud Shell 中,以便加密 allen-p 目录中的所有文件并将其备份到 Cloud Storage 存储桶:
MYDIR=allen-p FILES=$(find $MYDIR -type f -not -name "*.encrypted") for file in $FILES; do PLAINTEXT=$(cat $file | base64 -w0) curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:encrypt" \ -d "{\"plaintext\":\"$PLAINTEXT\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json" \ | jq .ciphertext -r > $file.encrypted done gsutil -m cp allen-p/inbox/*.encrypted gs://${BUCKET_NAME}/allen-p/inbox

该脚本会轮询给定目录中的所有文件,使用 KMS API 对其进行加密,然后将其上传到 Cloud Storage。

点击检查我的进度以验证是否完成了以下目标:

使用 KMS API 对多个文件进行加密,并将其上传到 Cloud Storage。

脚本执行完成后,当您在控制台的左侧菜单中点击 Storage 时,能查看到已加密的文件。

  1. 要找到文件,前往导航菜单 > Cloud Storage > 存储桶 > YOUR_BUCKET > allen-p > 收件箱。您应会看到类似下图的界面:

存储桶内容

注意:Cloud Storage 支持服务器端加密,而这种加密方法支持数据的密钥轮替,因而是在 Cloud Storage 中加密数据的推荐方法。以上示例仅用于演示目的。

任务 8. 查看 Cloud Audit Logs

Google Cloud Audit Logging 包括两个日志流:管理员活动和数据访问权限,它们是 Google Cloud 服务生成的,可帮助您回答“哪些用户何时在何处对您的 Google Cloud 项目执行过哪些操作”的问题。

  • 要查看 KMS 中任何资源的活动,请前往导航菜单 > Cloud 概览 > 活动标签页。此操作会将您转到 Cloud 活动界面,然后点击查看 Log Explorer,选择 Cloud KMS 密钥环作为资源类型,您应该会看到对密钥环进行的创建和所有修改操作。

现在,您已经使用 KMS 和 Cloud Storage 加密和上传了数据!

本实验的内容

  • 使用 IAM 管理 KMS 权限。
  • 使用 KMS 加密数据。
  • 使用 Cloud Storage 存储已加密数据。
  • 使用 Cloud Audit Logs 查看 CryptoKey 和密钥环的所有活动。

任务 9. 知识测验

测试一下您对 Cloud KMS 的了解程度吧。

恭喜!

您学习了如何使用 Cloud Key Management Service (KMS) 加密数据并管理加密密钥。

后续步骤/了解详情

上次更新手册的时间:2024 年 4 月 15 日

上次测试实验的时间:2023 年 8 月 31 日

版权所有 2024 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您