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

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

事前準備

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

  1. 如果 Autokey 資料夾中沒有資源專案,您必須建立專案,才能保留要建立的資源。
  2. 如要取得使用 Autokey 建立受保護資源所需的權限,請要求管理員授予您資料夾或專案的 Cloud KMS Autokey 使用者 (roles/cloudkms.autokeyUser) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

    您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

  3. 您也需要在 Autokey 資料夾或資料夾內的資源專案中,具備建立資源的權限。如要進一步瞭解建立各項資源所需的權限,請參閱特定服務的說明文件。您可以在 CMEK 整合服務表格中找到這項服務,然後點選您要建立的資源類型連結,即可找到這份說明文件。

搭配 Compute Engine 資源使用 Autokey

Autokey 會為每個磁碟、映像檔和機器映像檔建立新的金鑰,位置與建立的資源相同。

Autokey 不會為快照建立新金鑰。快照應使用用來加密磁碟的相同金鑰。如果您使用Google Cloud 主控台建立快照,系統會自動將磁碟使用的加密金鑰套用至快照。如果您使用 gcloud CLI、Terraform 或 Compute Engine API 建立快照,必須指定用於加密磁碟的金鑰,並使用該金鑰加密快照。

如要進一步瞭解如何搭配使用 CMEK 和快照,請參閱「從以 CMEK 加密的磁碟建立快照」。

建立受保護的 Compute Engine 資源

控制台

如要建立磁碟,請完成下列步驟:

  1. 在 Google Cloud 控制台中,前往「Disks」頁面。

    前往「磁碟」

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

  3. 在「Encryption」下方,選取「Cloud KMS key」

  4. 在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「申請新的金鑰」。系統會顯示訊息,指出金鑰已成功建立並可供使用。

  5. 按一下「Create」即可完成磁碟建立作業。

您可以按照類似的程序建立受保護的 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 建立的金鑰會指派為值區的預設金鑰。

Autokey 不會為物件建立金鑰。根據預設,在值區中建立的物件會使用值區預設金鑰。如果您想使用值區預設金鑰以外的金鑰來加密物件,可以手動建立 CMEK,並在建立物件時使用該金鑰。

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

建立受保護的 Cloud Storage 資源

控制台

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

    前往「建立 bucket」

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

  3. 在「Choose how to protect object data」(選擇保護物件資料的方式) 下方,展開「Data encryption」(資料加密) 專區,然後選取「Cloud KMS key」(Cloud KMS 金鑰)

  4. 在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「申請新的金鑰」。系統會顯示訊息,指出金鑰已成功建立並可供使用。

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

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:上一個步驟輸出內容中的索引鍵句柄要求作業 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 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:在先前步驟的輸出內容中傳回的鍵名稱。

搭配 BigQuery 資源使用 Autokey

多個 BigQuery 版本都支援 Cloud KMS。請先確認您使用的 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」

  4. 在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「申請新的金鑰」。系統會顯示訊息,指出金鑰已成功建立並可供使用。

  5. 按一下「Create dataset」(建立資料集),即可完成資料集建立作業。

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。您可以使用這個資源 ID,就像使用任何其他 Cloud KMS 資源的資源 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 指令列工具」。

在 Secret Manager 資源中使用 Autokey

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。您可以使用這個資源 ID,就像使用任何其他 Cloud KMS 資源的資源 ID 一樣。

  3. 使用 gcloud secrets create 指令--kms-key-name 標記,建立可自動複製的加密 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:新機密金鑰要使用的 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"
}

後續步驟