GSP079
概览
在本实验中,您将学习如何使用 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 控制台
点击开始实验 按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
“打开 Google Cloud 控制台”按钮
剩余时间
进行该实验时必须使用的临时凭据
帮助您逐步完成本实验所需的其他信息(如果需要)
点击打开 Google Cloud 控制台 (如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接 )。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示 :将这些标签页安排在不同的窗口中,并排显示。
注意 :如果您看见选择账号 对话框,请点击使用其他账号 。
如有必要,请复制下方的用户名 ,然后将其粘贴到登录 对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
点击下一步 。
复制下面的密码 ,然后将其粘贴到欢迎 对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
点击下一步 。
重要提示: 您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意 :在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
继续在后续页面中点击以完成相应操作:
接受条款及条件。
由于这是临时账号,请勿添加账号恢复选项或双重验证。
请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意: 如需访问 Google Cloud 产品和服务,请点击导航菜单 ,或在搜索 字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
点击 Google Cloud 控制台顶部的激活 Cloud Shell 。
在弹出的窗口中执行以下操作:
继续完成 Cloud Shell 信息窗口中的设置。
授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID :
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
(可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
点击授权 。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
(可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意: 如需查看在 Google Cloud 中使用 gcloud
的完整文档,请参阅 gcloud CLI 概览指南 。
任务 1. 创建 Cloud Storage 存储桶
要存储本实验的数据,您需要创建自己的 Cloud Storage 存储桶。
为您的 Cloud Storage 存储桶选择一个名称,例如 -enron_corpus 。要详细了解如何为存储桶命名,请参阅 Cloud Storage 存储桶命名准则 。在 Cloud Shell 中运行以下命令,以便将一个变量设置为存储桶名称:
BUCKET_NAME="{{{ project_0.project_id }}}-enron_corpus"
现在运行以下命令,以创建存储桶:
gsutil mb gs://${BUCKET_NAME}
运行此命令也应有助于验证 gsutil
命令行客户端设置是否正确、身份验证是否正常、是否拥有正在操作的云项目的写入权限。
创建存储桶后,继续下一步,即下载安然语料库。
点击检查我的进度 以验证是否完成了以下目标:
创建 Cloud Storage 存储桶。
任务 2. 查看数据
安然语料库 是一个大型数据库,包含安然公司 (Enron Corporation) 158 名员工生成的 60 多万封电子邮件。这些数据已被复制到 Cloud Storage 存储桶 gs://enron_emails/
。
运行以下命令,在本地下载一份源文件,以便查看其具体内容:
gsutil cp gs://enron_emails/allen-p/inbox/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 命令之一来确保这一点。
gcloud services enable cloudkms.googleapis.com
注意: 也可以使用 Cloud 控制台界面 在您的项目中启用 KMS 和其他服务。
您应该不会收到任何输出内容。现在,您的项目中已启用 Cloud KMS!
任务 4. 创建密钥环和 Cryptokey
要加密数据,您需要创建一个密钥环和一个 CryptoKey。密钥环用于将密钥分组。密钥可以按环境(例如测试 、预演 和生产 环境)或其他概念进行分组。在本实验中,您的密钥环称为 test
,CryptoKey 称为 qwiklab
。
在 Cloud Shell 中运行以下命令,以设置环境变量:
KEYRING_NAME=test CRYPTOKEY_NAME=qwiklab
执行 gcloud
命令,创建密钥环。在本实验中,您将使用全局位置,但也可以设置为特定区域:
gcloud kms keyrings create $KEYRING_NAME --location global
接下来,使用新密钥环来创建一个名为 qwiklab
的 CryptoKey:
gcloud kms keys create $CRYPTOKEY_NAME --location global \
--keyring $KEYRING_NAME \
--purpose encryption
注意: 在 Cloud KMS 中,CryptoKey 和密钥环不可删除!
您应该不会看到任何输出内容。这样您就创建了密钥环和 CryptoKey!
前往导航菜单 > 安全性 > 密钥管理 ,通过控制台打开密钥管理 。
通过密钥管理网页界面,您可以查看和管理自己的 CryptoKey 和密钥环。您将在日后管理权限时使用此界面。
点击检查我的进度 以验证是否完成了以下目标:
创建密钥环和 CryptoKey。
任务 5. 加密您的数据
接下来,尝试加密一些数据!
将您之前查看的电子邮件内容,通过运行以下命令进行 base64
编码:
PLAINTEXT=$(cat 1. | base64 -w0)
注意 :利用 Base64 编码,二进制数据可作为纯文本发送到 API。此命令适用于图片、视频或任何其他类型的二进制数据。
使用加密端点,您可以将要加密的 base64 编码文本发送到指定密钥。
运行以下命令:
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
中的已加密文本。
数据加密后,您可以将其保存到文件中并上传到 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
要验证已加密数据能否解密,调用 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 快速入门 ,了解有关如何使用多种编程语言来加密和解密数据的演示。
在验证文本已成功加密后,可以将已加密文件上传到 Cloud Storage 存储桶。
gsutil cp 1.encrypted gs://${BUCKET_NAME}
点击检查我的进度 以验证是否完成了以下目标:
使用 Cloud KMS 密钥加密数据并将其上传到存储桶。
任务 6. 配置 IAM 权限
在 KMS 中需要重点关注两大权限。其一是允许用户或服务账号管理 KMS 资源 的权限,另一个是允许用户或服务账号使用密钥加密和解密 数据的权限。
管理密钥的权限是 cloudkms.admin
,拥有此权限的任何人都可以创建密钥环,还可以创建、修改、停用和销毁 CryptoKey。加密和解密的权限是 cloudkms.cryptoKeyEncrypterDecrypter
,它用于调用加密和解密 API 端点。
在本练习中,您将使用当前授权用户来分配 IAM 权限。
要获取当前授权用户,运行以下命令:
USER_EMAIL=$(gcloud auth list --limit=1 2>/dev/null | grep '@' | awk '{print $2}')
接下来,为此用户分配管理 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
权限,授权用户将无法使用密钥来加密和解密数据。
运行以下 gcloud
命令,为所创建的密钥环下的任何 CryptoKey 分配 IAM 权限,从而加密和解密数据:
gcloud kms keyrings add-iam-policy-binding $KEYRING_NAME \
--location global \
--member user:$USER_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter
现在,您可以在密钥管理 的“加密密钥”部分查看已分配权限。
勾选密钥环名称 (test
) 旁边的复选框,然后点击右侧信息面板中的主账号 。
这将打开一个菜单,在其中可以看到您刚刚添加的密钥环的账号和权限。
任务 7. 使用命令行备份数据
了解如何加密单个文件并获得相关权限之后,您可以运行一个脚本来备份一个目录中的所有文件。在本例中,复制 allen-p 的所有电子邮件,对其进行加密,然后将其上传到 Cloud Storage 存储桶。
首先,将 allen-p 的所有电子邮件复制到当前工作目录中:
gsutil -m cp -r gs://enron_emails/allen-p .
现在,请将以下代码复制并粘贴到 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 时,能查看到已加密的文件。
要找到文件,前往导航菜单 > 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 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。