使用 Cloud KMS Autokey 建立受保護的資源

本頁面說明如何使用 Cloud KMS Autokey 建立的金鑰進行加密,藉此建立受保護的資源。如要進一步瞭解 Autokey,請參閱「Autokey 總覽」。

事前準備

如要使用 Autokey 建立受保護的資源,請先完成下列準備步驟:

  1. 如果 Autokey 資料夾中沒有資源專案,您必須建立專案,存放您打算建立的資源。
  2. 如要取得使用 Autokey 建立受保護資源所需的權限,請要求管理員在資料夾或專案中授予您「Cloud KMS Autokey 使用者 」(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 控制台的「Disks」(磁碟) 頁面。

    前往「Disks」(磁碟)

  2. 按一下 [Create disk] (建立磁碟),然後輸入新磁碟的屬性。

  3. 在「Encryption」(加密) 底下,選取「Cloud KMS key」(Cloud KMS 金鑰)

  4. 在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「要求新金鑰」。畫面上會顯示訊息,指出金鑰已成功建立,可以開始使用。

  5. 如要完成磁碟建立程序,請按一下「建立」

您可以按照類似程序建立受保護的 VM 執行個體、映像檔和機器映像檔資源。

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:上一個步驟輸出內容中的金鑰控制代碼要求作業 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. 使用 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:上一個步驟輸出中傳回的金鑰名稱。

搭配 Cloud Storage 資源使用 Autokey

Autokey 會在與值區相同的位置建立新金鑰。Autokey 建立的金鑰會指派為 bucket 預設金鑰。

Autokey 不會為物件建立金鑰。根據預設,在值區中建立的物件會使用值區預設金鑰。如要使用非值區預設金鑰的金鑰加密物件,可以建立 CMEK,並在建立物件時使用該金鑰。

如要變更指派給值區的預設金鑰,可以使用現有的 CMEK,包括 Autokey 建立的金鑰。

建立受保護的 Cloud Storage 資源

控制台

  1. 前往 Google Cloud 控制台的「建立 bucket」頁面。

    前往「建立 bucket」

  2. 按照操作說明建立新 bucket,直到「選擇保護物件資料的方式」為止。

  3. 在「選擇保護物件資料的方式」下方,展開「資料加密」部分,然後選取「Cloud KMS 金鑰」

  4. 在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「要求新金鑰」。畫面上會顯示訊息,指出金鑰已成功建立,可以開始使用。

  5. 按一下「Create」(建立),完成值區建立程序。

Terraform

下列 Terraform 範例會建立金鑰控制代碼,並使用傳回的金鑰保護新的儲存空間 bucket:

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:新 bucket 的名稱。

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:上一個步驟輸出內容中的金鑰控制代碼要求作業 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 資源的資源 ID 一樣,使用這個資源 ID。

  3. 使用 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:新 bucket 的名稱。值區名稱必須符合值區命名規定
    • LOCATION:要建立 bucket 的位置。
    • KEY_PROJECT_ID:金鑰專案的專案 ID。
    • LOCATION:要建立資源的位置。
    • KEY_NAME:上一個步驟輸出中傳回的金鑰名稱。

搭配 BigQuery 資源使用 Autokey

Cloud KMS 適用於多個版本的 BigQuery。請先確認您使用的 BigQuery 版本與 Cloud KMS 相容,再嘗試使用 Autokey 保護 BigQuery 資源。如要進一步瞭解 BigQuery 版本,請參閱「瞭解 BigQuery 版本」。

針對每個新資料集,Autokey 會在與資源本身相同的位置建立新金鑰,做為資料集的預設金鑰。

Autokey 不會為資料表、查詢、暫時資料表或模型建立金鑰。根據預設,這些資源會受到資料集預設金鑰保護。如要使用資料集預設金鑰以外的金鑰保護資料集中的資源,可以手動建立 CMEK,並在建立資源時使用該金鑰。

如果查詢和臨時資料表不在資料集中,請使用專案預設金鑰。請為含有 BigQuery 資源的專案中每個位置,使用不同的專案預設金鑰。如要進一步瞭解如何使用專案預設金鑰,請參閱「設定專案預設金鑰」。

如要進一步瞭解如何將 CMEK 與 BigQuery 搭配使用,請參閱客戶管理的 Cloud KMS 金鑰一文。

建立受保護的 BigQuery 資源

控制台

嘗試使用 Autokey 建立 BigQuery 資料集前,請確認您具備必要權限。如要進一步瞭解如何建立資料集,請參閱「建立資料集」。

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。BigQuery

    前往 BigQuery

  2. 按照建立資料集的說明操作,直到看到「進階選項」>「加密」

  3. 在「Encryption」(加密) 底下,選取「Cloud KMS key」(Cloud KMS 金鑰)

  4. 在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「要求新金鑰」。畫面上會顯示訊息,指出金鑰已成功建立,可以開始使用。

  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:上一個步驟輸出內容中的金鑰控制代碼要求作業 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 資源的資源 ID 一樣,使用這個資源 ID。

  3. 使用 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:這個資料集中新資料表的預設生命週期 (以秒為單位)。
    • DATASET_DESCRIPTION:新資料集的說明。
    • RESOURCE_PROJECT_ID:Autokey 資料夾中資源專案的專案 ID,您要在其中建立受保護的資源。
    • DATASET_ID:您要建立的資料集 ID。

    如要進一步瞭解 bq 工具,請參閱「探索 bq 指令列工具」。

搭配使用 Autokey 與 Secret Manager 資源

Autokey 會建立單一金鑰,保護相同專案和位置的所有密碼。金鑰輪替後,新增至專案的密鑰會使用新的主要金鑰版本。

使用 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:新密鑰使用的 ID。

如果您嘗試為同一個專案和位置的密鑰建立金鑰控制代碼,但該密鑰控制代碼已存在,系統會傳回錯誤訊息,其中包含現有金鑰控制代碼的詳細資料。如果發生這種情況,請確認您只建立一個建立金鑰控制代碼的區塊。您可以使用金鑰控制代碼的 ID (KEY_HANDLE) 重複使用該控制代碼,建立應共用金鑰的其他密鑰。

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。

    如果您嘗試在同一個專案和位置建立密鑰控制代碼,但該專案和位置已有密鑰控制代碼,系統會傳回錯誤訊息,其中包含現有密鑰控制代碼的詳細資料。在這種情況下,請略過下一個步驟,並在 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:上一個步驟輸出內容中的金鑰控制代碼要求作業 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 資源的資源 ID 一樣,使用這個資源 ID。

  3. 使用 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:新密鑰使用的 ID。
    • KEY_PROJECT_ID:金鑰專案的專案 ID。
    • KEY_NAME:上一個步驟輸出中傳回的金鑰名稱。
    • RESOURCE_PROJECT_ID:Autokey 資料夾中資源專案的專案 ID,您要在其中建立受保護的資源。

搭配 Dataflow 資源使用 Autokey

Autokey 可用於為每項 Dataflow 工作建立單一金鑰。

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": "dataflow.googleapis.com/Job"}'
    

    更改下列內容:

    • USER_PROJECT:要為與這項要求相關聯的費用計費的專案。
    • RESOURCE_PROJECT_ID:Autokey 資料夾中資源專案的專案 ID,您要在其中建立受保護的資源。
    • LOCATION:您要在其中建立受保護資源的位置。

    輸出結果會與下列內容相似:

    {
      "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:上一個步驟輸出內容中的金鑰控制代碼要求作業 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 一樣。

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"
}

後續步驟