匯入及匯出 VM 映像檔的先決條件


本文說明在 Compute Engine 上匯入及匯出映像檔的必要條件。

您可以從其他雲端環境或內部部署環境匯入及匯出 Cloud Storage 中的映像檔,藉此共用虛擬機器 (VM) 執行個體、虛擬磁碟檔案和機器映像檔。以下檢查清單彙整了匯入及匯出圖片前須符合的規定:

  1. 設定 Cloud Storage bucket 的存取權
  2. 將必要角色授予使用者帳戶
  3. 將必要角色授予 Cloud Build 服務帳戶
  4. 將必要角色授予 Compute Engine 服務帳戶

事前準備

  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 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.
      3. REST

        如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 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.

        詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

設定 Cloud Storage 值區的存取權

您必須有權存取匯入或匯出工具可使用的 Cloud Storage bucket。如果沒有 Cloud Storage bucket,請參閱「建立 Cloud Storage bucket」。

如要設定 Cloud Storage 值區的存取權,請參閱「授予帳戶必要角色」和「Compute Engine 服務帳戶」。

  • 如果您要匯出圖片,匯出工具會將圖片上傳至 Cloud Storage bucket。

  • 如果要匯入映像檔,請先將映像檔上傳至 Cloud Storage 值區。匯入工具會將檔案從 Cloud Storage bucket 下載至 Compute Engine,然後透過該磁碟檔案在 Compute Engine 中建立映像檔。

授予必要的 IAM 角色

VM 映像檔匯入和匯出工具需要下列帳戶代表您執行作業:

  • 使用者帳戶。您要執行匯入和匯出指令的帳戶。
  • Cloud Build 服務帳戶。匯入或匯出工具啟用 Cloud Build API 時建立的預設 Cloud Build 服務帳戶。
  • Compute Engine 服務帳戶。匯入和匯出工作流程所需的預設或自訂 Compute Engine 服務帳戶。

將必要角色授予使用者帳戶

如要匯入或匯出圖片,使用者帳戶必須具備下列角色:

  • 儲存空間管理員角色 (roles/storage.admin)
  • 檢視者角色 (roles/viewer)
  • 專案 IAM 管理員角色 (roles/resourcemanager.projectIamAdmin)
  • Cloud Build 編輯者角色 (roles/cloudbuild.builds.editor)

主控台

  1. 前往專案或機構的「IAM 與管理員」頁面。

    前往「IAM & Admin」(IAM 與管理)

  2. 找出帳戶,然後按一下「編輯」

  3. 在「Select a role」(選取角色) 清單中,選取下列角色:

    • 「Cloud Storage」>「Storage Admin」(儲存空間管理員)
    • 「Project」(專案) >「Viewer」(檢視者)
    • 「資源管理員」>「專案 IAM 管理員」
    • 「Cloud Build」>「Cloud Build 編輯器」
  4. 儲存變更。

gcloud

在下列步驟中,您會使用 gcloud projects add-iam-policy-binding 指令,在專案層級授予必要角色。

  1. 授予 roles/storage.admin 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/storage.admin'
    

    更改下列內容:

    • PROJECT_ID:專案的Google Cloud 專案 ID
    • MEMBER:執行匯入和匯出指令的帳戶,例如 user:export-user@gmail.com
  2. 授予 roles/viewer 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/viewer'
    
  3. 授予 roles/resourcemanager.projectIamAdmin 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/resourcemanager.projectIamAdmin'
    
  4. 授予 roles/cloudbuild.builds.editor 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/cloudbuild.builds.editor'
    

REST

  1. 使用資源的 getIamPolicy 方法讀取現有政策。如果是專案,請使用 projects.getIamPolicy 方法

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID 改為專案 ID,例如 my-project-1

  2. 如要將必要角色授予帳戶,請使用文字編輯器編輯政策。

    舉例來說,如要將必要角色授予帳戶 user:export-user@gmail.com,請在政策中新增下列繫結:

    {
       {
         "role":"roles/storage.admin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/viewer",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/resourcemanager.projectIamAdmin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/cloudbuild.builds.editor",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
    }
    
  3. 如要寫入更新後的政策,請使用 setIamPolicy 方法。

    舉例來說,如要在專案層級設定政策,請使用 project.setIamPolicy 方法。在要求主體中,提供上一個步驟中更新的 IAM 政策。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

將必要角色授予 Cloud Build 服務帳戶

首次使用 Google Cloud 控制台或 gcloud CLI 匯入或匯出映像檔時,工具會嘗試啟用 Cloud Build API,並將必要角色授予 Cloud Build 服務帳戶

  • 服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator)
  • 服務帳戶使用者角色 (roles/iam.serviceAccountUser)
  • Compute 管理員角色 (roles/compute.admin)

    為避免授予 Compute 管理員角色,您可以 建立自訂角色,並授予該角色下列 Compute Engine IAM 權限,然後將該角色授予 Cloud Build 服務帳戶

  • Compute 網路使用者角色 (roles/compute.networkUser)

    只有在匯入或匯出使用共用 VPC 的映像檔時,才需要這個角色。

    在共用虛擬私有雲專案中,將 Compute 網路使用者角色授予 Cloud Build 服務帳戶,該帳戶位於您匯入或匯出映像檔的專案中。

不過,您可以手動授予這些角色,確保必要的權限生效:

主控台

  1. 啟用 Cloud Build API 後,請前往專案或機構的「IAM 與管理」頁面。

    前往「IAM & Admin」(IAM 與管理)

  2. 找到 Cloud Build 服務帳戶,然後按一下「編輯」

  3. 如果未列出必要角色,請按照下列步驟操作:

    1. 按一下 「Add another role」(新增其他角色)
    2. 在「Select a role」(選擇角色) 清單中,選取要新增的必要角色:

      • 「服務帳戶」>「服務帳戶憑證建立者」
      • 「服務帳戶」>「服務帳戶使用者」
      • 「Compute Engine」(Compute Engine) >「Compute Admin」(Compute 管理員)

        或者,您也可以選取「自訂」角色。請參閱本文件稍早的「自訂角色需要的權限」。

    3. 按一下「儲存」儲存變更。

  4. 選用:如果匯入或匯出的映像檔使用共用虛擬私有雲,請在共用虛擬私有雲專案中選取 Compute Network User 角色:

    1. 在控制台頂端的專案選取器中,選取共用 VPC 主專案。
    2. 在「IAM 與管理」頁面中,按一下「授予存取權」
    3. 在「新增主體」欄位中,輸入 Cloud Build 服務帳戶的電子郵件地址:
       PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
       
      PROJECT_NUMBER 替換為匯入或匯出圖片的專案專屬編號。
    4. 在「Select a role」(請選擇角色) 清單中,依序選取「Compute Engine」>「Compute Network User」(Compute 網路使用者) 角色。
    5. 按一下「儲存」儲存變更。

gcloud

在下列步驟中,您會使用 gcloud projects add-iam-policy-binding 指令,在專案層級授予必要角色。

  1. roles/compute.admin 角色授予 Cloud Build 服務帳戶。如要避免授予 roles/compute.admin 角色,您可以建立具備必要權限的自訂角色,然後將該角色授予 Cloud Build 服務帳戶。請參閱本文稍早的「自訂角色需要的權限」一節。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.admin'
    

    更改下列內容:

  2. 授予 roles/iam.serviceAccountUser 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. 授予 roles/iam.serviceAccountTokenCreator 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountTokenCreator'
    
  4. 選用:如要匯出或匯入使用共用虛擬私人雲端的映像檔,請授予 roles/compute.networkUser 角色:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.networkUser'
    

    更改下列內容:

    • HOST_PROJECT_ID:共用虛擬私有雲所在的主專案 ID
    • PROJECT_NUMBER:專案的專屬編號,用於匯入或匯出圖片

REST

  1. 使用資源的 getIamPolicy 方法讀取現有政策。如果是專案,請使用 projects.getIamPolicy 方法

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID 改為專案 ID,例如 my-project-1

  2. 如要將必要角色授予帳戶,請使用文字編輯器編輯政策。

    舉例來說,如要將必要角色授予 serviceAccount:12345@cloudbuild.gserviceaccount.com,請將下列繫結新增至政策:

    {
       {
         "role":"roles/compute.admin",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/iam.serviceAccountUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
      {
         "roles":"roles/iam.serviceAccountTokenCreator",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    

    如要避免授予 roles/compute.admin 角色,您可以建立具備必要權限的自訂角色,然後將該角色授予 Cloud Build 服務帳戶。請參閱本文稍早的「自訂角色需要的權限」。

  3. 選用:如要匯出或匯入使用共用虛擬私有雲的映像檔,請在共用虛擬私有雲專案中授予 roles/compute.networkUser 角色。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:getIamPolicy
    

    HOST_PROJECT_ID 替換為共用 VPC 專案的 ID。

    將下列 IAM 繫結新增至 Cloud Build 服務帳戶:

    {
       {
         "roles":"roles/compute.networkUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    
  4. 如要寫入更新後的政策,請使用 setIamPolicy 方法。

    舉例來說,如要在專案層級設定政策,請使用 project.setIamPolicy 方法。在要求主體中,提供上一個步驟中更新的 IAM 政策。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

如要進一步瞭解如何管理資源存取權,請參閱授予、變更及撤銷資源的存取權

將必要角色授予 Compute Engine 服務帳戶

首次使用 Google Cloud 控制台或 gcloud CLI 匯入或匯出映像檔時,工具會嘗試將必要角色授予預設 Compute Engine 服務帳戶

視機構政策設定而定,系統可能會自動將專案的編輯者角色授予預設服務帳戶。強烈建議您 強制執行 iam.automaticIamGrantsForDefaultServiceAccounts 機構政策限制,停用自動授予角色功能。如果您是在 2024 年 5 月 3 日後建立機構,系統預設會強制執行這項限制。

如果停用自動角色授予功能,您必須決定要授予預設服務帳戶哪些角色,然後自行授予這些角色

如果預設服務帳戶已具備「編輯者」角色,建議您將「編輯者」角色替換為權限較少的角色。如要安全地修改服務帳戶的角色,請使用 政策模擬器查看變更的影響,然後授予及撤銷適當的角色

Compute Engine 服務帳戶必須具備下列角色:

  • Compute 儲存空間管理員角色 (roles/compute.storageAdmin):匯出及匯入 VM 映像檔時皆須具備此角色
  • Storage 物件檢視者角色 (roles/storage.objectViewer):匯入 VM 映像檔時必須具備此角色
  • Storage 物件管理員角色 (roles/storage.objectAdmin):匯出 VM 映像檔時必須具備此角色

主控台

  1. 前往專案或機構的「IAM 與管理員」頁面。

    前往「IAM & Admin」(IAM 與管理)

  2. 找到 Compute Engine 服務帳戶,然後按一下「編輯」

  3. 在「Select a role」(選取角色) 清單中,選取下列角色:

    • 「Compute Engine」(Compute Engine) >「Compute Storage Admin」(Compute 儲存空間管理員)
    • 「Cloud Storage」>「Storage 物件檢視者」
    • 「Cloud Storage」>「Storage Object Admin」(Storage 物件管理員)
  4. 儲存變更。

gcloud

在下列步驟中,您會使用 gcloud projects add-iam-policy-binding 指令,在專案層級授予必要角色。

  1. 授予 roles/compute.storageAdmin 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/compute.storageAdmin'
    
  2. 如要匯入圖片,請授予 roles/storage.objectViewer 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectViewer'
    
  3. 如要匯出圖片,請授予 roles/storage.objectAdmin 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectAdmin'
    

REST

  1. 使用資源的 getIamPolicy 方法讀取現有政策。如果是專案,請使用 projects.getIamPolicy 方法

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID 改為專案 ID,例如 my-project-1

  2. 如要將必要角色授予帳戶,請使用文字編輯器編輯政策。

    舉例來說,如要將匯入映像檔所需的角色授予 serviceAccount:12345-compute@developer.gserviceaccount.com,請將下列繫結新增至政策:

    {
       {
         "role":"roles/compute.storageAdmin",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/storage.objectViewer",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
    }
    
  3. 如要寫入更新後的政策,請使用 setIamPolicy 方法。

    舉例來說,如要在專案層級設定政策,請使用 project.setIamPolicy 方法。在要求主體中,提供上一個步驟中更新的 IAM 政策。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

如果不想使用預設的 Compute Engine 服務帳戶,可以在 gcloud 匯入和匯出指令中,使用 --compute-service-account 旗標指定使用者管理的服務帳戶。如要進一步瞭解如何使用自訂 Compute Engine 服務帳戶,請參閱下列資源:

後續步驟