使用 Cloud KMS 金鑰保護資源


本文件提供資訊,說明如何使用手動建立的 Cloud Key Management Service Cloud KMS 金鑰,加密磁碟和其他儲存空間相關資源。在 Cloud KMS 中管理的金鑰稱為客戶管理的加密金鑰 (CMEK)

您可以使用 CMEK 加密 Compute Engine 資源,例如磁碟機器映像檔即時快照標準快照

如要進一步瞭解如何使用客戶提供的加密金鑰 (CSEK) 來加密磁碟和其他儲存空間資源,請參閱「使用客戶提供的加密金鑰來加密磁碟」。

進一步瞭解磁碟加密

事前準備

  • 瞭解磁碟映像檔永久磁碟快照虛擬機器 (VM) 執行個體
  • 決定您要在同一個 Google Cloud 專案還是不同的專案中執行 Compute Engine 和 Cloud KMS。如要進一步瞭解 Google Cloud 專案 ID 和專案編號,請參閱「識別專案」。
  • 針對執行 Cloud KMS 的 Google Cloud 專案,請執行下列操作:
    1. Enable the Cloud KMS API.

      Enable the API

  • + 如果您想在機密模式中建立新的 Hyperdisk Balanced 磁碟區,請查看相關的限制支援的區域,確保您的用途符合支援的條件。
  • 如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    For more information, see Authenticate for using REST in the Google Cloud authentication documentation.

必要的角色

為確保 Compute Engine 服務代理人擁有使用 Cloud KMS 金鑰保護資源的必要權限,請要求管理員授予 Compute Engine 服務代理人專案的 Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) IAM 角色。

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您的管理員也可能會透過自訂角色或其他預先定義的角色,為 Compute Engine 服務代理人授予必要權限。

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 資源的 Google Cloud 專案專案編號 (不是 Google Cloud 專案 ID)

加密規格

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 的位置類型」。

  • 使用金鑰加密磁碟、快照或映像檔的加密作業是永久性的。您無法從資源移除加密功能、變更加密類型或變更使用的金鑰。如要移除加密功能或變更加密金鑰,唯一的方法是在指定新的加密選項時,建立資源的副本。舉例來說,如要將磁碟的使用權限從 Google 產生的金鑰變更為 CMEK,請按照下列步驟操作:

    1. 建立磁碟的快照
    2. 使用快照建立新磁碟。建立新磁碟時,請選取所需的加密類型。

    詳情請參閱「變更磁碟類型」。

手動或自動建立金鑰

您可以手動建立 Cloud KMS 金鑰,也可以使用 Cloud KMS Autokey。Autokey 會自動執行佈建及指派作業,簡化 Cloud KMS 金鑰的建立及管理作業。使用 Autokey 時,您不需要事先佈建金鑰環、金鑰和服務帳戶。而是會在建立 Compute Engine 資源時,視需要產生。詳情請參閱 Autokey 總覽

手動建立金鑰環和金鑰

針對執行 Cloud KMS 的 Google Cloud 專案,請按照「建立金鑰環和金鑰」一文的指示建立金鑰環和金鑰。

使用 CMEK 為新的永久磁碟加密

您可以在建立 VM 或磁碟時提供金鑰,藉此加密新的永久磁碟。

控制台

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

    前往「磁碟」

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

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 專案 ID
  • ZONE:建立 VM 的可用區
  • MACHINE_TYPE:機器類型,例如 c3-standard-4
  • KMS_PROJECT_ID:擁有 Cloud KMS 金鑰的專案
  • REGION:磁碟所在的地區
  • KEY_RING:包含金鑰的金鑰環名稱
  • KEY:用於加密磁碟的金鑰名稱
  • SOURCE_IMAGE:建立 VM 時要使用的映像檔,例如 projects/debian-cloud/global/images/debian-11-bullseye-v20231115

同樣地,您也可以使用 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 專案 ID
  • ZONE:建立磁碟的可用區
  • SOURCE_IMAGE:建立磁碟時要使用的映像檔,例如 projects/debian-cloud/global/images/debian-11-bullseye-v20231115
  • DISK_NAME:新磁碟的名稱
  • KMS_PROJECT_ID:擁有 Cloud KMS 金鑰的專案
  • REGION:磁碟所在的地區
  • KEY_RING:包含金鑰的金鑰環名稱
  • KEY:用於加密磁碟的金鑰名稱
  • DISK_TYPE:要建立的磁碟類型

在機密模式下建立 Hyperdisk Balanced 磁碟

您可以使用 Google Cloud 主控台、Google Cloud CLI 或 REST,在機密模式中建立新的 Hyperdisk Balanced 磁碟。如要建立非機密模式的磁碟,請按照「使用 CMEK 加密的快照建立永久磁碟」一文中的步驟操作。

控制台

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

    前往「磁碟」

  2. 按一下 [Create disk] (建立磁碟),然後輸入新磁碟的屬性。
  3. 在「磁碟設定」部分,為磁碟類型選擇「Hyperdisk Balanced」
  4. 選用設定。變更磁碟的預設大小已佈建 IOPS已佈建傳輸量設定。
  5. 在「Encryption」區段中,選取「Cloud KMS key」
  6. 在金鑰清單中,選取要用來加密這個磁碟的 Cloud HSM 金鑰。
  7. 在「機密運算」專區中,選取「啟用機密運算服務」
  8. 如要建立磁碟,請按一下「建立」

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-balanced
  • PROJECT_ID:執行 Compute Engine 的 Google Cloud 專案 ID
  • ZONE:建立 VM 的可用區
  • MACHINE_TYPE:機器類型,例如 n2d-standard-4
  • KMS_PROJECT_ID:擁有 Cloud HSM 金鑰的專案
  • REGION:磁碟所在的地區
  • KEY_RING:金鑰所屬金鑰環的名稱
  • KEY:用於加密磁碟的金鑰名稱
  • SOURCE_IMAGE:支援機密 VM 的映像檔,可在建立 VM 時使用,例如 projects/debian-cloud/global/images/debian-11-bullseye-v20231115

同樣地,您可以使用 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 專案 ID
  • ZONE:建立磁碟的可用區
  • SOURCE_IMAGE:建立磁碟時支援機密 VM 的映像檔,例如 projects/debian-cloud/global/images/debian-11-bullseye-v20231115
  • DISK_NAME:新磁碟的名稱
  • KMS_PROJECT_ID:擁有 Cloud HSM 金鑰的專案
  • REGION:磁碟所在的地區
  • KEY_RING:包含金鑰的金鑰環名稱
  • KEY:用於加密磁碟的金鑰名稱
  • DISK_TYPE:要建立的磁碟類型,例如 hyperdisk-balanced

透過以 CMEK 加密的磁碟建立快照

如要保護透過以 CMEK 加密的磁碟建立的快照,您必須使用用來加密磁碟的加密金鑰。

除非來源磁碟也使用 CMEK,否則您無法建立使用 CMEK 的快照。此外,除非您建立全新的磁碟映像檔和新的永久磁碟,否則無法將 CMEK 加密磁碟或快照轉換為使用Google Cloud 預設加密功能。

使用 CMEK 加密的磁碟快照為增量

控制台

  1. 前往 Google Cloud 控制台的「Snapshots」(快照)頁面。

    前往「快照」

  2. 按一下 [Create snapshot] (建立快照)。
  3. 在「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:快照類型,可選 STANDARDARCHIVE。 如果未指定快照類型,系統會建立 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:快照類型,可選 STANDARDARCHIVE。 如果未指定快照類型,系統會建立 STANDARD 快照。
  • STORAGE_LOCATION:選用:如果是全球範圍的快照,請提供您要儲存快照的 Cloud Storage 多地區Cloud Storage 地區。您只能指定一個儲存位置。

    只有在您想覆寫快照設定中設定的預先定義或自訂預設儲存位置時,才使用 storageLocations 參數。

  • SNAPSHOT_SCOPE_REGION:選用:如果是區域範圍的快照,則為快照的區域範圍。如果您加入這個參數,就無法使用 storageLocations 參數。STORAGE_LOCATION 會自動設為 SNAPSHOT_SCOPE_REGION

使用 CMEK 加密匯入的圖片

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

控制台

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

    前往「圖片」

  2. 按一下「建立映像檔」
  3. 在「Source disk」 中,選取要建立映像檔的磁碟。
  4. 在「Encryption」中,選取「Customer-managed key」
  5. 在下拉式選單中,選取要用來加密這個圖片的 Cloud KMS 金鑰。
  6. 繼續執行映像檔建立程序。

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 加密的快照建立磁碟

如要透過加密快照建立新磁碟,請按照下列步驟操作:

控制台

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

    前往「磁碟」

  2. 按一下 [Create disk] (建立磁碟),然後輸入新磁碟的屬性。
  3. 在「Source type」部分,選取要使用的快照或圖片。
  4. 選用步驟:如果您要指定新的加密金鑰,請針對「加密」指定要使用的加密金鑰類型,然後提供加密金鑰資訊。

    如果您想移除客戶管理或客戶提供的加密金鑰,請在「Encryption」(加密) 中使用預設值 Google-managed encryption key

  5. 繼續執行磁碟建立程序。

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-ssd
  • SNAPSHOT_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

控制台

  1. 前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。

    前往「Create an instance」(建立執行個體)

  2. 指定 VM 詳細資料,然後在「Boot disk」(開機磁碟) 專區中,按一下「Change」(變更)。接著,請按照下列步驟操作:

    1. 按一下 [Existing disks] (現有磁碟)。
    2. 在「磁碟」清單中,選取要連結至 VM 的現有磁碟。
    3. 按一下 [選取]。
  3. 繼續執行 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-* 目錄中,用於做為磁碟別名的專屬裝置名稱。您可以在執行個體中使用這個名稱來參照磁碟,執行掛接或調整大小等作業。如果您未指定裝置名稱,VM 會選擇預設裝置名稱,並套用至此磁碟,格式為 persistent-disk-x,其中 x 是 Compute Engine 指派的編號。這個欄位僅適用於永久磁碟磁區。
  • DISK_NAME:加密磁碟的名稱

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

您可以對加密磁碟的內容進行解密,並建立改用 Google Cloud 預設加密的新磁碟。根據預設, Google Cloud會對所有靜態資料進行加密

  1. 建立加密磁碟的快照
  2. 使用新的加密快照建立新的永久磁碟

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

輪替磁碟的 Cloud KMS 加密金鑰

建立使用新 Cloud KMS 金鑰版本的新磁碟,即可輪替用於加密磁碟的金鑰。輪替金鑰是遵循標準化安全性做法的最佳做法。如要輪替金鑰,請執行下列步驟:

  1. 輪替 Cloud KMS 金鑰
  2. 建立加密磁碟的快照
  3. 使用新的快照建立新的磁碟,並在前一個步驟中旋轉金鑰。
  4. 替換 VM 中使用舊加密金鑰的磁碟。

建立新磁碟時,系統會使用新金鑰版本進行加密。您透過該磁碟建立的所有快照都會使用最新的主要金鑰版本。

輪替金鑰時,系統不會自動重新加密先前金鑰版本所加密的資料。詳情請參閱「重新加密資料」。輪替金鑰不會自動停用刪除現有金鑰版本。

停用或刪除 CMEK

如果您不再需要 CMEK 或不想讓其他人使用 CMEK,請刪除停用金鑰。刪除、停用或移除金鑰的 IAM 權限,也稱為撤銷金鑰。

金鑰撤銷對加密資源的影響

當您撤銷加密金鑰時,受該金鑰保護的資源會受到下列影響:

  • 如果連結的磁碟有遭到撤銷的金鑰,就無法啟動 VM。
  • 如果使用金鑰的磁碟已連結至執行中的 VM,且您為 VM 啟用金鑰撤銷時 VM 關機功能,Compute Engine 就會在 7 小時內關閉 VM。
  • 您無法將已撤銷金鑰的磁碟連接至 VM,也無法從磁碟建立快照。
  • 您無法使用已撤銷金鑰加密的映像檔或快照來建立磁碟。

如果您停用金鑰,只要再次啟用金鑰,就不會再有上述影響。刪除金鑰後,無法還原上述影響。

在 Cloud KMS 金鑰撤銷時設定 VM 關機

您可以將 VM 設為在撤銷用於保護 VM 附加磁碟的 Cloud KMS 金鑰時自動關機。您可以停用刪除金鑰來撤銷金鑰。啟用這項設定後,VM 會在金鑰撤銷後的 7 小時內關機。

如果您再次啟用金鑰,即可使用金鑰保護的連結磁碟重新啟動 VM。啟用金鑰後,VM 不會自動重新啟動。

控制台

如要將 VM 設為在 Cloud KMS 金鑰遭到撤銷時關閉,請執行下列操作:

  1. 開始建立 VM,其中包含受 Cloud KMS 金鑰保護的磁碟。
  2. 開啟「網路、磁碟、安全性、管理、單一用戶群」選單。
  3. 展開「管理」部分。
  4. 在「Customer Managed Encryption Key (CMEK) revocation policy」(客戶自行管理的加密金鑰 (CMEK) 撤銷政策) 下方,選取「Shut down」(關閉)

gcloud

使用 gcloud compute instances create 指令建立 VM,並納入 --key-revocation-action-type=stop

gcloud compute instances create VM_NAME \
  --image IMAGE \
  --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 金鑰時關閉。

  1. 開始建立新的執行個體範本,其中包含受 Cloud KMS 金鑰保護的磁碟。
  2. 開啟「網路、磁碟、安全性、管理、單一用戶群」選單。
  3. 展開「管理」部分。
  4. 在「Customer Managed Encryption Key (CMEK) revocation policy」下方,選取「Shutdown」

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-11"
      }
    }
  ],
  "keyRevocationActionType": "STOP"
  }
}

建立 VM 並設定為在 Cloud KMS 撤銷時關機後,請建立連結使用 Cloud KMS 金鑰加密的永久磁碟。