1. 简介
Cloud KMS Autokey 通过自动预配和分配,简化了客户管理的加密密钥 (CMEK) 的创建和使用。借助 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)
- Folder IAM Admin (roles/resourcemanager.folderIamAdmin)
- 结算账号用户 (roles/billing.user)
- 启用了结算功能的 Google Cloud 项目
- 基本的 Linux 使用经验
2. 创建文件夹
文件夹是 Cloud Platform 资源层次结构中的节点。文件夹可以包含项目、其他文件夹,或两者的组合。组织资源可以使用文件夹在层次结构中的组织资源节点下对项目进行分组。要创建文件夹,请执行以下操作:
- 转到 Google Cloud 控制台中的 管理资源 页面
- 请务必在页面顶部的组织下拉列表中选择您的组织资源名称。
- 点击“创建文件夹”
- 选择标准文件夹
- 在“文件夹名称”框中,输入新文件夹的名称。在本实验中,请考虑使用“Autokey 文件夹”
- 在“目标”下,点击“浏览”,然后选择要在其中创建新文件夹的组织资源或文件夹。
- 点击“创建”。
3. 创建资源项目
请务必创建一个资源项目,以包含您要使用 Cloud KMS AutoKey 加密的资源(例如 BigQuery 数据集、永久性磁盘和 Cloud Storage 存储桶)。如果您尝试在密钥项目中创建受 Autokey 保护的资源,Autokey 会拒绝新密钥请求。如需创建资源项目,请执行以下操作:
- 转到 Google Cloud 控制台中的 管理资源 页面
- 点击“创建项目”。
- 在页面顶部的“选择组织”下拉列表中,选择“Autokey-Folder”文件夹。
- 在随即显示的“新建项目”窗口中,输入项目名称并选择适用的结算账号。对于本实验,请考虑“Autokey 加密资源”
- 在“位置”框中,选择“Autokey-Folder”文件夹。该资源将是新项目的分层父级。您的设置应如下所示:
- 将项目 ID(在上面的示例中,项目 ID 为“causal-hour-43319-m4”,但您的 ID 会有所不同)复制到您选择的文本编辑器中。
- 点击“创建”
- 选择屏幕右上角的 Cloud Shell 图标
- Cloud Shell 启动后,运行以下命令将您的 Autokey 项目 ID 保存为变量:
export RESOURCE_PROJECT=<paste your Resource Project ID>
因为我的项目 ID 是“key-management-433319”我的命令如下所示:
export AUTOKEY_PROJECT=causal-hour-43319-m4
- 运行以下命令,从您的关键项目中执行命令:
gcloud config set project $RESOURCE_PROJECT
出现提示时,点击“授权”为 Cloud Shell 授权
- 由于此项目将包含资源,因此我们需要为 Autokey 将保护的服务启用 API。运行以下命令:
gcloud services enable storage.googleapis.com bigquery.googleapis.com compute.googleapis.com
4. 创建密钥项目
我们建议您创建一个项目,以包含 Autokey 创建的 Cloud KMS 资源。我们将其称为“关键项目”。密钥项目可以在您计划启用 Autokey 的同一文件夹中创建。您不应在密钥项目中创建其他资源。如果您尝试在密钥项目中创建受 Autokey 保护的资源,Autokey 会拒绝新密钥请求。如需创建密钥项目,请执行以下操作:
- 转到 Google Cloud 控制台中的 管理资源 页面
- 点击“创建项目”。
- 在页面顶部的“选择组织”下拉列表中,选择“Autokey-Folder”文件夹。
- 在随即显示的“新建项目”窗口中,输入项目名称并选择适用的结算账号。在本实验中,请考虑使用“密钥管理”
- 在“位置”框中,选择“Autokey 文件夹”文件夹中。该资源将是新项目的分层父级。您的设置应如下所示:
- 复制项目 ID - 在上述示例中,项目 ID 为“key-management-433319”但您的 ID 会有所不同 - 在您选择的文本编辑器中。
- 点击“创建”。
5. 准备 Autokey 密钥项目
现在,每个项目都已创建完毕,接下来可以将密钥项目配置为使用 Cloud KMS Autokey。
- 选择屏幕右上角的 Cloud Shell 图标
- Cloud Shell 启动后,运行以下命令将您的 Autokey 项目 ID 保存为变量:
export AUTOKEY_PROJECT=<paste your Autokey Project ID>
因为我的项目 ID 是“key-management-433319”我的命令如下所示:
export AUTOKEY_PROJECT=key-management-433319
- 运行以下命令,从您的关键项目中执行命令:
gcloud config set project $AUTOKEY_PROJECT
出现提示时,点击“授权”为 Cloud Shell 授权
- 通过运行以下命令启用 Cloud KMS API
gcloud services enable cloudkms.googleapis.com kmsinventory.googleapis.com
- 运行以下命令,将您的项目编号保存为名为 AUTOKEY_PROJECT_NUMBER 的变量
export AUTOKEY_PROJECT_NUMBER=$(gcloud projects list \
--filter="$(gcloud config get-value project)" \
--format="value(PROJECT_NUMBER)")
- 运行以下命令,将主账号的电子邮件地址保存为变量:
export KEY_ADMIN_EMAIL=<paste your Principal's email>
- 向 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 管理员权限。
- 使用以下命令查找组织 ID:
gcloud organizations list | grep -P -i 'ID:' | grep -i '[0-9]'
- 复制组织 ID - 这是以红色突出显示的数字结果
- 将组织 ID 保存为名为 ORG_ID 的变量:
export ORG_ID=<paste your Organization ID>
- 运行以下命令以创建 Cloud KMS 服务代理:
gcloud beta services identity create --service=cloudkms.googleapis.com \
--project=$AUTOKEY_PROJECT_NUMBER
- 向服务代理授予 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
- 添加 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'
- 向您的 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'
- 向需要查看密钥使用情况详情的任何用户授予组织资源的 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。
- 使用以下命令查找文件夹 ID:
gcloud projects describe $AUTOKEY_PROJECT | grep 'id' | grep -P -i '[0-9]+'
- 复制文件夹 ID - 这是以红色突出显示的部分
- 将文件夹 ID 保存为名为 FOLDER_ID 的变量
export FOLDER_ID=<paste the folder ID>
在本实验中,我们将密钥管理员定义为 Autokey 用户。不过,在生产环境用例中以及包含多个用户的组织中,密钥管理员应与使用 Autokey 的开发者不同。
- 在文件夹级别授予 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。
- 在 Google Cloud 控制台中,前往 KMS 控件页面。
- 点击“选择文件夹”
- 从上下文选择器中,选择要启用 Autokey 的文件夹。这与您之前创建的文件夹相同,包含您的资源项目和密钥管理项目。它应如下所示:
- 点击“启用”。
- 点击“浏览”以选择密钥项目
- 选择您的密钥管理项目,然后点击“提交”。
系统会显示一条消息,确认该文件夹已启用 Cloud KMS Autokey。KMS 控件页面应如下所示:
9. 使用 Cloud KMS Autokey 创建受保护的资源
Compute Engine 永久性磁盘
Autokey 会在所创建资源所在的位置为每个磁盘、映像和机器映像创建一个新密钥。
如需创建磁盘,请完成以下步骤:
- 在 Google Cloud 控制台中,前往“磁盘”页面。
- 点击“创建磁盘”,然后输入新磁盘的属性。
- 在“加密”下,选择“Cloud KMS 密钥”。
- 对于“密钥类型”,选择“Cloud KMS with Autokey”,然后点击“请求新密钥”。当您成功创建密钥并准备好使用时,系统会显示一条消息。
- 要完成磁盘的创建,请点击“创建”。
您可以按照类似的流程创建受保护的虚拟机实例、映像和机器映像资源。
Google Cloud Storage 存储桶
Autokey 会在存储分区所在的位置创建新密钥。AutoKey 创建的密钥会被分配为存储桶的默认密钥。
Autokey 不会为对象创建键。默认情况下,在存储桶中创建的对象会使用存储桶的默认密钥。如果您要使用存储分区默认密钥以外的密钥加密对象,可以手动创建 CMEK,并在创建对象时使用该密钥。
- 在 Google Cloud 控制台中,前往创建存储桶页面。
- 选择一个全局唯一的永久名称。
- 选择数据位置。
- 继续执行“选择如何保护对象数据”部分
- 点击“选择如何保护对象数据”以展开此部分
- 展开“数据加密”部分,然后选择 Cloud KMS 密钥。
- 对于“密钥类型”,选择“Cloud KMS with Autokey”,然后点击“请求新密钥”。当您成功创建密钥并准备好使用时,系统会显示一条消息。
- 要完成存储分区的创建,请点击“创建”。如果系统显示一个对话框,说明“系统将禁止公开访问”,请点击“确认”。
BigQuery 数据集
对于每个新数据集,Autokey 都会在与资源本身相同的位置创建一个新密钥,该密钥将成为数据集的默认密钥。Autokey 不会为表、查询、临时表或模型创建键。默认情况下,这些资源受数据集默认密钥的保护。如果您要使用数据集默认密钥以外的密钥保护数据集中的资源,可以手动创建 CMEK,并在创建资源时使用该密钥。
如需创建 BigQuery 数据集,您必须先拥有 BigQuery User 角色。
- 返回 Cloud Shell
- 将 Cloud Shell 设置为从资源项目中执行命令
gcloud config set project $RESOURCE_PROJECT
- 运行以下命令,将您的项目编号保存为名为 RESOURCE_PROJECT_NUMBER 的变量
export RESOURCE_PROJECT_NUMBER=$(gcloud projects list --filter="$(gcloud config get-value project)" --format="value(PROJECT_NUMBER)")
- 向自己授予 BigQuery User 角色
gcloud projects add-iam-policy-binding $RESOURCE_PROJECT_NUMBER \
--role=roles/bigquery.user \
--member=user:$KEY_ADMIN_EMAIL
现在,您已获得 BigQuery User 角色,可以创建数据集并使用 AutoKey 对其进行保护了!
- 在 Google Cloud 控制台中,转到 BigQuery 页面。
- 按照说明创建数据集,直到看到“高级选项”>“加密”。
- 在“加密”下,选择“Cloud KMS 密钥”。
- 对于“密钥类型”,选择“Cloud KMS with Autokey”,然后点击“请求新密钥”。当密钥成功创建并可以使用时,系统会显示一条消息。
- 如需完成数据集的创建,请点击“创建数据集”。
10. 探索您的按键
在此步骤中,您将访问“密钥目录”页面,探索 Cloud KMS Autokey 代表您创建的密钥。“密钥清单”页面提供有关项目中加密密钥的全面信息。请注意,数据可能会延迟。例如,如果您新建受保护的资源,该受保护资源和关联的密钥版本不会立即添加到“使用情况跟踪”标签页中。如需了解更多限制,请点击此处。
- 在 Google Cloud 控制台中,前往“密钥清单”页面。
- 可选:如需过滤按键列表,请在 filter_list 过滤条件框中输入搜索字词,然后按 Enter 键。例如,您可以按位置、密钥环、状态或其他密钥属性进行过滤。
- 点击您要查看其使用情况信息的密钥的名称。
- 点击“概览”。请注意,您创建的每项资源都有一个密钥。每个密钥名称都包含密钥正在保护的资源的名称(例如“compute-disk”或“storage-bucket”)。Cloud KMS Autokey 可确保为每个密钥安排在创建 365 天后轮替,并为每个密钥分配“HSM”保护级别。
- 点击“使用情况跟踪”标签页。请注意所显示的信息级别:此处会显示密钥正在加密的每个资源,以及项目、位置和创建日期。
- 可选:如需过滤受保护的资源列表,请在 filter_list 过滤器框中输入搜索字词,然后按 Enter 键。
11. 恭喜
恭喜,您已成功创建 Google Cloud 资源,并使用 Cloud KMS Autokey 对这些资源进行按需自动加密!
现在,您已了解设置 Autokey 并使用它通过 Cloud KMS 密钥自动加密资源所需的主要步骤。
12. 接下来做什么?
将数据上传到使用 Autokey 加密的资源
- 创建 Google Compute Engine (GCE) 实例
- 将受 Autokey 保护的永久性磁盘挂接到 GCE 实例
- 将数据上传到 BigQuery 数据集
- 将对象上传到 Google Cloud Storage 存储分区
- 将 Google Cloud Storage 数据加载到 BigQuery 中