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

本页介绍了如何使用 Cloud KMS Autokey 创建的密钥进行加密,从而创建受保护的资源。如需详细了解 Autokey,请参阅 Autokey 概览

准备工作

在使用 Autokey 创建受保护的资源之前,您必须完成以下准备步骤:

  1. 如果您尚未在 Autokey 文件夹中创建资源项目,则必须创建项目来存放您计划创建的资源。
  2. 如需获得使用 Autokey 创建受保护资源所需的权限,请让您的管理员为您授予文件夹或项目的 Cloud KMS Autokey User (roles/cloudkms.autokeyUser) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

  3. 您还需要在 Autokey 文件夹中或该文件夹内的资源项目中拥有资源创建权限。如需详细了解创建每项资源所需的权限,请参阅特定于服务的文档。如需找到此文档,请在 CMEK 集成表格中找到相应服务,然后访问您要创建的资源类型对应的链接。

将 Autokey 与 Compute Engine 资源搭配使用

Autokey 会为每个磁盘、映像和机器映像创建一个新密钥,并将其存储在与要创建的资源相同的位置。

Autokey 不会为快照创建新密钥。快照应使用用于加密磁盘的相同密钥。如果您使用 Google Cloud 控制台创建快照,则磁盘使用的加密密钥会自动应用于快照。如果您使用 gcloud CLI、Terraform 或 Compute Engine API 创建快照,则必须指定用于加密磁盘的密钥,并使用该密钥加密快照。

如需详细了解如何将 CMEK 与快照搭配使用,请参阅通过使用 CMEK 加密的磁盘创建快照

创建受保护的 Compute Engine 资源

控制台

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

  1. 在 Google Cloud 控制台中,转到磁盘页面。

    打开“磁盘”

  2. 点击创建磁盘,然后输入新磁盘的属性。

  3. 加密下,选择 Cloud KMS 密钥

  4. 针对密钥类型,选择 Cloud KMS with Autokey,然后点击请求新密钥。当您的密钥成功创建并可供使用时,系统会显示一条消息。

  5. 如需完成磁盘的创建,请点击创建

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

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:您要在其中创建受保护资源的 Autokey 文件夹中的资源项目的项目 ID。
  • KEY_HANDLE:要用于密钥句柄的 ID。
  • LOCATION:您要在其中创建受保护资源的位置。
  • DISK_NAME:新磁盘的名称。
  • ZONE:受保护资源所在的可用区。此值必须是您要创建资源的位置内的一个可用区。例如,如果您要在位置 us-central1 中创建资源,可用区可以是 us-central1-a

Cloud KMS 不允许您删除 KeyHandle 资源。如果您使用的是“创建并销毁”模式,则尝试重新创建 KeyHandle 会产生 ALREADY_EXISTS 错误。为避免此问题,您可以导入之前创建的 KeyHandle。如需了解详情,请参阅本页中的在 Terraform 中创建和销毁模式

API

  1. 通过创建 KeyHandle 请求新的 Cloud KMS 密钥:

    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:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。
    • LOCATION:您要创建受保护资源的位置。
    • RESOURCE_TYPE:您要创建的资源类型,例如 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。

  2. 查找与密钥句柄关联的 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:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。
    • 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。您可以使用此资源 ID,就像使用任何其他 Cloud KMS 资源的资源 ID 一样。

  3. 使用带有 --kms-key 标志的 gcloud compute disks create 命令创建加密磁盘:

    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 创建的密钥会被分配为存储桶的默认密钥。

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

如果您想更改分配给存储桶的默认密钥,可以使用任何现有 CMEK,包括 Autokey 创建的密钥。

创建受保护的 Cloud Storage 资源

控制台

  1. 在 Google Cloud 控制台中,前往创建存储桶页面。

    前往“创建存储桶”页面

  2. 按照说明创建新存储桶,直到看到选择如何保护对象数据

  3. 选择如何保护对象数据下,展开数据加密部分,然后选择 Cloud KMS 密钥

  4. 针对密钥类型,选择 Cloud KMS with Autokey,然后点击请求新密钥。当您的密钥成功创建并可供使用时,系统会显示一条消息。

  5. 如需完成存储桶的创建,请点击创建

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:您要在其中创建受保护资源的 Autokey 文件夹中的资源项目的项目 ID。
  • KEY_HANDLE:要用于密钥句柄的 ID。
  • LOCATION:您要在其中创建受保护资源的位置。
  • BUCKET_NAME:新存储桶的名称。

Cloud KMS 不允许您删除 KeyHandle 资源。如果您使用的是“创建并销毁”模式,则尝试重新创建 KeyHandle 会产生 ALREADY_EXISTS 错误。为避免此问题,您可以导入之前创建的 KeyHandle。如需了解详情,请参阅本页中的在 Terraform 中创建和销毁模式

API

  1. 通过创建 KeyHandle 请求新的 Cloud KMS 密钥:

    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:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。
    • LOCATION:您要创建受保护资源的位置。
    • RESOURCE_TYPE:您要创建的资源类型,例如 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。

  2. 查找与密钥句柄关联的 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:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。
    • 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。您可以使用此资源 ID,就像使用任何其他 Cloud KMS 资源的资源 ID 一样。

  3. 使用带有 --default-encryption-key 标志的 gcloud storage buckets create 命令创建加密存储桶:

    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。在尝试使用 Autokey 保护 BigQuery 资源之前,请确保您使用的 BigQuery 版本与 Cloud KMS 兼容。如需详细了解 BigQuery 版本,请参阅了解 BigQuery 版本

对于每个新数据集,Autokey 都会在与资源本身相同的位置创建一个新密钥,该密钥将成为数据集的默认密钥。

Autokey 不会为表、查询、临时表或模型创建密钥。默认情况下,这些资源由数据集默认密钥保护。如果您想使用数据集默认密钥以外的密钥来保护数据集中的资源,可以手动创建 CMEK,并在创建资源时使用该密钥。

对于不在数据集内的查询和临时表,请使用项目默认键。为项目中包含 BigQuery 资源的每个位置使用不同的项目默认密钥。如需详细了解如何使用项目默认密钥,请参阅设置项目默认密钥

如需详细了解如何将 CMEK 与 BigQuery 结合使用,请参阅客户管理的 Cloud KMS 密钥

创建受保护的 BigQuery 资源

控制台

在尝试使用 Autokey 创建 BigQuery 数据集之前,请确保您拥有所需的权限。如需详细了解如何创建数据集,请参阅创建数据集

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 按照说明创建数据集,直到看到高级选项 > 加密

  3. 加密下,选择 Cloud KMS 密钥

  4. 针对密钥类型,选择 Cloud KMS with Autokey,然后点击请求新密钥。当您的密钥成功创建并可供使用时,系统会显示一条消息。

  5. 如需完成数据集的创建,请点击创建数据集

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:您要在其中创建受保护资源的 Autokey 文件夹中的资源项目的项目 ID。
  • LOCATION:您要在其中创建受保护资源的位置。
  • DATASET_ID:要为新数据集使用的 ID。
  • DATASET_NAME:新数据集的直观易记名称。
  • DATASET_DESCRIPTION:新数据集的说明。

Cloud KMS 不允许您删除 KeyHandle 资源。如果您使用的是“创建并销毁”模式,则尝试重新创建 KeyHandle 会产生 ALREADY_EXISTS 错误。为避免此问题,您可以导入之前创建的 KeyHandle。如需了解详情,请参阅本页中的在 Terraform 中创建和销毁模式

API

  1. 通过创建 KeyHandle 请求新的 Cloud KMS 密钥:

    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:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。
    • LOCATION:您要创建受保护资源的位置。
    • RESOURCE_TYPE:您要创建的资源类型,例如 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。

  2. 查找与密钥句柄关联的 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:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。
    • 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。您可以使用此资源 ID,就像使用任何其他 Cloud KMS 资源的资源 ID 一样。

  3. 使用带有 --destination_kms_key 标志的 bq mk 命令创建加密数据集。

    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:此数据集中新表的默认生命周期(以秒为单位)。
    • DATASET_DESCRIPTION:新数据集的说明。
    • RESOURCE_PROJECT_ID:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。
    • DATASET_ID:您要创建的数据集的 ID。

    如需详细了解 bq 工具,请参阅探索 bq 命令行工具

将 Autokey 与 Secret Manager 资源搭配使用

Autokey 会创建一个密钥来保护同一项目和位置中的所有 Secret。轮替密钥后,添加到项目中的新 Secret 会使用密钥的新主版本。

只有在使用 Terraform 或 REST API 创建资源时,Secret Manager 才与 Cloud KMS Autokey 兼容。

创建受保护的 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:您要在其中创建受保护资源的 Autokey 文件夹内的资源项目的项目 ID。
  • SECRET_ID:要为新 Secret 使用的 ID。

如果您尝试为已存在密钥句柄的同一项目和位置中的密钥创建密钥句柄,系统会返回一条错误消息,其中包含现有密钥句柄的详细信息。如果发生这种情况,请确保您只有一个用于创建密钥句柄的代码块。您可以使用密钥句柄的 ID (KEY_HANDLE) 重复使用该密钥句柄,以创建应共享该密钥的其他 Secret。

Cloud KMS 不允许您删除 KeyHandle 资源。如果您使用的是“创建并销毁”模式,则尝试重新创建 KeyHandle 会产生 ALREADY_EXISTS 错误。为避免此问题,您可以导入之前创建的 KeyHandle。如需了解详情,请参阅本页中的在 Terraform 中创建和销毁模式

API

  1. 通过创建 KeyHandle 请求新的 Cloud KMS 密钥:

    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:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。
    • LOCATION:您要创建受保护资源的位置。
    • RESOURCE_TYPE:您要创建的资源类型,例如 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。

    如果您尝试在已存在密钥句柄的同一项目和位置为 Secret 创建密钥句柄,系统会返回一条错误消息,其中包含现有密钥句柄的详细信息。在这种情况下,请跳过下一步,并使用 existingKmsKey 字段中的密钥资源 ID 来保护您的新密钥。

  2. 查找与密钥句柄关联的 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:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。
    • 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。您可以使用此资源 ID,就像使用任何其他 Cloud KMS 资源的资源 ID 一样。

  3. 使用带有 --kms-key-name 标志的 gcloud secrets create 命令创建具有自动复制功能的加密 Secret。

    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:您要在其中创建受保护资源的 Autokey 文件夹中资源项目的项目 ID。

Terraform 中的“创建和销毁”模式

Cloud KMS 不允许您删除 KeyHandle 资源。如果您使用的是 Terraform 和“创建并销毁”模式,则尝试重新创建 KeyHandle 会产生 ALREADY_EXISTS 错误。您可以使用 import 块来避免此问题。在 google_kms_key_handle 资源的 resource 代码块之前插入以下代码块:

import {
  to = google_kms_key_handle.KEY_HANDLE
  id = "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE"
}

后续步骤