使用 Cloud KMS 金鑰保護資源

根據預設,Compute Engine 會加密靜態儲存的客戶內容。Compute Engine 會為您處理及管理這項預設加密作業,您不必進行任何其他操作。不過,如果您想自行控制及管理這類加密作業,可以使用「金鑰加密金鑰」。金鑰加密金鑰不會直接加密您的資料,其用途是對用來加密您資料的「資料加密金鑰」進行加密。

您可以在 Compute Engine 中使用下列兩種金鑰加密金鑰選項:

建立受 Cloud KMS 保護的 Compute Engine 資源後,Compute Engine 會知道使用的 KMS 金鑰為何,因此您不需要指定金鑰。如果是受客戶提供的金鑰保護的資源,Compute Engine 的資源存取方式會有所不同。 為存取這類資源,您必須指定客戶提供的金鑰。

進一步瞭解 Google Cloud Platform 的加密選項

事前準備

  1. 瞭解磁碟映像檔永久磁碟快照執行個體

  2. 決定您要在相同的 Google Cloud Platform 專案還是不同的專案中執行 Compute Engine 和 Cloud KMS。為了方便說明,本文的範例將採用下列慣例:

    • [PROJECT_ID] 是執行 Compute Engine 的專案 ID
    • [PROJECT_NUMBER] 是執行 Compute Engine 的專案編號
    • [KMS_PROJECT_ID] 是執行 Cloud KMS 的專案 ID (即使這個專案就是執行 Compute Engine 的專案)

    如要瞭解 GCP 專案 ID 和專案編號,請參閱識別專案一節。

  3. 針對執行 Compute Engine 的 GCP 專案,設定 Compute Engine 的 API 存取權

  4. 針對執行 Cloud KMS 的 GCP 專案完成以下步驟:

    1. 啟用 Cloud KMS API
    2. 按照建立金鑰環和金鑰一文的指示建立金鑰環和金鑰。
  5. Cloud KMS CryptoKey Encrypter/Decrypter 角色指派給 Compute Engine 服務代理人。這個帳戶的格式如下:

    service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com
    

    您可以使用 gcloud 指令列工具來指派角色:

    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 的 GCP 專案 ID,並將 [PROJECT_NUMBER] 替換為執行 Compute Engine 資源的 GCP 專案編號 (非專案 ID)。

規格

加密

Compute Engine 中用來保護您資料的 Cloud KMS 金鑰是 AES-256 金鑰。這類金鑰是金鑰加密金鑰,可對加密您資料的資料加密金鑰進行加密。

限制

  • 您只能使用自己的金鑰加密「新」的永久磁碟、映像檔和快照,而無法使用自己的金鑰加密現有資源。

  • 您無法在本機 SSD 使用自己的金鑰,因為本機 SSD 的保存時間不會超過虛擬機器的生命期。本機 SSD 已受到臨時加密金鑰的保護;Google 不會保留該金鑰。

使用自己的金鑰為新的永久磁碟加密

您可以在執行個體或磁碟建立期間提供金鑰,藉此加密新的永久磁碟。

Console

  1. 在 Google Cloud Platform Console 中,前往「Disks」(磁碟) 頁面。

    前往「Disks」(磁碟) 頁面

  2. 按一下 [Create disk] (建立磁碟),然後輸入新磁碟的屬性。
  3. 在「Encryption」(加密) 底下,選取 [Customer-managed key] (客戶管理的金鑰)。
  4. 使用下拉式選單選取要用來加密這個磁碟的 Cloud KMS 金鑰。
  5. 按一下 [Create] (建立) 來建立磁碟。

指令列

gcloud compute disks \
create encrypted-disk \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

使用 diskEncryptionKey 屬性和 kmsKeyName 屬性加密磁碟。舉例來說,如要使用 Cloud KMS 金鑰在執行個體建立期間加密新磁碟:

POST
https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances

{
"machineType": "zones/[ZONE]/machineTypes/n1-standard-1",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-8-jessie-v20160301"
  },
  "boot": true
 }
],
...
}

同樣地,您也可以使用 API 建立新的獨立式永久磁碟,並使用您的 Cloud KMS 金鑰對其進行加密:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/
[ZONE]/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F
projects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-8-jessie-v20160301

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
 "type": "zones/[ZONE]/diskTypes/pd-standard"
}

透過加密磁碟建立快照

透過以 CMEK 加密的磁碟建立快照時,該快照必須受用來加密磁碟的加密金鑰所保護。

Console

  1. 在 Google Cloud Platform Console 中,前往「Snapshots」(快照) 頁面。

    前往「Snapshots」(快照) 頁面

  2. 按一下 [Create snapshot] (建立快照)。
  3. 在「Source disk」(來源磁碟) 底下,選擇快照的來源磁碟。系統會自動以來源磁碟使用的金鑰對快照進行加密。

指令列

gcloud compute \
disks snapshot encrypted-disk \
--zone [ZONE]

API

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[SNAPSHOT_KEY]"
 },
 "name": "snapshot-encrypted-disk"
}

除非磁碟本身已受 CMEK 保護,否則您無法建立受 CMEK 保護的快照。此外,除非您建立全新的磁碟映像檔和新的永久磁碟,否則無法將加密磁碟或加密快照轉換為使用 Compute Engine 預設加密功能。

加密匯入的映像檔

將自訂映像檔匯入至 Compute Engine 時,您可以為新的映像檔加密。匯入映像檔之前,您必須先建立並壓縮磁碟映像檔檔案,然後將該壓縮檔案上傳至 Google Cloud Storage

Console

  1. 在 Google Cloud Platform Console 中,前往「Images」(映像檔) 頁面。

    前往「Images」(映像檔) 頁面

  2. 按一下 [Create image] (建立映像檔)。
  3. 在「Source disk」(來源磁碟) 底下,選取您要為其建立映像檔的磁碟。
  4. 在「Encryption」(加密) 底下,選取 [Customer-managed key] (客戶管理的金鑰)。
  5. 使用下拉式選單選取要用來加密這個映像檔的 Cloud KMS 金鑰。
  6. 繼續執行映像檔建立程序。

指令列

gcloud compute \
images create [...] \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

如要加密匯入的映像檔,請指定壓縮檔的 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": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[IMAGE_KEY]"
  }
}

透過加密資源建立永久磁碟

透過加密快照建立磁碟

如要使用加密快照建立新的獨立式永久磁碟,請按照下列步驟操作:

Console

  1. 在 Google Cloud Platform Console 中,前往「Disks」(磁碟) 頁面。

    前往「Disks」(磁碟) 頁面

  2. 按一下 [Create disk] (建立磁碟),然後輸入新磁碟的屬性。
  3. 在「Source type」(來源類型) 底下,選取所需快照或映像檔。
  4. 繼續執行永久磁碟建立程序。

指令列

gcloud compute \
disks create [...] \
--source-snapshot example-snapshot \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

如要使用映像檔而非快照,請將 --source-snapshot example-snapshot 改成 --image example-image

API

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot"
}

將加密磁碟連結到新執行個體

Console

  1. 在 Google Cloud Platform Console 中,前往「VM instances」(VM 執行個體) 頁面。

    前往「VM instances」(VM 執行個體) 頁面

  2. 按一下 [Create instance] (建立執行個體)。
  3. 在「Boot disk」(開機磁碟) 底下,按一下 [Change] (變更)。
  4. 按一下 [Existing disks] (現有磁碟)。
  5. 選擇要連結到執行個體的現有磁碟。
  6. 繼續執行個體建立程序。

指令列

gcloud compute instances \
create example-instance \
--disk name=encrypted-disk,boot=yes

API

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/[PROJECT_ID]/zones/[ZONE]/disks/encrypted-disk"
  }
 }
]

從永久磁碟中移除 Cloud KMS 加密金鑰

您可以對加密磁碟的內容進行解密,並建立改用 Compute Engine 預設加密的新磁碟。

  1. 建立加密磁碟的映像檔,並為新映像檔指定自動加密。
  2. 使用新的映像檔來建立新的永久磁碟

在您建立新的永久磁碟後,該磁碟會使用 Compute Engine 預設加密選項保護磁碟內容。您透過該磁碟建立的所有快照也必須使用預設加密選項。

停用或啟用加密金鑰的影響

如果停用刪除加密金鑰,受該金鑰保護的內容會受到下列影響:

  • 如果 VM 已連結受該金鑰保護的磁碟,該 VM 將無法啟動
  • 受該金鑰保護的磁碟無法連結至虛擬機器,您也無法為這類磁碟建立快照
  • 受該金鑰保護的快照無法用於建立磁碟
  • 受該金鑰保護的映像檔無法用於建立磁碟

如果您停用金鑰,只要再次予以啟用,就不會再有上述影響。 如果您刪除金鑰,則會永久產生上述影響。

限制

  • 地區資源 (磁碟) 可由位於相同位置或 global 位置的金鑰加密。舉例來說,us-west1-a 區域中的磁碟可由位於 us-west1global 中的金鑰加密。全球資源 (映像檔、快照) 則可由任何位置的金鑰加密。
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件