本页面介绍了如何使用由 用于加密的 Cloud KMS Autokey。如需详细了解 Autokey,请参阅 Autokey 概览。
准备工作
在使用 Autokey 创建受保护的资源之前,您必须 请完成以下步骤,以做好准备:
- 如果您在 Autokey 中还没有资源项目 那么您必须 创建 project 来保存计划创建的资源。
-
如需获得使用 Autokey 创建受保护的 . 请让管理员授予您 针对文件夹或项目的 Cloud KMS Autokey User (
roles/cloudkms.autokeyUser
) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 - 您还需要 Autokey 文件夹中的资源创建权限 或文件夹内的某个资源项目上。如需详细了解 创建每个资源所需的权限,请参阅服务特定的 文档。您可在以下位置找到相关服务 CMEK 集成表,然后访问要处理的资源类型的链接 资源。
将 Autokey 与 Compute Engine 资源搭配使用
Autokey 会为每个磁盘、映像和机器映像 与正在创建的资源所在的位置相同。
Autokey 不会为快照创建新密钥。快照应使用 用于加密磁盘的密钥相同。如果您使用 Google Cloud 控制台,则磁盘使用的加密密钥会自动 应用于快照 如果您使用 gcloud CLI、Terraform 或 Cloud KMS API,则必须标识用于加密磁盘的密钥, 使用该密钥对快照进行加密。
如需详细了解如何将 CMEK 与快照搭配使用,请参阅创建快照 从使用 CMEK 加密的磁盘中导出的数据。
创建受保护的 Compute Engine 资源
控制台
如需创建磁盘,请完成以下步骤:
在 Google Cloud 控制台中,转到磁盘页面。
点击创建磁盘,然后输入新磁盘的属性。
在加密下,选择 Cloud KMS 密钥。
对于密钥类型,选择 Cloud KMS with Autokey,然后点击 请求新密钥。当您使用密钥 已成功创建,可以使用了
要完成磁盘的创建,请点击创建。
您可以按照类似的流程,创建受保护的虚拟机实例、映像 和机器映像资源
Terraform
以下 Terraform 示例会创建一个键句柄,并使用 返回以保护新的永久性磁盘资源的密钥:
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "KEY_HANDLE"
location = "LOCATION"
resource_type_selector = "compute.googleapis.com/Disk"
}
resource "google_compute_disk" "persistent_disk" {
project = "RESOURCE_PROJECT_ID"
name = "DISK_NAME"
type = "pd-ssd"
zone = "ZONE"
size = 30
physical_block_size_bytes = 4096
disk_encryption_key {
kms_key_self_link = google_kms_key_handle.my_key_handle.kms_key
}
}
替换以下内容:
RESOURCE_PROJECT_ID
:资源项目的 ID 您要在其中创建受保护密钥的 Autokey 文件夹中 资源。KEY_HANDLE
:要用于按键句柄的 ID。LOCATION
:您要创建受保护实例的位置 资源。DISK_NAME
:新磁盘的名称。ZONE
:受保护资源的可用区。它必须 是您要创建资源的位置内的一个可用区。对于 例如,如果您要在us-central1
位置创建资源, 可用区可以为us-central1-a
。
API
创建 Cloud KMS 密钥,
KeyHandle
:curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'
替换以下内容:
USER_PROJECT
:支付费用的项目 与此请求关联的操作RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源LOCATION
:您要创建 资源。RESOURCE_TYPE
:您要 create,例如compute.googleapis.com/Disk
。
输出类似于以下内容:
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }
记下输出中的
OPERATION_ID
。您需要此值 以获取所创建密钥的资源 ID。找到与密钥句柄关联的 Cloud KMS 密钥:
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
替换以下内容:
USER_PROJECT
:支付费用的项目 与此请求关联的操作RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源LOCATION
:您要创建 资源。OPERATION_ID
:按键处理请求的标识符 操作。
输出类似于以下内容:
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }
输出中
kmsKey
元素的值是 Autokey 为此资源创建的密钥。您可以使用 与将资源 ID 用于任何其他 Cloud KMS 资源。使用
gcloud compute disks create
创建加密磁盘 命令替换为--kms-key
标志:gcloud compute disks create DISK_NAME \ --kms-key projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME
替换以下内容:
DISK_NAME
:新磁盘的名称。KEY_PROJECT_ID
:密钥项目的 ID。LOCATION
:您要创建 资源。KEY_NAME
:从 上一步。
将 Autokey 与 Cloud Storage 资源搭配使用
Autokey 会在存储桶所在的位置创建新密钥。关键 被指定为存储桶默认密钥。
Autokey 不会为对象创建键。默认情况下,在 存储桶使用存储桶默认密钥。如果要使用 密钥以外的密钥,您可以手动创建 CMEK 并使用 在创建对象时使用该键
如果要更改分配给存储桶的默认密钥,您可以使用任意密钥 现有 CMEK,包括 Autokey 创建的密钥。
创建受保护的 Cloud Storage 资源
控制台
Terraform
以下 Terraform 示例会创建一个键句柄,并使用 以保护新的存储桶:
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "KEY_HANDLE"
location = "LOCATION"
resource_type_selector = "storage.googleapis.com/Bucket"
}
resource "google_storage_bucket" "simple_bucket_name" {
name = "BUCKET_NAME"
location = "LOCATION"
force_destroy = true
project = "RESOURCE_PROJECT_ID"
uniform_bucket_level_access = true
encryption {
default_kms_key_name = google_kms_key_handle.my_key_handle.kms_key
}
}
替换以下内容:
RESOURCE_PROJECT_ID
:资源项目的 ID 您要在其中创建受保护密钥的 Autokey 文件夹中 资源。KEY_HANDLE
:要用于按键句柄的 ID。LOCATION
:您要创建受保护实例的位置 资源。BUCKET_NAME
:新存储桶的名称。
API
创建 Cloud KMS 密钥,
KeyHandle
:curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'
替换以下内容:
USER_PROJECT
:支付费用的项目 与此请求关联的操作RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源LOCATION
:您要创建 资源。RESOURCE_TYPE
:您要 create,例如storage.googleapis.com/Bucket
。
输出类似于以下内容:
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }
记下输出中的
OPERATION_ID
。你需要这个 值来获取已创建的密钥的资源 ID。找到与密钥句柄关联的 Cloud KMS 密钥:
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
替换以下内容:
USER_PROJECT
:支付费用的项目 与此请求关联的操作RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源LOCATION
:您要创建 资源。OPERATION_ID
:按键处理请求的标识符 操作。
输出类似于以下内容:
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }
输出中
kmsKey
元素的值是完整的资源 ID Autokey 为此资源创建的密钥的名称。您可以使用 与将资源 ID 用于任何 其他 Cloud KMS 资源使用
gcloud storage buckets create
创建加密存储桶 命令替换为--default-encryption-key
标志:gcloud storage buckets create gs://BUCKET_NAME \ --location=LOCATION \ --default-encryption-key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME
替换以下内容:
BUCKET_NAME
:新存储桶的名称。通过 存储桶名称必须遵循 存储桶命名要求。LOCATION
:您要创建 存储桶。KEY_PROJECT_ID
:密钥项目的 ID。LOCATION
:您要创建 资源。KEY_NAME
:从 上一步。
将 Autokey 与 BigQuery 资源搭配使用
Cloud KMS 在多个版本的 BigQuery 中提供。制造商 请确保您使用的 BigQuery 版本与 然后再尝试使用 Autokey 来保护 BigQuery 资源。如需详细了解 BigQuery 版本,请参阅了解 BigQuery 版本。
对于每个新数据集,Autokey 会在同一位置创建一个新密钥 作为资源本身,这会成为数据集的默认键。
Autokey 不会为表、查询、临时表或 模型。默认情况下,这些资源受数据集默认密钥的保护。如果 您想要使用数据集以外的密钥保护数据集中的资源 默认密钥,您可以手动创建 CMEK,并在创建 资源。
对于不在数据集内的查询和临时表,请使用项目 默认密钥。为 项目(包含 BigQuery 资源)。如需详细了解 使用项目默认密钥,请参阅 设置项目默认密钥。
如需详细了解如何将 CMEK 与 BigQuery 结合使用,请参阅 客户管理的 Cloud KMS 密钥。
创建受保护的 BigQuery 资源
控制台
尝试使用 Autokey,请确保您拥有所需的权限。有关 如需了解如何创建数据集,请参阅创建数据集。
在 Google Cloud 控制台中,转到 BigQuery 页面。
按照说明创建数据集,直到 您可以依次转到高级选项 > 加密。
在加密下,选择 Cloud KMS 密钥。
对于密钥类型,选择 Cloud KMS with Autokey,然后点击 请求新密钥。当您使用密钥 已成功创建,可以使用了
要完成数据集的创建,请点击创建数据集。
Terraform
以下 Terraform 示例会创建一个键句柄,并使用 返回密钥以保护新数据集:
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "test-key-handle"
location = "LOCATION"
resource_type_selector = "bigquery.googleapis.com/Dataset"
}
resource "google_bigquery_dataset" "dataset" {
project = "RESOURCE_PROJECT_ID"
dataset_id = "DATASET_ID"
friendly_name = "DATASET_NAME"
description = "DATASET_DESCRIPTION"
location = "LOCATION"
default_table_expiration_ms = 3600000
default_encryption_configuration {
kms_key_name = google_kms_key_handle.my_key_handle.kms_key
}
}
替换以下内容:
RESOURCE_PROJECT_ID
:资源项目的 ID 您要在其中创建受保护密钥的 Autokey 文件夹中 资源。LOCATION
:您要创建受保护实例的位置 资源。DATASET_ID
:要用于新数据集的 ID。DATASET_NAME
:新 数据集。DATASET_DESCRIPTION
:新项的说明 数据集。
API
创建 Cloud KMS 密钥,
KeyHandle
:curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'
替换以下内容:
USER_PROJECT
:支付费用的项目 与此请求关联的操作RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源LOCATION
:您要创建 资源。RESOURCE_TYPE
:您要 create,例如bigquery.googleapis.com/Dataset
。
输出类似于以下内容:
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }
记下输出中的
OPERATION_ID
。你需要这个 值来获取已创建的密钥的资源 ID。找到与密钥句柄关联的 Cloud KMS 密钥:
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
替换以下内容:
USER_PROJECT
:支付费用的项目 与此请求关联的操作RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源LOCATION
:您要创建 资源。OPERATION_ID
:按键处理请求的标识符 操作。
输出类似于以下内容:
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }
输出中
kmsKey
元素的值是完整的资源 ID Autokey 为此资源创建的密钥的名称。您可以使用 与将资源 ID 用于任何 其他 Cloud KMS 资源使用
bq mk
创建加密数据集 命令替换为--destination_kms_key
标志。bq --location=LOCATION mk \ --dataset \ --default_kms_key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME \ --default_table_expiration=TABLE_EXPIRATION \ --description="DATASET_DESCRIPTION" \ RESOURCE_PROJECT_ID:DATASET_ID
替换以下内容:
LOCATION
:您要创建 数据集。KEY_PROJECT_ID
:密钥项目的 ID。KEY_NAME
:从 上一步。TABLE_EXPIRATION
:New 的默认生命周期 此数据集中的表(以秒为单位)。DATASET_DESCRIPTION
:新项的说明 数据集。RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源DATASET_ID
:您要访问的数据集的 ID 。
如需详细了解
bq
工具,请参阅探索 bq 命令行工具。
将 Autokey 与 Secret Manager 资源搭配使用
Autokey 会创建一个密钥来保护同一项目中的所有密钥 和位置。当密钥轮替时,添加到项目的新 Secret 会使用新的 密钥的主要版本。
只有在以下情况下,Secret Manager 才与 Cloud KMS Autokey 兼容 使用 Terraform 或 REST API 创建资源
创建受保护的 Secret Manager 资源
Terraform
以下 Terraform 示例会创建一个键句柄,并使用 返回的密钥通过自动复制功能保护新密钥:
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "test-key-handle"
location = "global"
resource_type_selector = "secretmanager.googleapis.com/Secret"
}
resource "google_secret_manager_secret" "my_secret" {
project = "RESOURCE_PROJECT_ID"
secret_id = "SECRET_ID"
replication {
auto {
customer_managed_encryption {
kms_key_name = google_kms_key_handle.my_key_handle.kms_key
}
}
}
}
替换以下内容:
RESOURCE_PROJECT_ID
:资源项目的 ID 您要在其中创建受保护密钥的 Autokey 文件夹中 资源。SECRET_ID
:要用于新 Secret 的 ID。
如果您尝试在同一项目中为密钥创建密钥句柄,并且
键句柄所在的位置,则错误消息会返回
现有按键手柄的详细信息。如果发生这种情况,请确保您仅
有一个用于创建键句柄的块。您可以使用
其 ID (KEY_HANDLE
) 来创建应
共享密钥。
API
创建 Cloud KMS 密钥,
KeyHandle
:curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'
替换以下内容:
USER_PROJECT
:支付费用的项目 与此请求关联的操作RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源LOCATION
:您要创建 资源。RESOURCE_TYPE
:您要 create,例如secretmanager.googleapis.com/Secret
。
输出类似于以下内容:
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }
记下输出中的
OPERATION_ID
。你需要这个 值来获取已创建的密钥的资源 ID。如果您尝试为同一项目中的密钥创建密钥句柄 已有键句柄的键和位置,错误消息 返回现有键句柄的详细信息。在这种情况下,请跳过 下一步,并使用
existingKmsKey
字段中的密钥资源 ID 以保护您的新密钥。找到与密钥句柄关联的 Cloud KMS 密钥:
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
替换以下内容:
USER_PROJECT
:支付费用的项目 与此请求关联的操作RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源LOCATION
:您要创建 资源。OPERATION_ID
:按键处理请求的标识符 操作。
输出类似于以下内容:
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }
输出中
kmsKey
元素的值是完整的资源 ID Autokey 为此资源创建的密钥的名称。您可以使用 与将资源 ID 用于任何 其他 Cloud KMS 资源使用
gcloud secrets create
命令、 。--kms-key-name
gcloud secrets create "SECRET_ID" \ --replication-policy "automatic" \ --kms-key-name "projects/KEY_PROJECT_ID/locations/global/keyRings/autokey/cryptoKeys/KEY_NAME" \ --project "RESOURCE_PROJECT_ID"
替换以下内容:
SECRET_ID
:要用于新 Secret 的 ID。KEY_PROJECT_ID
:密钥项目的 ID。KEY_NAME
:从 上一步。RESOURCE_PROJECT_ID
:资源的项目 ID 项目(位于您要创建的 Autokey 文件夹中) 受保护的资源
后续步骤
- 详细了解何时使用 Autokey。
- 详细了解 Autokey 的工作原理。