您可以改用 Cloud Key Management Service 金鑰,保護 Compute Engine 磁碟、快照和機器映像檔,而非 Google-owned and Google-managed encryption keys。使用 Cloud KMS 金鑰可讓您控管及管理加密金鑰,並符合特定法規遵循或監管需求。詳情請參閱「客戶自行管理的加密金鑰」。
在 Cloud KMS 中管理的金鑰稱為「客戶自行管理的加密金鑰」(CMEK)。 本文說明如何使用手動建立的 CMEK,建立及保護 Compute Engine 磁碟、機器映像檔、即時快照和標準快照。
如要使用 Cloud KMS Autokey 建立的 CMEK,請參閱「使用 Cloud KMS Autokey 建立受保護的資源」。
事前準備
- 瞭解磁碟、映像檔、標準快照和虛擬機器 (VM) 執行個體。
- 決定您要在同一個 Google Cloud 專案或不同的專案中執行 Compute Engine 和 Cloud KMS。如要瞭解 Google Cloud 專案 ID 和專案編號,請參閱「識別專案」。
- 針對執行 Cloud KMS 的 Google Cloud 專案,請執行下列操作:
- 如要在機密模式下建立新的 Hyperdisk Balanced 磁碟區,請先查看相關限制和支援的區域,確認您的用途是否符合條件。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上您打算如何使用範例的分頁:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,無須設定驗證。
gcloud
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
- 設定預設地區和區域。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。
必要角色和權限
Compute Engine 服務代理的格式如下:
service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
您可以使用 Google Cloud CLI 指派角色:
gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
--member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter
更改下列內容:
KMS_PROJECT_ID:執行 Cloud KMS 的Google Cloud 專案 ID (即使是執行 Compute Engine 的專案也一樣)PROJECT_NUMBER:執行 Compute Engine 資源的專案專案編號 (不是專案 ID) Google Cloud Google Cloud
為確保 Compute Engine 服務代理程式具備使用 Cloud KMS 金鑰保護資源的必要權限,請要求管理員在專案中,將 Cloud KMS CryptoKey 加密者/解密者 (roles/cloudkms.cryptoKeyEncrypterDecrypter) IAM 角色授予 Compute Engine 服務代理程式。
這個預先定義的角色具備使用 Cloud KMS 金鑰保護資源所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要使用 Cloud KMS 金鑰保護資源,您必須具備下列權限:
-
如要輪替保護磁碟的加密金鑰,請按照下列步驟操作:
compute.disks.updateKmsKey -
如要輪替保護快照的加密金鑰:
compute.snapshots.updateKmsKey
管理員或許還可透過自訂角色或其他預先定義的角色,將這些權限授予 Compute Engine 服務代理程式。
加密規格
用來保護 Compute Engine 資料的 Cloud KMS 金鑰是 AES-256 金鑰。這些金鑰是金鑰加密金鑰,可加密加密您資料的資料加密金鑰,而非資料本身。
磁碟上的資料會使用 Google-owned and Google-managed encryption keys加密。如要瞭解 Google Cloud預設加密的相關規格,請參閱安全性說明文件中的「預設靜態資料加密」。
使用 Hyperdisk Balanced 機密模式和 Cloud HSM 時,資料加密金鑰 (DEK) 會透過採用專屬硬體支援的封閉區,取得額外的安全屬性。
限制
您無法使用 CMEK 加密現有資源。您只能在建立磁碟、映像檔和快照時,使用 CMEK 加密這些項目。
從 CMEK 加密的即時快照建立磁碟時,您必須指定用於加密來源磁碟的金鑰。使用其他以 CMEK 加密的資源 (例如磁碟複製和標準快照) 時,您不必指定金鑰。
從以 CMEK 加密的磁碟建立區域範圍快照 (預先發布) 時,您必須使用與快照位於相同位置的區域 CMEK 建立快照。這可確保快照的區域隔離,並提高快照的可靠性。
您無法在本機 SSD 磁碟使用自己的金鑰,因為金鑰是由 Google Cloud 基礎架構代管,且 VM 終止後就會刪除。
區域資源 (磁碟) 只能透過下列 Cloud KMS 位置的金鑰加密:
- 與磁碟位於相同區域的金鑰。
- 與磁碟位於相同地理位置的多區域金鑰。
- 全域位置的金鑰。
舉例來說,
us-west1-a區域中的磁碟可由全球位置、us-west1區域或us多區域中的金鑰加密。任何位置的金鑰都可以加密全域資源 (例如映像檔和快照)。詳情請參閱「Cloud KMS 位置類型」。
您無法變更或移除圖片或即時快照的加密金鑰。
您無法移除磁碟或快照的加密金鑰,也不能將金鑰從 CMEK 變更為 Google-owned and managed key。請改為建立磁碟或快照的副本,並為副本指定新的加密類型。
詳情請參閱「從磁碟移除 CMEK」和「從快照移除 CMEK」。
您無法旋轉或變更線上 Confidential Hyperdisk 磁碟區的 CMEK,也無法變更線上 Hyperdisk 磁碟區的 CMEK,這些磁碟區會連結至不支援的機器類型。
您只能對下列磁碟類型輪替或變更 CMEK:
- 所有 Persistent Disk 磁碟區
- 並非使用 Terraform 供應商建立的磁碟和快照,適用於 Google Cloud
- 透過即時快照建立的 Hyperdisk 磁碟區
- 離線 Hyperdisk 磁碟區
- 離線機密 Hyperdisk 磁碟區
- 附加至第一代或第二代機型的線上 Hyperdisk 磁碟區
附加至下列第三代或第四代機器類型的線上 Hyperdisk 磁碟區:
- A3
- A4
- Z3
- H4D
- 所有 TPU 版本
- 裸機 A4X、C4、C4A、C4D、C3 和 X4 機型
如要變更或輪替磁碟或快照的 CMEK,必須使用 gcloud CLI 或 REST,無法使用 Google Cloud 控制台。
如果您使用 Terraform 供應商 Google Cloud 建立或管理 CMEK 加密磁碟和快照,就無法變更或輪替 CMEK。請勿嘗試使用 gcloud CLI 或 REST 變更或輪替 CMEK。
如果您是透過複製磁碟建立 Hyperdisk 磁碟區,除非已刪除來源磁碟和來源磁碟的所有其他副本,否則無法變更金鑰。
手動或自動建立金鑰
您可以手動建立 Cloud KMS 金鑰,也可以使用 Cloud KMS Autokey。Autokey 會自動佈建及指派金鑰,簡化 Cloud KMS 金鑰的建立和管理作業。使用 Autokey 時,您不需要事先佈建金鑰環、金鑰和服務帳戶。而是會在建立 Compute Engine 資源時,視需要產生。詳情請參閱「Autokey 總覽」。
手動建立金鑰環和金鑰
針對執行 Cloud KMS 的 Google Cloud 專案,按照「建立金鑰環和金鑰」一文的說明建立金鑰環和金鑰。
使用 CMEK 加密新的永久磁碟
您可以在建立 VM 或磁碟時提供金鑰,加密新的永久磁碟。
控制台
- 前往 Google Cloud 控制台的「Disks」(磁碟) 頁面。
- 按一下 [Create disk] (建立磁碟),然後輸入新磁碟的屬性。
- 在「Encryption」(加密) 底下,選取 [Customer-managed key] (客戶管理的金鑰)。
- 在下拉式選單中,選取要用來加密這個磁碟的 Cloud KMS 金鑰。
- 如要建立磁碟,請按一下「建立」。
gcloud
使用 gcloud compute disks create 指令建立加密磁碟,並使用 --kms-key 旗標指定金鑰。
gcloud compute disks create DISK_NAME \ --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
更改下列內容:
DISK_NAME:新磁碟的名稱KMS_PROJECT_ID:擁有 Cloud KMS 金鑰的專案REGION:金鑰所在的區域KEY_RING:包含金鑰的金鑰環名稱KEY:用於加密磁碟的金鑰名稱
REST
建構對 instances.insert 方法的 POST 要求。如要加密磁碟,請搭配使用 diskEncryptionKey 屬性和 kmsKeyName 屬性。舉例來說,您可以在建立 VM 時,使用下列項目透過 Cloud KMS 金鑰加密新磁碟:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
{
"type": "PERSISTENT",
"diskEncryptionKey": {
"kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
},
"initializeParams": {
"sourceImage": "SOURCE_IMAGE"
},
"boot": true
}
],
...
}
更改下列內容:
PROJECT_ID:執行 Compute Engine 的Google Cloud 專案 IDZONE:要建立 VM 的可用區MACHINE_TYPE:機型,例如c3-standard-4KMS_PROJECT_ID:擁有 Cloud KMS 金鑰的專案REGION:磁碟所在的區域KEY_RING:包含金鑰的金鑰環名稱KEY:用於加密磁碟的金鑰名稱SOURCE_IMAGE:建立 VM 時要使用的映像檔,例如projects/debian-cloud/global/images/debian-13-trixie-v20260902
同樣地,您可以使用 disks.insert 方法建立新的獨立式永久磁碟,並使用 Cloud KMS 金鑰加密:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=SOURCE_IMAGE
{
"name": "DISK_NAME",
"diskEncryptionKey": {
"kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
},
"type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE"
}
更改下列內容:
PROJECT_ID:執行 Compute Engine 的Google Cloud 專案 IDZONE:要在其中建立磁碟的可用區SOURCE_IMAGE:建立磁碟時要使用的映像檔,例如projects/debian-cloud/global/images/debian-13-trixie-v20260902DISK_NAME:新磁碟的名稱KMS_PROJECT_ID:擁有 Cloud KMS 金鑰的專案REGION:磁碟所在的區域KEY_RING:包含金鑰的金鑰環名稱KEY:用於加密磁碟的金鑰名稱DISK_TYPE:要建立的磁碟類型
在機密模式中建立 Hyperdisk Balanced 磁碟
您可以使用Google Cloud 控制台、Google Cloud CLI 或 REST,在機密模式下建立新的 Hyperdisk Balanced 磁碟。如要建立非機密模式的磁碟,請按照「從以 CMEK 加密的快照建立永久磁碟」一文中的步驟操作。
控制台
- 前往 Google Cloud 控制台的「Disks」(磁碟) 頁面。
- 按一下 [Create disk] (建立磁碟),然後輸入新磁碟的屬性。
- 在「Disk settings」(磁碟設定) 部分,選擇「Hyperdisk Balanced」(Hyperdisk Balanced) 做為磁碟類型。
- 選用。變更磁碟的預設「大小」、「佈建的 IOPS」和「佈建輸送量」設定。
- 在「Encryption」(加密) 部分中,選取「Cloud KMS key」(Cloud KMS 金鑰)。
- 在金鑰清單中,選取要用來加密這個磁碟的 Cloud HSM 金鑰。
- 在「機密運算」部分,選取「啟用機密運算服務」。
- 如要建立磁碟,請按一下「建立」。
gcloud
如要使用 gcloud compute disks create 指令,透過 Hyperdisk Balanced 機密模式加密新磁碟,請按照下列步驟操作:使用 --confidential-compute 旗標啟用機密模式,並使用 --kms-key 旗標指定金鑰。
gcloud compute disks create DISK_NAME \ --type=hyperdisk-balanced \ --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY \ --confidential-compute
更改下列內容:
DISK_NAME:新磁碟的名稱KMS_PROJECT_ID:擁有 Cloud HSM 金鑰的專案REGION:金鑰所在的區域KEY_RING:包含金鑰的金鑰環名稱KEY:用於加密磁碟的金鑰名稱
REST
建構對 instances.insert 方法的 POST 要求。如要使用 Hyperdisk Balanced 機密模式加密磁碟,請搭配使用 diskEncryptionKey 屬性和 kmsKeyName 屬性,並設定 enableConfidentialCompute 旗標。舉例來說,您可以在建立 VM 時,使用下列項目透過 Cloud HSM 金鑰加密新磁碟:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
{
"type": "DISK_TYPE",
"diskEncryptionKey": {
"kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
},
"initializeParams": {
"sourceImage": "SOURCE_IMAGE",
"enableConfidentialCompute": true
},
"boot": true
}
],
"networkInterfaces": [
{
"network": "global/networks/default"
}
]
}
更改下列內容:
DISK_TYPE:要建立的磁碟類型,例如hyperdisk-balancedPROJECT_ID:執行 Compute Engine 的 Google Cloud 專案 IDZONE:要建立 VM 的可用區MACHINE_TYPE:機型,例如n2d-standard-4KMS_PROJECT_ID:擁有 Cloud HSM 金鑰的專案REGION:磁碟所在的區域KEY_RING:包含金鑰的金鑰環名稱KEY:用於加密磁碟的金鑰名稱SOURCE_IMAGE:建立 VM 時使用的機密 VM 支援映像檔,例如projects/debian-cloud/global/images/debian-13-trixie-v20260902
同樣地,您可以使用 disks.insert 方法,為 Hyperdisk Balanced 建立新的機密模式:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=SOURCE_IMAGE
{
"name": "DISK_NAME",
"diskEncryptionKey": {
"kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
},
"type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
"enableConfidentialCompute": true
}
更改下列內容:
PROJECT_ID:執行 Compute Engine 的Google Cloud 專案 IDZONE:要在其中建立磁碟的可用區SOURCE_IMAGE:建立磁碟時支援機密 VM 的映像檔,例如:projects/debian-cloud/global/images/debian-13-trixie-v20260902DISK_NAME:新磁碟的名稱KMS_PROJECT_ID:擁有 Cloud HSM 金鑰的專案REGION:磁碟所在的區域KEY_RING:包含金鑰的金鑰環名稱KEY:用於加密磁碟的金鑰名稱DISK_TYPE:要建立的磁碟類型,例如hyperdisk-balanced。
從以 CMEK 加密的磁碟建立快照
如要從以 CMEK 加密的磁碟建立快照,您必須使用與加密磁碟相同的加密金鑰建立快照。
除非來源磁碟也使用 CMEK,否則您無法建立使用 CMEK 的快照。此外,除非您建立全新的磁碟映像檔和新的永久磁碟,否則無法將 CMEK 加密磁碟或快照轉換為使用Google Cloud 預設加密功能。
以 CMEK 加密的磁碟快照是增量快照。
控制台
- 前往 Google Cloud 控制台的「快照」頁面。
- 按一下 [Create snapshot] (建立快照)。
- 在「Source disk」(來源磁碟) 底下,選擇快照的來源磁碟。系統會自動使用來源磁碟的金鑰加密快照。
gcloud
如果是客戶代管的加密,用來加密磁碟的 Cloud KMS 金鑰也會用來加密快照。
您可以在快照設定定義的儲存位置政策中建立快照,也可以使用所選的替代儲存位置。詳情請參閱「選擇快照儲存位置」。
如要在快照設定中指定的預先定義或自訂預設位置建立快照,請使用
gcloud compute snapshots create指令。gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE-
如要覆寫快照設定,將快照儲存在自訂儲存位置,請加入
--storage-location標記,指出儲存快照的位置。gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE \ --storage-location=STORAGE_LOCATION -
(預先發布) 如要在允許的區域中建立區域範圍快照,請加入
--region標記,指出要建立快照的位置。gcloud beta compute snapshots create SNAPSHOT_NAME \ --region=SNAPSHOT_SCOPE_REGION --source-disk=SOURCE_DISK_NAME \ --source-disk-zone=SOURCE_ZONE \ --snapshot-type=SNAPSHOT_TYPE \ --kms-key=projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY
更改下列內容:
- SNAPSHOT_NAME:快照名稱。
- SOURCE_ZONE:來源磁碟的可用區。
- SOURCE_DISK_NAME:要建立快照的磁碟區名稱。
- KMS_PROJECT_ID:包含儲存在 Cloud Key Management Service 中的加密金鑰的專案。
- KEY_REGION:Cloud KMS 金鑰所在的區域。
- KEY_RING:含有 Cloud KMS 金鑰的金鑰環名稱。
- SNAPSHOT_KEY:用來加密來源磁碟的 Cloud KMS 金鑰名稱。
- SNAPSHOT_TYPE:快照類型,可以是 STANDARD 或 ARCHIVE。
如果未指定快照類型,系統會建立
STANDARD快照。 -
STORAGE_LOCATION:選用:如果是全域範圍的快照,則為您要儲存快照的 Cloud Storage 多地區或 Cloud Storage 地區。您只能指定一個儲存位置。
只有在想覆寫快照設定中預先定義或自訂的預設儲存位置時,才使用
--storage-location參數。 -
SNAPSHOT_SCOPE_REGION:選用:如果是區域範圍快照,快照的範圍所屬區域。如果加入這個參數,就無法使用
--storage-location參數。系統會自動將 STORAGE_LOCATION 設為 SNAPSHOT_SCOPE_REGION。
REST
您可以在快照設定定義的儲存位置政策中建立快照,也可以使用所選的替代儲存位置。詳情請參閱「選擇快照儲存位置」。
-
如要在快照設定中指定的預先定義或自訂預設位置建立快照,請向
snapshots.insert方法發出POST要求:POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY" }, "snapshotType": "SNAPSHOT_TYPE" } -
如要覆寫快照設定,在自訂儲存位置建立快照,請向
snapshots.insert方法發出POST要求,並在要求中加入storageLocations屬性:POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY" }, "snapshotType": "SNAPSHOT_TYPE", "storageLocations": [ "STORAGE_LOCATION" ], } -
(預先發布版) 如要在允許的區域中建立區域範圍快照,請對
snapshots.insert方法發出POST要求,並定義建立區域:POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/regions/SNAPSHOT_SCOPE_REGION/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE", "snapshotEncryptionKey": { "kmsKeyName":"projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY", }, }
更改下列內容:
- DESTINATION_PROJECT_ID:您要在當中建立快照的專案 ID。
- SNAPSHOT_NAME:快照名稱。
- SOURCE_PROJECT_ID:來源磁碟專案的 ID。
- SOURCE_ZONE:來源磁碟的可用區。
- SOURCE_DISK_NAME:要建立快照的磁碟名稱。
- KMS_PROJECT_ID:包含儲存在 Cloud Key Management Service 中的加密金鑰的專案。
- KEY_REGION:Cloud KMS 金鑰所在的區域。
- KEY_RING:含有 Cloud KMS 金鑰的金鑰環名稱。
- SNAPSHOT_KEY:用來加密來源磁碟的 Cloud KMS 金鑰名稱。
- SNAPSHOT_TYPE:快照類型,可以是 STANDARD 或 ARCHIVE。
如果未指定快照類型,系統會建立
STANDARD快照。 -
STORAGE_LOCATION:選用:如果是全域範圍的快照,則為您要儲存快照的 Cloud Storage 多地區或 Cloud Storage 地區。您只能指定一個儲存位置。
只有在想覆寫快照設定中預先定義或自訂的預設儲存位置時,才使用
storageLocations參數。 SNAPSHOT_SCOPE_REGION:選用:如果是區域範圍快照,則為快照的範圍所屬區域。如果加入這個參數,就無法使用
storageLocations參數。系統會自動將 STORAGE_LOCATION 設為 SNAPSHOT_SCOPE_REGION。
使用 CMEK 加密匯入的映像檔
將自訂映像檔匯入至 Compute Engine 時,您可以為新的映像檔加密。匯入映像檔前,請務必建立並壓縮磁碟映像檔,然後將壓縮檔上傳至 Cloud Storage。
控制台
- 前往 Google Cloud 控制台的「Images」(映像檔) 頁面。
- 點選「建立映像檔」。
- 選取要建立映像檔的磁碟做為「來源磁碟」。
- 在「Encryption」(加密) 部分,選取「Customer-managed key」(客戶管理的金鑰)。
- 在下拉式選單中,選取要用來加密這張圖片的 Cloud KMS 金鑰。
- 繼續執行映像檔建立程序。
gcloud
如要匯入及加密圖片,請使用 gcloud compute images create 指令。如要使用客戶管理加密,請指定映像檔的 Cloud KMS 金鑰。
gcloud compute images create IMAGE_NAME \
--source-disk=SOURCE_DISK \
--kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
更改下列內容:
IMAGE_NAME:要建立的圖片名稱SOURCE_DISK:要建立快照的磁碟名稱KMS_PROJECT_ID:包含 Cloud KMS 金鑰的專案REGION:Cloud KMS 金鑰所在的區域KEY_RING:包含 Cloud KMS 金鑰的金鑰環KEY:用於加密新磁碟的金鑰名稱
REST
如要加密匯入的映像檔,請向 images.insert 方法發出 POST 要求。指定壓縮檔的 URI,將 imageEncryptionKey 屬性新增至圖片建立要求,並在 kmsKeyName 屬性中指定圖片加密金鑰。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images
{
"rawDisk": {
"source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
},
"name": "IMAGE_NAME",
"sourceType": "RAW",
"imageEncryptionKey": {
"kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
}
}
更改下列內容:
PROJECT_ID:要在其中建立加密映像檔的專案IMAGE_NAME:要建立的圖片名稱KMS_PROJECT_ID:包含 Cloud KMS 金鑰的專案REGION:Cloud KMS 金鑰所在的區域KEY_RING:包含 Cloud KMS 金鑰的金鑰環KEY:用於加密來源磁碟的金鑰名稱
透過以 CMEK 加密的快照建立磁碟
如要透過加密快照建立新磁碟,請按照下列步驟操作:
控制台
- 前往 Google Cloud 控制台的「Disks」(磁碟) 頁面。
- 按一下 [Create disk] (建立磁碟),然後輸入新磁碟的屬性。
- 在「Source type」(來源類型) 部分,選取要使用的快照或映像檔。
選用步驟:如要指定新的加密金鑰,請在「加密」中指定要使用的加密金鑰類型,然後提供加密金鑰資訊。
如要移除客戶自行管理或提供的加密金鑰,請在「Encryption」(加密) 中,使用預設值 Google-managed encryption key。
繼續進行磁碟建立程序。
gcloud
如要從全域範圍的加密快照建立新磁碟,請使用
gcloud compute disks create指令。gcloud compute disks create DISK_NAME \ --zone=ZONE \ --source-snapshot=SNAPSHOT_NAME \ --kms-key=projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
(預先發布) 如要從區域範圍的加密快照建立新磁碟,請使用
gcloud compute disks create指令,並指定來源快照區域。gcloud compute disks create DISK_NAME \ --zone=ZONE \ --source-snapshot=SNAPSHOT_NAME \ --source-snapshot-region=SOURCE_REGION \ --kms-key=projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
更改下列內容:
DISK_NAME:新磁碟的名稱SNAPSHOT_NAME:加密快照的名稱如要改用圖片而非快照,請將
--source-snapshot SNAPSHOT_NAME替換為--image IMAGE_NAME。KMS_PROJECT_ID:選用:包含 Cloud KMS 金鑰的專案REGION:選用:Cloud KMS 金鑰所在的區域SOURCE_REGION:來源快照的範圍所屬區域ZONE:新磁碟所在的可用區KEY_RING:選用:包含 Cloud KMS 金鑰的金鑰環KEY:選用:用於加密新磁碟的 Cloud KMS 金鑰名稱如要加密新磁碟,請執行下列任一動作:
- 如要指定新的客戶自行管理的加密金鑰,請使用
--kms-key旗標。 - 如要使用預設值 Google-owned and Google-managed encryption key,請勿加入
--kms-key旗標。
- 如要指定新的客戶自行管理的加密金鑰,請使用
REST
如要從全域範圍的加密快照建立新磁碟,請向
compute.disks.insert方法建構POST要求。使用sourceSnapshot屬性指定快照。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks { "name": "DISK_NAME", "sourceSnapshot": "projects/SNAPSHOT_PROJECT_ID/global/snapshots/SNAPSHOT_NAME", "diskEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY" } }(預覽版) 如要從區域範圍的加密快照建立新磁碟,請對
compute.disks.insert方法建構POST要求。使用sourceSnapshot屬性指定快照。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks { "name": "DISK_NAME", "sourceSnapshot": "projects/SNAPSHOT_PROJECT_ID/regions/SOURCE_REGION/snapshots/SNAPSHOT_NAME", "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE", "zone": "projects/PROJECT_ID/zones/ZONE" "diskEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY" } }
更改下列內容:
PROJECT_ID:要在其中建立新磁碟的專案ZONE:要在其中建立新磁碟的可用區SOURCE_REGION:來源快照的範圍所屬區域DISK_NAME:新磁碟的名稱DISK_TYPE:磁碟類型的完整或部分網址,例如PROJECT_ID/zones/ZONE/diskTypes/pd-ssdSNAPSHOT_PROJECT_ID:包含快照的專案SNAPSHOT_NAME:加密快照的名稱如要改用圖片而非快照,請將
sourceSnapshot替換為sourceImage。KMS_PROJECT_ID:選用:包含 Cloud KMS 金鑰的專案REGION:選用:Cloud KMS 金鑰所在的區域KEY_RING:選用:包含 Cloud KMS 金鑰的金鑰環KEY:選用:用於加密新磁碟的 Cloud KMS 金鑰名稱如果加入
diskEncryptionKey,系統會使用指定的 Cloud KMS 金鑰加密磁碟。如未加入diskEncryptionKey,系統會使用 Google-owned and Google-managed encryption key加密磁碟。
將以 CMEK 加密的開機磁碟連接至新的 VM
控制台
前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。
指定 VM 詳細資料,然後在「開機磁碟」部分,按一下「變更」。然後按照下列步驟操作:
- 按一下 [Existing disks] (現有磁碟)。
- 在「磁碟」清單中,選取要附加至 VM 的現有磁碟。
- 按一下「選取」。
繼續執行 VM 建立程序。
gcloud
如要在建立新 VM 時連結加密磁碟,請使用 gcloud compute instances create 指令。使用 --disk 標記指定加密的開機磁碟,如以下範例所示:
gcloud compute instances create VM_NAME \ ... --disk name=DISK_NAME,boot=yes
更改下列內容:
VM_NAME:您要建立的 VM 名稱DISK_NAME:加密磁碟的名稱
REST
建構對 compute.instances.insert 方法的 POST 要求。使用 disks 屬性指定加密的開機磁碟,如以下範例所示:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
...
"disks": [
{
"deviceName": "DISK_ALIAS",
"source": "projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME"
}
]
}
更改下列內容:
PROJECT_ID:要在其中建立新 VM 的專案ZONE:要在其中建立新 VM 的可用區DISK_ALIAS:專屬裝置名稱,用做執行 Linux 作業系統的 VM/dev/disk/by-id/google-*目錄中的磁碟別名。您可以在執行個體中使用這個名稱來指稱磁碟,以便執行掛接或調整大小等作業。如未指定裝置名稱,虛擬機會選擇預設裝置名稱套用至這個磁碟,格式為persistent-disk-x,其中x是 Compute Engine 指派的數字。這個欄位僅適用於永久磁碟卷。DISK_NAME:加密磁碟的名稱
輪替磁碟或快照的 CMEK
為減少金鑰遭盜用可能造成的後果,建議您定期輪替 CMEK。如要進一步瞭解 CMEK 輪替,請參閱「金鑰輪替」。
如要輪替保護磁碟或快照的 CMEK,可以使用 gcloud CLI 或 REST,但無法使用Google Cloud 控制台或 Terraform 供應商 Google Cloud。
gcloud
如要將用於加密磁碟、封存快照或標準快照的 Cloud KMS 金鑰輪替為新金鑰版本,請使用 gcloud compute disks update-kms-key 指令或 gcloud compute snapshots update-kms-key 指令。
如要輪替用於加密磁碟的金鑰版本,請按照下列步驟操作:
gcloud compute disks update-kms-key DISK_NAME \ --zone ZONE
如要輪替用於加密標準快照的金鑰版本,請按照下列步驟操作:
gcloud compute snapshots update-kms-key SNAPSHOT_NAME
更改下列內容:
DISK_NAME:加密磁碟的名稱ZONE:加密磁碟所在的可用區SNAPSHOT_NAME:加密快照的名稱
REST
如要將用來加密磁碟、封存快照或標準快照的 Cloud KMS 金鑰輪替為新金鑰版本,請建構對 compute.disks.updateKmsKey 方法或 compute.snapshots.updateKmsKey 方法的 PATCH 要求。
如要輪替加密區域磁碟的金鑰版本,請按照下列步驟操作:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/updateKmsKey
如要輪替加密地區磁碟的金鑰版本,請按照下列步驟操作:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/disks/DISK_NAME/updateKmsKey
如要輪替用於加密全域範圍標準快照的金鑰版本,請按照下列步驟操作:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME/updateKmsKey
(預先發布版) 如要輪替用於加密區域範圍標準快照的金鑰版本,請按照下列步驟操作:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/snapshots/SNAPSHOT_NAME/updateKmsKey
更改下列內容:
PROJECT_ID:加密磁碟或快照所在的專案ZONE:加密磁碟所在的可用區REGION:區域磁碟或區域範圍快照所在的區域DISK_NAME:加密磁碟的名稱SNAPSHOT_NAME:加密快照的名稱REGION:區域磁碟或區域範圍快照所在的區域
回應會包含 name 項目,其中含有代表金鑰輪替作業的值:
"name": "operation-YYYYYYYYYYYYY-YYYYYYYYYYYYY-YYYYYYYY-YYYYYYYY"
接著,您可以發出 GET 要求,輪詢作業狀態,判斷 API 呼叫是否成功:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/OPERATION_NAME
更改下列內容:
PROJECT_ID:加密磁碟或快照所在的專案ZONE:加密磁碟所在的可用區OPERATION_NAME:CMEK 輪替作業的名稱,格式為operation-YYYYYYYYYYYYY-YYYYYYYYYYYYY-YYYYYYYY-YYYYYYYY
回應會包含 progress 值,代表金鑰輪替的狀態。如果 progress 為 100,表示作業成功。
輪替金鑰不會停用或刪除舊金鑰版本。 詳情請參閱「輪替金鑰後」。
變更磁碟或快照的 CMEK
您可以將磁碟、封存快照或標準快照的加密方式變更為其他客戶自行管理加密金鑰 (例如在專案遷移期間或為符合新的法規遵循規定),且不會發生停機情形。
變更 CMEK 會使用新金鑰重新加密資源的資料加密金鑰 (DEK)。這項程序不會變更 DEK,也不會影響執行中工作負載的效能。
如要變更保護磁碟或快照的 CMEK,可以使用 gcloud CLI 或 REST,但無法使用Google Cloud 控制台或 Terraform。
gcloud
如要變更磁碟或標準快照的 Cloud KMS 金鑰,請使用 --kms-key 標記搭配 gcloud compute disks update-kms-key 指令或 gcloud compute snapshots update-kms-key 指令。
如要變更區域磁碟的加密金鑰,請按照下列步驟操作:
gcloud compute disks update-kms-key DISK_NAME \ --kms-key=projects/KEY_PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/NEW_KEY_NAME \ --zone=ZONE
如要變更區域磁碟的金鑰,請按照下列步驟操作:
gcloud compute disks update-kms-key DISK_NAME \ --kms-key=projects/KEY_PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/NEW_KEY_NAME \ --region=REGION
如要變更全域快照的鍵,請按照下列步驟操作:
gcloud compute snapshots update-kms-key SNAPSHOT_NAME \ --kms-key=projects/KEY_PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/NEW_KEY_NAME
如要變更區域範圍快照的金鑰,請按照下列步驟操作:
gcloud beta compute snapshots update-kms-key SNAPSHOT_NAME \ --kms-key=projects/KEY_PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/NEW_KEY_NAME \ --regions=REGION
更改下列內容:
DISK_NAME:加密磁碟的名稱。NEW_KMS_KEY:新 CMEK 的完整資源 ID。ZONE:磁碟所在的可用區。REGION:磁碟或快照所在的區域。SNAPSHOT_NAME:加密快照的名稱。
REST
如要變更金鑰,請向 compute.disks.updateKmsKey 方法或 compute.snapshots.updateKmsKey 方法傳送 POST 要求,並在要求主體中納入 kmsKeyName。
如要變更區域磁碟的金鑰,請按照下列步驟操作:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/updateKmsKey { "kmsKeyName": "projects/KEY_PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/NEW_KEY_NAME" }如要變更區域磁碟的金鑰,請按照下列步驟操作:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/disks/DISK_NAME/updateKmsKey { "kmsKeyName": "projects/KEY_PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/NEW_KEY_NAME" }如要變更全域快照的鍵,請按照下列步驟操作:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME/updateKmsKey { "kmsKeyName": "projects/KEY_PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/NEW_KEY_NAME" }如要變更區域範圍快照的金鑰,請按照下列步驟操作:
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/snapshots/SNAPSHOT_NAME/updateKmsKey { "kmsKeyName": "projects/KEY_PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/NEW_KEY_NAME" }
更改下列內容:
PROJECT_ID:包含磁碟或快照的專案。ZONE:磁碟所在的可用區。REGION:磁碟或快照所在的區域。DISK_NAME:磁碟名稱。NEW_KEY_NAME:新 CMEK 的名稱。SNAPSHOT_NAME:加密快照的名稱。
從磁碟移除 CMEK
您無法從磁碟移除 CMEK,也無法變更加密金鑰的類型。 您可以執行下列其中一項操作:
將 CMEK 加密磁碟的內容解密,並建立改用 Google Cloud 預設加密的新磁碟。根據預設, Google Cloud 系統會加密所有靜態資料。
如要建立使用 CMEK 加密磁碟的磁碟,請按照下列步驟操作: Google-owned and managed key
建立新磁碟後,系統會使用 Google Cloud 預設加密方式保護磁碟內容。您透過該磁碟建立的所有快照也必須使用預設加密。
從快照中移除 CMEK
您無法從快照中移除 CMEK,也無法變更加密金鑰的類型。 您可以變更快照,改用其他 CMEK,或建立快照副本,並以 Google-owned and managed key加密副本。
如要建立使用 Google-owned and managed key CMEK 加密快照的快照,請按照下列步驟操作:
從快照建立新磁碟。 建立新磁碟時,請選取所需的加密類型。
建立新磁碟的快照:
如果新磁碟使用 CMEK 加密,請參閱從使用 CMEK 加密的快照建立磁碟。
如果新磁碟已使用 Google-owned and managed key加密,請參閱「建立磁碟快照」。
停用或銷毀 CMEK
如果不再需要 CMEK 或想避免使用,請停用或刪除金鑰。刪除、停用或移除金鑰的 IAM 權限,也稱為「撤銷」金鑰。
金鑰撤銷對加密資源的影響
撤銷加密金鑰後,受該金鑰保護的資源會受到下列影響:
- 如果 VM 連接的任一磁碟金鑰遭到撤銷,您就無法啟動該 VM。
- 如果使用金鑰的磁碟已連結至正在執行的 VM,且您已為該 VM 啟用「金鑰撤銷時關閉 VM」,Compute Engine 會在 7 小時內關閉 VM。
- 您無法將金鑰遭撤銷的磁碟掛接到 VM,也無法從該磁碟建立快照。
- 您無法使用以已撤銷金鑰加密的映像檔或快照建立磁碟。
如果停用金鑰,只要啟用金鑰,即可還原先前的效果。金鑰一經銷毀,就無法復原先前的效果。
在 Cloud KMS 金鑰遭撤銷時設定 VM 關機
您可以將 VM 設為在撤銷 Cloud KMS 金鑰時自動關機,該金鑰可協助保護連結至 VM 的磁碟。如要撤銷金鑰,可以停用或刪除金鑰。啟用這項設定後,VM 會在金鑰撤銷後的 7 小時內關機。
如果重新啟用金鑰,即可重新啟動 VM,並使用金鑰保護的連結磁碟。啟用金鑰後,VM 不會自動重新啟動。
控制台
如要將 VM 設為在 Cloud KMS 金鑰遭到撤銷時關機,請執行下列操作:
- 開始建立 VM,其中包含受 Cloud KMS 金鑰保護的磁碟。
- 開啟「網路、磁碟、安全性、管理、單一租戶」選單。
- 展開「管理」部分。
- 在「客戶自行管理的加密金鑰 (CMEK) 撤銷政策」下方,選取「關閉」。
gcloud
使用 gcloud compute instances create 指令建立 VM,並加入 --key-revocation-action-type=stop。
gcloud compute instances createVM_NAME\ --imageIMAGE\ --key-revocation-action-type=stop
REST
使用 instances.insert 方法建立 VM,並將 "keyRevocationActionType" 屬性設為 "STOP"。以下範例會從公開映像檔建立 VM。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
"name": "VM_NAME",
"disks": [
{
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
},
"boot": true
}
],
"keyRevocationActionType": "STOP"
}
或者,您也可以使用 Google Cloud CLI 或 REST,設定執行個體範本,建立在金鑰撤銷時關機的 VM。
控制台
您可以使用執行個體範本建立 VM,在 Cloud KMS 金鑰遭到撤銷時關閉 VM。
- 開始建立新的執行個體範本,其中包含受 Cloud KMS 金鑰保護的磁碟。
- 開啟「網路、磁碟、安全性、管理、單一租戶」選單。
- 展開「管理」部分。
- 在「客戶自行管理的加密金鑰 (CMEK) 撤銷政策」下方,選取「關閉」。
gcloud
使用 gcloud compute instance-templates create 指令建立執行個體範本,並加入 --key-revocation-action-type=stop。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--key-revocation-action-type=stop
REST
對 instanceTemplates.insert 方法建構 POST 要求。
在要求主體中,您必須明確定義所有必要設定欄位。如要讓透過這個範本建立的 VM 在金鑰遭撤銷時關機,請指定 "keyRevocationActionType":"STOP"。舉例來說,如果執行個體範本包含最少必要欄位,且會建立在金鑰撤銷時關機的 VM,則看起來會如下所示:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceTemplates { "name": "example-template", "properties": { "machineType": "e2-standard-4", "networkInterfaces": [ { "network": "global/networks/default", "accessConfigs": [ { "name": "external-IP", "type": "ONE_TO_ONE_NAT" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/family/debian-13" } } ], "keyRevocationActionType": "STOP" } }
建立設定為在 Cloud KMS 撤銷時關機的 VM 後,請建立並連結以 Cloud KMS 金鑰加密的永久磁碟。
後續步驟
- 進一步瞭解磁碟加密。