使用 Cloud KMS Autokey 轻松加密资源

1. 简介

Cloud KMS Autokey 通过自动预配和分配,简化了客户管理的加密密钥 (CMEK) 的创建和使用。借助 Autokey,您无需提前规划和预配密钥环、密钥和服务账号。相反,Autokey 会在您创建资源时按需生成密钥,依赖于委派的权限而不是 Cloud KMS 管理员。

使用 Autokey 生成的密钥可帮助您始终符合数据安全方面的业界标准和推荐做法,包括 HSM 保护级别、职责分离、密钥轮替、位置和密钥特异性。Autokey 会为与 Cloud KMS Autokey 集成的 Google Cloud 服务创建同时遵循一般准则和特定于资源类型的准则的密钥。创建后,使用 Autokey 请求的密钥将与具有相同设置的其他 Cloud HSM 密钥发挥相同的作用。

构建内容

在此 Codelab 中,您将通过创建以下代码,使用 Cloud KMS Autokey 启动受保护的资源:

  • 文件夹资源
  • 将包含密钥的项目
  • 一个服务代理,充当您的密钥管理助理
  • 用于托管受保护资源的项目
  • 使用 Cloud KMS Autokey 加密的 BigQuery 数据集、永久性磁盘和 Cloud Storage 存储分区

所需条件

  • Google Cloud 组织
  • 要完成本实验,您的 Google Cloud 主账号必须在组织级别拥有以下角色:
  • Cloud KMS Autokey 管理员 (roles/cloudkms.autokeyAdmin)
  • 文件夹 IAM 管理员 (roles/resourcemanager.folderIamAdmin)
  • 结算账号用户 (roles/billing.user)
  • 启用了结算功能的 Google Cloud 项目
  • 基本 Linux 体验

2. 创建文件夹

文件夹是 Cloud Platform 资源层次结构中的节点。文件夹可以包含项目、其他文件夹,或两者的组合。组织资源可以使用文件夹在层次结构中的组织资源节点下对项目进行分组。要创建文件夹,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 管理资源 页面
  2. 请务必在页面顶部的组织下拉列表中选择您的组织资源名称。
  3. 点击“创建文件夹”

9328ef3bd4840817

  1. 选择标准文件夹

20a094fe0c7a0924

  1. 在“文件夹名称”框中,输入新文件夹的名称。在本实验中,请考虑使用“Autokey 文件夹”
  2. 在“目标”下,点击“浏览”,然后选择要在其中创建新文件夹的组织资源或文件夹。
  3. 点击“创建”。

3. 创建资源项目

请务必创建一个资源项目,以包含您要使用 Cloud KMS AutoKey 加密的资源(例如 BigQuery 数据集、永久性磁盘和 Cloud Storage 存储桶)。如果您尝试在密钥项目中创建受 Autokey 保护的资源,Autokey 会拒绝新密钥请求。如需创建资源项目,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 管理资源 页面
  2. 点击“创建项目”。

93e4e224322c68a7

  1. 在页面顶部的“选择组织”下拉列表中,选择“Autokey 文件夹”文件夹中。
  2. 在显示的“新建项目”窗口中,输入项目名称并选择适用的结算账号。在本实验中,请考虑使用“Autokey 加密资源”
  3. 在“位置”框中,选择“Autokey 文件夹”文件夹中。该资源将是新项目的分层父级。您的设置应如下所示:

187ece37daf50835

  1. 复制项目 ID - 在上述示例中,项目 ID 为“causal-hour-43319-m4”但您的 ID 会有所不同 - 在您选择的文本编辑器中。
  2. 点击“创建”
  3. 选择屏幕右上角的 Cloud Shell 图标

16c8476c4991f448

  1. Cloud Shell 激活后,通过运行以下命令将 Autokey 项目 ID 保存为变量:
export RESOURCE_PROJECT=<paste your Resource Project ID>

因为我的项目 ID 是“key-management-433319”我的命令如下所示:

export AUTOKEY_PROJECT=causal-hour-43319-m4
  1. 运行以下命令以执行密钥项目中的命令:
gcloud config set project $RESOURCE_PROJECT

出现提示时,点击“授权”为 Cloud Shell 授权

a6c755d4921bc728.png

  1. 由于此项目将包含资源,因此我们需要为 Autokey 将保护的服务启用 API。运行以下命令:
gcloud services enable storage.googleapis.com bigquery.googleapis.com compute.googleapis.com

4. 创建密钥项目

我们建议您创建一个项目,以包含 Autokey 创建的 Cloud KMS 资源。这称为“密钥项目”。密钥项目可以在计划启用 Autokey 的同一文件夹中创建。您不应在密钥项目中创建其他资源。如果您尝试在密钥项目中创建受 Autokey 保护的资源,Autokey 会拒绝新密钥请求。如需创建密钥项目,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 管理资源 页面
  2. 点击“创建项目”。

93e4e224322c68a7

  1. 在页面顶部的“选择组织”下拉列表中,选择“Autokey 文件夹”文件夹中。
  2. 在显示的“新建项目”窗口中,输入项目名称并选择适用的结算账号。在本实验中,请考虑使用“密钥管理”
  3. 在“位置”框中,选择“Autokey 文件夹”文件夹中。该资源将是新项目的分层父级。您的设置应如下所示:

157894b5c9048c06

  1. 复制项目 ID - 在上述示例中,项目 ID 为“key-management-433319”但您的 ID 会有所不同 - 在您选择的文本编辑器中。
  2. 点击“创建”。

5. 准备 Autokey 密钥项目

现在,每个项目都已创建完毕,接下来可以将密钥项目配置为使用 Cloud KMS Autokey。

  1. 选择屏幕右上角的 Cloud Shell 图标

16c8476c4991f448

  1. Cloud Shell 激活后,通过运行以下命令将 Autokey 项目 ID 保存为变量:
export AUTOKEY_PROJECT=<paste your Autokey Project ID>

因为我的项目 ID 是“key-management-433319”我的命令如下所示:

export AUTOKEY_PROJECT=key-management-433319
  1. 运行以下命令以执行密钥项目中的命令:
gcloud config set project $AUTOKEY_PROJECT

出现提示时,点击“授权”为 Cloud Shell 授权

a6c755d4921bc728.png

  1. 通过运行以下命令启用 Cloud KMS API
gcloud services enable cloudkms.googleapis.com  kmsinventory.googleapis.com
  1. 运行以下命令,将您的项目编号保存为名为 AUTOKEY_PROJECT_NUMBER 的变量
export AUTOKEY_PROJECT_NUMBER=$(gcloud projects list \
--filter="$(gcloud config get-value project)" \
--format="value(PROJECT_NUMBER)")
  1. 运行以下命令,将主账号的电子邮件地址保存为变量:
export KEY_ADMIN_EMAIL=<paste your Principal's email>
  1. 向 Cloud KMS 管理员用户授予密钥项目的 Cloud KMS 管理员权限
gcloud projects add-iam-policy-binding $AUTOKEY_PROJECT_NUMBER \
    --role=roles/cloudkms.admin \
    --member=user:$KEY_ADMIN_EMAIL

6. 设置 Cloud KMS 服务代理

密钥项目的 Cloud KMS 服务代理代表人工 Cloud KMS 管理员创建密钥,并在资源创建期间应用 IAM 政策绑定。为了能够创建和分配密钥,Cloud KMS 服务代理需要具备 Cloud KMS 管理员权限。

  1. 使用以下命令查找组织 ID:
gcloud organizations list | grep -P -i 'ID:' | grep -i '[0-9]'
  1. 复制组织 ID - 这是以红色突出显示的数字结果
  2. 将组织 ID 保存为名为 ORG_ID 的变量:
export ORG_ID=<paste your Organization ID>
  1. 通过运行以下命令创建 Cloud KMS 服务代理:
gcloud beta services identity create --service=cloudkms.googleapis.com \
    --project=$AUTOKEY_PROJECT_NUMBER
  1. 将 Cloud KMS 管理员角色授予该服务代理:
gcloud projects add-iam-policy-binding $AUTOKEY_PROJECT_NUMBER \
    --role=roles/cloudkms.admin \
    --member=serviceAccount:service-$AUTOKEY_PROJECT_NUMBER@gcp-sa-cloudkms.iam.gserviceaccount.com
  1. 添加 IAM 政策绑定,以便您可以查看 Cloud KMS 密钥的使用情况。“密钥使用情况”提供每个密钥的信息,包括使用该密钥的受保护资源、项目和唯一 Google Cloud 产品的数量。对密钥拥有 Cloud KMS Viewer 角色的任何人都可以使用此级别的详细信息。运行以下命令:
gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \
    --member="serviceAccount:service-org-$ORGANIZATION_ID@gcp-sa-cloudkms.iam.gserviceaccount.com" \
    --role='roles/cloudkms.orgServiceAgent'
  1. 向您的 Cloud KMS 服务账号授予组织资源的 Cloud KMS Organization Service Agent (cloudkms.orgServiceAgent) 角色。
gcloud organizations add-iam-policy-binding $ORG_ID \
    --member="serviceAccount:service-org-$ORG_ID@gcp-sa-cloudkms.iam.gserviceaccount.com" \
    --role='roles/cloudkms.orgServiceAgent'
  1. 将组织资源的 Cloud KMS Protected Resources Viewer 角色授予需要查看密钥使用情况详情的任何人。
gcloud organizations add-iam-policy-binding $ORG_ID \
    --member="user:$KEY_ADMIN_EMAIL" \
    --role='roles/cloudkms.protectedResourcesViewer'

7. 授予 Autokey 用户角色

您必须先向开发者授予所需的角色,开发者才能使用 Autokey。您可以在文件夹级别或项目级别授予该角色。拥有此角色的开发者可以在该文件夹或项目中创建资源时向 Cloud KMS 服务代理请求密钥。

授予该角色的第一步是保存文件夹 ID。

  1. 使用以下命令查找文件夹 ID:
gcloud projects describe $AUTOKEY_PROJECT | grep 'id' | grep -P -i '[0-9]+'
  1. 复制文件夹 ID - 这是以红色突出显示的部分
  2. 将文件夹 ID 保存为名为 FOLDER_ID 的变量
export FOLDER_ID=<paste the folder ID>

在本实验中,我们将密钥管理员定义为 Autokey 用户。不过,在生产使用场景以及由多名人员组成的组织中,关键管理员应与使用 Autokey 的开发者不同。

  1. 在文件夹级别授予 roles/cloudkms.autokeyUser 角色:
gcloud resource-manager folders add-iam-policy-binding \
    $FOLDER_ID --role=roles/cloudkms.autokeyUser \
    --member=user:$KEY_ADMIN_EMAIL

8. 对资源文件夹启用 Cloud KMS Autokey

在此步骤中,您将在资源文件夹上启用 Cloud KMS Autokey,并确定将包含该文件夹的 Autokey 资源的 Cloud KMS 项目。对此文件夹启用 Autokey 会为该文件夹中的所有资源项目启用 Autokey。

  1. 在 Google Cloud 控制台中,前往 KMS 控件页面
  2. 点击“选择文件夹”

785f338e1860029c

  1. 从上下文选择器中,选择要启用 Autokey 的文件夹。这与您之前创建的文件夹相同,包含您的资源项目和密钥管理项目。它应如下所示:

f0ee5141dc6fa40e.png

  1. 点击“启用”。
  2. 点击“浏览”以选择密钥项目
  3. 选择您的密钥管理项目,然后点击“提交”。

5acd9e68eb972e15

系统会显示一条消息,确认该文件夹已启用 Cloud KMS Autokey。KMS 控件页面应如下所示:

8bddb3d688ba842d

9. 使用 Cloud KMS Autokey 创建受保护的资源

Compute Engine 永久性磁盘

Autokey 会在所创建资源所在的位置为每个磁盘、映像和机器映像创建一个新密钥。

如需创建磁盘,请完成以下步骤:

  1. 在 Google Cloud 控制台中,前往磁盘页面
  2. 点击“创建磁盘”,然后输入新磁盘的属性。
  3. 在“加密”下,选择“Cloud KMS 密钥”。

dcc63e9ae03c5fbe.png

  1. 对于密钥类型,选择 Cloud KMS with Autokey,然后点击“请求新密钥”。当您成功创建密钥并准备好使用时,系统会显示一条消息。

4b2283a0d52cc98d

  1. 要完成磁盘的创建,请点击“创建”。

您可以按照类似的过程创建受保护的虚拟机实例、映像和机器映像资源。

Google Cloud Storage 存储分区

Autokey 会在存储分区所在的位置创建新密钥。Autokey 创建的密钥会被分配为存储分区默认密钥。

Autokey 不会为对象创建键。默认情况下,在存储分区中创建的对象会使用存储分区默认密钥。如果您要使用存储分区默认密钥以外的密钥加密对象,可以手动创建 CMEK,并在创建对象时使用该密钥。

  1. 在 Google Cloud 控制台中,前往创建存储分区页面。
  2. 选择一个全局唯一的永久名称。
  3. 选择数据位置。
  4. 继续执行“选择如何保护对象数据”部分

e31bbeff5c7aabdf.png

  1. 点击“选择如何保护对象数据”以展开此部分

9c68ce19dac932de

  1. 展开“数据加密”部分,然后选择 Cloud KMS 密钥。d8caca08891be9dc.png
  2. 对于密钥类型,选择 Cloud KMS with Autokey,然后点击“请求新密钥”。当您成功创建密钥并准备好使用时,系统会显示一条消息。

a10d1ae243c44811.png

  1. 要完成存储分区的创建,请点击“创建”。如果系统提示您显示一个对话框,说明“系统将禁止公开访问”点击“确认”。

BigQuery 数据集

对于每个新数据集,Autokey 会在资源本身所在的位置创建一个新密钥,该密钥会成为数据集的默认密钥。Autokey 不会为表、查询、临时表或模型创建键。默认情况下,这些资源受数据集默认密钥的保护。如果您想使用除数据集默认密钥以外的密钥保护数据集中的资源,可以手动创建 CMEK,并在创建资源时使用该密钥。

如需创建 BigQuery 数据集,您必须先拥有 BigQuery User 角色。

  1. 返回到 Cloud Shell
  2. 设置 Cloud Shell 以执行资源项目中的命令
gcloud config set project $RESOURCE_PROJECT
  1. 运行以下命令,将您的项目编号保存为名为 RESOURCE_PROJECT_NUMBER 的变量
export RESOURCE_PROJECT_NUMBER=$(gcloud projects list --filter="$(gcloud config get-value project)" --format="value(PROJECT_NUMBER)")
  1. 为您自己授予 BigQuery User 角色
gcloud projects add-iam-policy-binding $RESOURCE_PROJECT_NUMBER \
    --role=roles/bigquery.user \
    --member=user:$KEY_ADMIN_EMAIL

现在您已拥有 BigQuery User 角色,可以创建数据集并使用 Autokey 保护它了!

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。
  2. 按照说明创建数据集,直到您看到“高级选项”>“加密。
  3. 在“加密”下,选择“Cloud KMS 密钥”。
  4. 对于密钥类型,选择 Cloud KMS with Autokey,然后点击“请求新密钥”。当您成功创建密钥并准备好使用时,系统会显示一条消息。
  5. 要完成数据集的创建,请点击“创建数据集”。

10. 探索您的钥匙

在此步骤中,您将访问“密钥目录”页面,探索 Cloud KMS Autokey 代表您创建的密钥。“密钥清单”页面提供有关项目中加密密钥的全面信息。请注意,数据可能会延迟。例如,如果您新建受保护的资源,该受保护资源和关联的密钥版本不会立即添加到“使用情况跟踪”标签页中。如需查看更多限制,请点击此处

  1. 在 Google Cloud 控制台中,前往“密钥清单”页面
  2. 可选:要过滤键列表,请在 filter_list 过滤器框中输入搜索字词,然后按 Enter 键。例如,您可以按位置、密钥环、状态或其他密钥属性进行过滤。
  3. 点击要查看其使用情况信息的键的名称。
  4. 点击“概览”。请注意,您创建的每项资源都有一个密钥。每个密钥名称都包含密钥正在保护的资源的名称(例如“compute-disk”或“storage-bucket”)。Cloud KMS Autokey 可确保每个密钥在创建后 365 天安排轮替,并且每个密钥都分配有“HSM”保护级别。

9acbce68acb653d4

  1. 点击 使用情况跟踪 标签。请注意呈现的信息级别:此处显示了密钥加密的每个资源,以及项目、位置和创建日期。
  2. 可选:如需过滤受保护的资源列表,请在 filter_list 过滤器框中输入搜索字词,然后按 Enter 键。

7def6fe9a023d063

11. 恭喜

恭喜,您已成功创建 Google Cloud 资源,并使用 Cloud KMS Autokey 对这些资源进行按需自动加密!

您现在已经知道设置 Autokey 并借助它通过 Cloud KMS 密钥自动加密资源所需的密钥步骤。

12. 接下来做什么?

将数据上传到经过 Autokey 加密的资源

参考文档