從即時快照還原磁碟


如要存取即時快照中擷取的資料,您必須還原即時快照,或從中建立新磁碟。

本頁說明如何透過即時快照建立磁碟。建立磁碟後,您可以將磁碟連接至虛擬機器 (VM) 來使用。

事前準備

  • 如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 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.

必要角色和權限

如要取得從即時快照建立磁碟所需的權限,請要求管理員為您授予專案的下列 IAM 角色:

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

這些預先定義的角色包含從即時快照建立磁碟所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

您必須具備下列權限,才能透過即時快照建立磁碟:

  • 如何建立磁碟:
    • compute.disks.create 新磁碟的目的專案
    • 來源即時快照的 compute.instantSnapshots.useReadOnly

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

限制

適用下列限制:

  • 從即時快照建立磁碟時,新磁碟的類型、儲存位置和加密方式一律會與快照的來源磁碟相同。

  • 您無法直接透過即時快照建立 VM。您必須從即時快照建立磁碟,然後使用新磁碟建立 VM。

  • 如果即時快照的來源磁碟使用客戶管理或客戶提供的加密金鑰,則您必須在透過即時快照建立新磁碟時提供相同的加密金鑰。

    請參考以下範例。假設您有磁碟 DISK-1,已使用客戶提供的加密金鑰 (CSEK) 加密,KEY-1。您也擁有從 DISK-1 建立的即時快照 IS-1。如要從 IS-1 建立新磁碟,您必須在建立新磁碟時提供相同的鍵 KEY-1

    如果磁碟是使用客戶自行管理的加密金鑰 (CMEK) 加密,則只有在使用 REST 或 gcloud CLI 建立磁碟時,才需要提供金鑰。如果您使用 Google Cloud 控制台,則不需要指定加密金鑰。

使用即時快照建立磁碟

即時快照會使用與來源磁碟相同的加密方式進行加密。根據即時快照的來源磁碟加密方式,您可以透過以下步驟建立磁碟。

每個來源磁碟都會使用下列任一方法加密:

  • Google-owned and Google-managed encryption keys。這是預設值。
  • 由客戶管理的加密金鑰 (CMEK)
  • 由客戶提供的加密金鑰 (CSEK)。

如要瞭解特定磁碟的加密方式,請參閱「查看磁碟加密資訊」。

使用預設加密方式建立即時快照的磁碟

您可以使用 gcloud CLI、Google Cloud 主控台或 REST,從即時快照建立磁碟。

主控台

  1. 找出要還原的即時快照:

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

      前往「快照」

    2. 按一下「即時快照」分頁標籤。

    3. 在「Name」欄中,按一下要還原的即時快照名稱。

  2. 按一下 [Create Disk] (建立磁碟)

  3. 在「Name」欄位中,輸入磁碟的新名稱。

  4. 選用:在「說明」欄位中輸入其他詳細資料。

  5. 確認「磁碟來源類型」為「即時快照」

  6. 在「Source instant snapshot」清單中,選擇要使用的即時快照。

  7. 選用:設定磁碟的其他自訂選項。

    • 輸入大小:在「Size」欄位中,指定磁碟的大小 (以 GB 為單位)。磁碟大小必須等於或大於快照的來源磁碟大小。
    • 排定備份作業:如果您希望 Compute Engine 依排程建立這部新磁碟的標準快照,請選取「啟用快照排程」核取方塊,然後選擇快照排程。否則請取消勾選核取方塊。
  8. 選用:如要整理專案,請新增一或多個標籤

  9. 如要建立磁碟,請按一下「建立」

gcloud

使用 gcloud compute disks create 指令。您指定的引數取決於您要建立區域磁碟還是地區磁碟。

建立可用區磁碟

使用 --zone 標記指定區域:

gcloud compute disks create DISK_NAME --zone=ZONE \
  --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • ZONE:新磁碟的區域,例如 europe-west1-a
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。

建立區域磁碟

請使用 --region 指定區域,並使用 --replica-zones 指定新磁碟的目標複製區域。

gcloud compute disks create DISK_NAME \
 --region=REGION \
 --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME \
 --replica-zones=ZONE1,ZONE2

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • REGION:地區磁碟所在的地區,例如:europe-west1
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • ZONE1,ZONE2:這兩個磁碟備用資源所在的區域,例如:europe-west1-b,europe-west1-c

REST

如要從即時快照建立區域或地區磁碟,請使用 disks.insert 方法。新磁碟的類型必須與即時快照的來源磁碟相同。舉例來說,您無法從區域磁碟的快照建立區域磁碟。

建立可用區磁碟

提出 POST 要求,指定來源即時快照。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/SOURCE_ZONE/disks/insert
{
"name": "NEW_DISK_NAME",
"sourceInstantSnapshot": "projects/PROJECT/zones/SOURCE_ZONE/instantSnapshots/SOURCE_INSTANT_SNAPSHOT_NAME"
}

更改下列內容:

  • PROJECT:建立新磁碟的專案。
  • SOURCE_ZONE:即時快照所在的可用區,例如 us-central1-a。磁碟會在這個可用區建立。
  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。

建立區域磁碟

提出 POST 要求,指定來源即時快照和磁碟應複製至的區域。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/region/SOURCE_REGION/disks/insert

{
"name": "NEW_DISK_NAME",
"sourceInstantSnapshot": "projects/PROJECT/regions/SOURCE_REGION/instantSnapshots/SOURCE_INSTANT_SNAPSHOT_NAME",
"replicaZones": [
  "projects/PROJECT/zones/ZONE1",
  "projects/PROJECT/zones/ZONE2"
]
}

更改下列內容:

  • PROJECT:建立新磁碟的專案。
  • SOURCE_REGION:即時快照所在的區域。磁碟會在這個區域建立。
  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • ZONE1,ZONE2:兩個磁碟備用資源所在的區域,例如 europe-west1-beurope-west1-c

API 要求回應

如果 POST 要求成功,回應主體會是您可以輪詢的物件,用於取得磁碟建立狀態。詳情請參閱「處理 API 回應」。

透過 CMEK 或 CSEK 加密的即時快照建立磁碟

主控台

如果即時快照使用 Google 預設或 CMEK 加密,當您透過即時快照建立磁碟時,Google Cloud 控制台會自動提供加密金鑰。否則,如果即時快照是使用 CSEK 加密,您必須提供加密金鑰才能建立磁碟。

請按照「Google 管理的加密功能」一節中的步驟操作,並按照以下說明指定加密金鑰:

  1. 在「Decryption」部分,在「Encryption key」欄位中輸入加密金鑰。
  2. 如果金鑰已使用公開 RSA 金鑰包裝,請選取「Wrapped key」

gcloud

使用 gcloud compute disks create 指令

如果來源磁碟已加密 CMEK,請使用 --kms-key 參數提供金鑰名稱。

如果來源磁碟已加密 CSEK,請使用 --csek-key-file 參數指定來源磁碟的加密金鑰。

CMEK

如要從 CMEK 加密的即時快照建立區域磁碟,請使用下列指令:

     gcloud compute disks create NEW_DISK_NAME \
       --zone=SOURCE_ZONE \
       --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME \
       --kms-key=projects/KMS_PROJECT_NAME/locations/KEYRING_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

更改下列內容:

  • NEW_DISK_NAME:新磁碟的名稱。
  • SOURCE_ZONE:即時快照的儲存區,例如 europe-west1-a
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • KMS_PROJECT_NAME:包含金鑰的專案。
  • KEYRING_LOCATION:金鑰所屬金鑰環的位置。如果金鑰環是全域金鑰環,請指定 global。否則,請指定金鑰環所在的區域名稱,例如 us-west1
  • KEY_RING_NAME:金鑰所屬的金鑰環名稱,例如 key-ring-1
  • KEY_NAME:用於加密磁碟的金鑰名稱。

CSEK

如要從 CSEK 加密的即時快照建立區域磁碟,請使用下列指令:

     gcloud compute disks create NEW_DISK_NAME \
       --zone=SOURCE_ZONE \
       --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME \
       --csek-key-file=PATH_TO_CSEK_JSON_FILE
 

更改下列內容:

  • NEW_DISK_NAME:新磁碟的名稱。
  • SOURCE_ZONE:即時快照的儲存區,例如 europe-west1-a
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • CSEK_JSON_FILE:包含金鑰的 JSON 檔案路徑。請參閱 CSEK 檔案格式的範例

如要建立區域磁碟,請將前述範例中的 --zone 標記替換為下列標記:

  • --region:新磁碟的地區
  • --replica-zones:這兩個磁碟備用資源所在的區域。

REST

如要從 CMEK 或 CSEK 加密的即時快照建立區域或地區磁碟,請使用 Google 管理的加密一節中列出的屬性,向 disks.insert 方法提出 POST 要求。

此外,請使用 diskEncryptionKey 欄位提供來源磁碟的加密金鑰。diskEncryptionKey 欄位的屬性取決於磁碟是否已使用 CMEK 或 CSEK 加密。

以下範例說明如何為每種加密類型建立新的區域磁碟。

CMEK

在要求主體中,使用 diskEncryptionKey.kmsKeyName 屬性指定金鑰名稱:

{
"name": "NEW_DISK_NAME",
"sourceInstantSnapshot": "projects/PROJECT/zones/SOURCE_ZONE/instantSnapshots/SOURCE_INSTANT_SNAPSHOT_NAME",
"diskEncryptionKey": {
      "kmsKeyName": "projects/KMS_PROJECT/locations/LOCATION/keyRings/KEYRING_LOCATION/cryptoKeys/KEY_NAME"
  }
}

更改下列內容:

  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • PROJECT:建立新磁碟的專案。
  • SOURCE_ZONE:即時快照所在的區域,例如 us-central1-a。磁碟會在這個可用區建立。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • KMS_PROJECT:包含鍵的專案。
  • LOCATION:金鑰所屬金鑰環的位置。如果金鑰環是全域金鑰環,請指定 global。否則,請指定金鑰環所在的區域名稱,例如 us-west1
  • KEY_RING:包含金鑰的鑰匙圈名稱,例如 key-ring-1
  • KEY:用於加密磁碟的金鑰名稱。

CSEK

這取決於用於加密即時快照的 CSEK 是否已經過 RSA 加密。

如要使用原始 (非 RSA 加密) 金鑰,請在要求主體的 diskEncryptionKey.rawKey 屬性中指定金鑰:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/SOURCE_ZONE/disks/insert
{
  "name": "NEW_DISK_NAME",
  "sourceInstantSnapshot": "projects/PROJECT/zones/SOURCE_ZONE/instantSnapshots/INSTANT_SNAPSHOT_NAME,
  "diskEncryptionKey": {
      "rawKey": "RAW_ENCRYPTION_KEY"
  }
}

將下列內容替換為對應的值:

  • PROJECT:建立新磁碟的專案。
  • SOURCE_ZONE:即時快照所在的可用區,例如 us-central1-a。磁碟會在這個可用區建立。
  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • RAW_ENCRYPTION_KEY:用於加密即時快照及其來源磁碟的金鑰,例如 SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=

如要使用 RSA 加密金鑰,請按照以下方式修改上述範例:

  • disks.insert 方法發出 POST 要求:

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

  • 請在要求主體的 diskEncryptionKey.rsaEncryptedKey 屬性中指定鍵:

    "diskEncryptionKey": {
     "rsaEncryptedKey": "RSA_ENCRYPTED_KEY"
    }
    

RSA_ENCRYPTED_KEY 替換為您的加密金鑰。

API 要求回應

如果 POST 要求成功,回應主體會是您可以輪詢的物件,用於取得磁碟建立狀態。詳情請參閱「處理 API 回應」。