本頁面說明如何使用 Cloud KMS Autokey 建立的金鑰加密,藉此建立受保護的資源。如要進一步瞭解 Autokey,請參閱 Autokey 總覽。
事前準備
如要使用 Autokey 建立受保護的資源,請先完成下列準備步驟:
- 如果 Autokey 資料夾中沒有資源專案,您必須建立專案,存放您打算建立的資源。
-
如要取得使用 Autokey 建立受保護資源所需的權限,請要求管理員在資料夾或專案中,將 Cloud KMS Autokey 使用者 (
roles/cloudkms.autokeyUser
) IAM 角色授予您。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。 - 此外,您還需要 Autokey 資料夾或資料夾內資源專案的資源建立權限。如要進一步瞭解建立各項資源所需的權限,請參閱服務專屬說明文件。如要查看這份說明文件,請在 CMEK 整合表格中找出服務,然後前往要建立的資源類型連結。
搭配 Compute Engine 資源使用 Autokey
Autokey 會為每個磁碟、映像檔和機器映像檔建立新金鑰,並存放在與所建立資源相同的位置。
Autokey 不會為快照建立新金鑰,快照應使用與磁碟加密相同的金鑰。如果您使用Trusted Cloud 控制台建立快照,系統會自動將磁碟使用的加密金鑰套用至快照。如果您使用 gcloud CLI、Terraform 或 Compute Engine API 建立快照,必須找出用於加密磁碟的金鑰,並使用該金鑰加密快照。
如要進一步瞭解如何搭配使用 CMEK 與快照,請參閱「從以 CMEK 加密的磁碟建立快照」。
建立受保護的 Compute Engine 資源
控制台
如要建立磁碟,請完成下列步驟:
前往 Trusted Cloud 控制台的「Disks」(磁碟) 頁面。
按一下 [Create disk] (建立磁碟),然後輸入新磁碟的屬性。
在「Encryption」(加密) 底下,選取「Cloud KMS key」(Cloud KMS 金鑰)。
在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「要求新金鑰」。訊息會顯示金鑰是否已成功建立,以及何時可供使用。
如要完成磁碟建立程序,請按一下「建立」。
您可以按照類似程序建立受保護的 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
:資源專案的專案 ID,位於 Autokey 資料夾中,您要在該資料夾中建立受保護的資源。KEY_HANDLE
:用於金鑰控制代碼的 ID。LOCATION
:要建立受保護資源的位置。DISK_NAME
:新磁碟的名稱。ZONE
:受保護資源的可用區。這必須是您建立資源所在位置的區域。舉例來說,如果您在us-central1
位置建立資源,可用區可能是us-central1-a
。
Cloud KMS 不允許刪除 KeyHandle
資源。如果您使用建立和銷毀模式,嘗試重新建立 KeyHandle
會產生 ALREADY_EXISTS
錯誤。如要避免這個問題,可以匯入先前建立的 KeyHandle
。詳情請參閱本頁面的「在 Terraform 中建立及銷毀模式」。
API
建立
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。找出與金鑰控制代碼相關聯的 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 一樣。使用
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 不會為物件建立金鑰。根據預設,在值區中建立的物件會使用值區預設金鑰。如要使用非 Bucket 預設金鑰的金鑰加密物件,可以手動建立 CMEK,並在建立物件時使用該金鑰。
如要變更指派給 bucket 的預設金鑰,可以使用任何現有的 CMEK,包括 Autokey 建立的金鑰。
建立受保護的 Cloud Storage 資源
控制台
前往 Trusted Cloud 控制台的「建立 bucket」頁面。
按照操作說明建立新 bucket,直到看到「選擇保護物件資料的方式」為止。
在「選擇保護物件資料的方式」下方,展開「資料加密」部分,然後選取「Cloud KMS 金鑰」。
在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「要求新金鑰」。訊息會顯示金鑰是否已成功建立,以及何時可供使用。
按一下「建立」,完成值區建立程序。
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
:資源專案的專案 ID,位於 Autokey 資料夾中,您要在該資料夾中建立受保護的資源。KEY_HANDLE
:用於金鑰控制代碼的 ID。LOCATION
:要建立受保護資源的位置。BUCKET_NAME
:新值區的名稱。
Cloud KMS 不允許刪除 KeyHandle
資源。如果您使用建立和銷毀模式,嘗試重新建立 KeyHandle
會產生 ALREADY_EXISTS
錯誤。如要避免這個問題,可以匯入先前建立的 KeyHandle
。詳情請參閱本頁面的「在 Terraform 中建立及銷毀模式」。
API
建立
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。找出與金鑰控制代碼相關聯的 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。使用
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
Cloud KMS 適用於多個 BigQuery 版本。請務必確認您使用的 BigQuery 版本與 Cloud KMS 相容,再嘗試使用 Autokey 保護 BigQuery 資源。如要進一步瞭解 BigQuery 版本,請參閱「瞭解 BigQuery 版本」。
針對每個新資料集,Autokey 會在與資源本身相同的位置建立新金鑰,做為資料集的預設金鑰。
Autokey 不會為資料表、查詢、暫時資料表或模型建立金鑰。根據預設,這些資源會受到資料集預設金鑰保護。如要使用資料集預設金鑰以外的金鑰保護資料集中的資源,可以手動建立 CMEK,並在建立資源時使用該金鑰。
如果查詢和臨時資料表不在資料集中,請使用專案預設金鑰。請為含有 BigQuery 資源的專案中每個位置,使用不同的專案預設金鑰。如要進一步瞭解如何使用專案預設金鑰,請參閱「設定專案預設金鑰」。
如要進一步瞭解如何將 CMEK 與 BigQuery 搭配使用,請參閱客戶管理的 Cloud KMS 金鑰一文。
建立受保護的 BigQuery 資源
控制台
嘗試使用 Autokey 建立 BigQuery 資料集前,請確認您具備必要權限。如要進一步瞭解如何建立資料集,請參閱「建立資料集」。
前往 Trusted Cloud 控制台的「BigQuery」BigQuery頁面。
按照建立資料集的說明操作,直到看到「進階選項」>「加密」為止。
在「Encryption」(加密) 底下,選取「Cloud KMS key」(Cloud KMS 金鑰)。
在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「要求新金鑰」。訊息會顯示金鑰是否已成功建立,以及何時可供使用。
按一下「建立資料集」,即可完成資料集建立作業。
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
:新資料集的說明。
Cloud KMS 不允許刪除 KeyHandle
資源。如果您使用建立和銷毀模式,嘗試重新建立 KeyHandle
會產生 ALREADY_EXISTS
錯誤。如要避免這個問題,可以匯入先前建立的 KeyHandle
。詳情請參閱本頁的「在 Terraform 中建立及終止模式」。
API
建立
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。找出與金鑰控制代碼相關聯的 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。使用
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
:資源專案的專案 ID,位於 Autokey 資料夾中,您要在該資料夾中建立受保護的資源。SECRET_ID
:新密鑰使用的 ID。
如果您嘗試為同一個專案和位置中的密鑰建立金鑰控制代碼,但該密鑰已存在金鑰控制代碼,系統會傳回錯誤訊息,其中包含現有金鑰控制代碼的詳細資料。如果發生這種情況,請確認您只建立一個金鑰控制代碼的區塊。您可以使用金鑰控制代碼的 ID (KEY_HANDLE
) 重複使用該控制代碼,建立應共用金鑰的其他密鑰。
Cloud KMS 不允許刪除 KeyHandle
資源。如果您使用建立和銷毀模式,嘗試重新建立 KeyHandle
會產生 ALREADY_EXISTS
錯誤。如要避免這個問題,可以匯入先前建立的 KeyHandle
。詳情請參閱本頁面的「在 Terraform 中建立及銷毀模式」。
API
建立
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,保護新密鑰。找出與金鑰控制代碼相關聯的 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。使用
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
建立
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。找出與金鑰控制代碼相關聯的 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"
}
後續步驟
- 進一步瞭解何時該使用 Autokey。
- 進一步瞭解 Autokey 的運作方式。