本文說明在 Compute Engine 上匯入及匯出映像檔的必要條件。
您可以從其他雲端環境或內部部署環境匯入及匯出 Cloud Storage 中的映像檔,藉此共用虛擬機器 (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
-
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.
- Set a default region and zone.
如果您要匯出圖片,匯出工具會將圖片上傳至 Cloud Storage bucket。
如果要匯入映像檔,請先將映像檔上傳至 Cloud Storage 值區。匯入工具會將檔案從 Cloud Storage bucket 下載至 Compute Engine,然後透過該磁碟檔案在 Compute Engine 中建立映像檔。
- 使用者帳戶。您要執行匯入和匯出指令的帳戶。
- 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
) 前往專案或機構的「IAM 與管理員」頁面。
找出帳戶,然後按一下「編輯」
。在「Select a role」(選取角色) 清單中,選取下列角色:
- 「Cloud Storage」>「Storage Admin」(儲存空間管理員)
- 「Project」(專案) >「Viewer」(檢視者)
- 「資源管理員」>「專案 IAM 管理員」
- 「Cloud Build」>「Cloud Build 編輯器」
儲存變更。
授予
roles/storage.admin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/storage.admin'
更改下列內容:
PROJECT_ID
:專案的Google Cloud 專案 IDMEMBER
:執行匯入和匯出指令的帳戶,例如user:export-user@gmail.com
授予
roles/viewer
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/viewer'
授予
roles/resourcemanager.projectIamAdmin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/resourcemanager.projectIamAdmin'
授予
roles/cloudbuild.builds.editor
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/cloudbuild.builds.editor'
使用資源的
getIamPolicy
方法讀取現有政策。如果是專案,請使用projects.getIamPolicy
方法。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
將
PROJECT_ID
改為專案 ID,例如my-project-1
。如要將必要角色授予帳戶,請使用文字編輯器編輯政策。
舉例來說,如要將必要角色授予帳戶
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" ] } }
如要寫入更新後的政策,請使用
setIamPolicy
方法。舉例來說,如要在專案層級設定政策,請使用
project.setIamPolicy
方法。在要求主體中,提供上一個步驟中更新的 IAM 政策。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
- 服務帳戶憑證建立者角色
(
roles/iam.serviceAccountTokenCreator
) - 服務帳戶使用者角色
(
roles/iam.serviceAccountUser
) - Compute 管理員角色 (
roles/compute.admin
)為避免授予 Compute 管理員角色,您可以 建立自訂角色,並授予該角色下列 Compute Engine IAM 權限,然後將該角色授予 Cloud Build 服務帳戶:
- Compute 網路使用者角色 (
roles/compute.networkUser
)只有在匯入或匯出使用共用 VPC 的映像檔時,才需要這個角色。
在共用虛擬私有雲專案中,將 Compute 網路使用者角色授予 Cloud Build 服務帳戶,該帳戶位於您匯入或匯出映像檔的專案中。
啟用 Cloud Build API 後,請前往專案或機構的「IAM 與管理」頁面。
找到 Cloud Build 服務帳戶,然後按一下「編輯」
。如果未列出必要角色,請按照下列步驟操作:
- 按一下 「Add another role」(新增其他角色)。
在「Select a role」(選擇角色) 清單中,選取要新增的必要角色:
- 「服務帳戶」>「服務帳戶憑證建立者」
- 「服務帳戶」>「服務帳戶使用者」
「Compute Engine」(Compute Engine) >「Compute Admin」(Compute 管理員)
或者,您也可以選取「自訂」角色。請參閱本文件稍早的「自訂角色需要的權限」。
按一下「儲存」儲存變更。
選用:如果匯入或匯出的映像檔使用共用虛擬私有雲,請在共用虛擬私有雲專案中選取 Compute Network User 角色:
- 在控制台頂端的專案選取器中,選取共用 VPC 主專案。
- 在「IAM 與管理」頁面中,按一下 「授予存取權」。
- 在「新增主體」欄位中,輸入 Cloud Build 服務帳戶的電子郵件地址:
將PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
PROJECT_NUMBER
替換為匯入或匯出圖片的專案專屬編號。 - 在「Select a role」(請選擇角色) 清單中,依序選取「Compute Engine」>「Compute Network User」(Compute 網路使用者) 角色。
- 按一下「儲存」儲存變更。
將
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'
更改下列內容:
PROJECT_ID
:專案的Google Cloud 專案 IDPROJECT_NUMBER
:專案的Google Cloud 專案編號
授予
roles/iam.serviceAccountUser
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \ --role='roles/iam.serviceAccountUser'
授予
roles/iam.serviceAccountTokenCreator
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \ --role='roles/iam.serviceAccountTokenCreator'
選用:如要匯出或匯入使用共用虛擬私人雲端的映像檔,請授予
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
:共用虛擬私有雲所在的主專案 IDPROJECT_NUMBER
:專案的專屬編號,用於匯入或匯出圖片
使用資源的
getIamPolicy
方法讀取現有政策。如果是專案,請使用projects.getIamPolicy
方法。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
將
PROJECT_ID
改為專案 ID,例如my-project-1
。如要將必要角色授予帳戶,請使用文字編輯器編輯政策。
舉例來說,如要將必要角色授予
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 服務帳戶。請參閱本文稍早的「自訂角色需要的權限」。選用:如要匯出或匯入使用共用虛擬私有雲的映像檔,請在共用虛擬私有雲專案中授予
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" ] } }
如要寫入更新後的政策,請使用
setIamPolicy
方法。舉例來說,如要在專案層級設定政策,請使用
project.setIamPolicy
方法。在要求主體中,提供上一個步驟中更新的 IAM 政策。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
- Compute 儲存空間管理員角色 (
roles/compute.storageAdmin
):匯出及匯入 VM 映像檔時皆須具備此角色 - Storage 物件檢視者角色
(
roles/storage.objectViewer
):匯入 VM 映像檔時必須具備此角色 - Storage 物件管理員角色 (
roles/storage.objectAdmin
):匯出 VM 映像檔時必須具備此角色 前往專案或機構的「IAM 與管理員」頁面。
找到 Compute Engine 服務帳戶,然後按一下「編輯」
。在「Select a role」(選取角色) 清單中,選取下列角色:
- 「Compute Engine」(Compute Engine) >「Compute Storage Admin」(Compute 儲存空間管理員)
- 「Cloud Storage」>「Storage 物件檢視者」
- 「Cloud Storage」>「Storage Object Admin」(Storage 物件管理員)
儲存變更。
授予
roles/compute.storageAdmin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \ --role='roles/compute.storageAdmin'
如要匯入圖片,請授予
roles/storage.objectViewer
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \ --role='roles/storage.objectViewer'
如要匯出圖片,請授予
roles/storage.objectAdmin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \ --role='roles/storage.objectAdmin'
使用資源的
getIamPolicy
方法讀取現有政策。如果是專案,請使用projects.getIamPolicy
方法。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
將
PROJECT_ID
改為專案 ID,例如my-project-1
。如要將必要角色授予帳戶,請使用文字編輯器編輯政策。
舉例來說,如要將匯入映像檔所需的角色授予
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" ] } }
如要寫入更新後的政策,請使用
setIamPolicy
方法。舉例來說,如要在專案層級設定政策,請使用
project.setIamPolicy
方法。在要求主體中,提供上一個步驟中更新的 IAM 政策。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
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 服務帳戶」。
授予必要的 IAM 角色
VM 映像檔匯入和匯出工具需要下列帳戶代表您執行作業:
將必要角色授予使用者帳戶
如要匯入或匯出圖片,使用者帳戶必須具備下列角色:
主控台
gcloud
在下列步驟中,您會使用
gcloud projects add-iam-policy-binding
指令,在專案層級授予必要角色。REST
將必要角色授予 Cloud Build 服務帳戶
首次使用 Google Cloud 控制台或 gcloud CLI 匯入或匯出映像檔時,工具會嘗試啟用 Cloud Build API,並將必要角色授予 Cloud Build 服務帳戶。
不過,您可以手動授予這些角色,確保必要的權限生效:
主控台
gcloud
在下列步驟中,您會使用
gcloud projects add-iam-policy-binding
指令,在專案層級授予必要角色。REST
如要進一步瞭解如何管理資源存取權,請參閱授予、變更及撤銷資源的存取權。
將必要角色授予 Compute Engine 服務帳戶
首次使用 Google Cloud 控制台或 gcloud CLI 匯入或匯出映像檔時,工具會嘗試將必要角色授予預設 Compute Engine 服務帳戶。
視機構政策設定而定,系統可能會自動將專案的編輯者角色授予預設服務帳戶。強烈建議您 強制執行
iam.automaticIamGrantsForDefaultServiceAccounts
機構政策限制,停用自動授予角色功能。如果您是在 2024 年 5 月 3 日後建立機構,系統預設會強制執行這項限制。如果停用自動角色授予功能,您必須決定要授予預設服務帳戶哪些角色,然後自行授予這些角色。
如果預設服務帳戶已具備「編輯者」角色,建議您將「編輯者」角色替換為權限較少的角色。如要安全地修改服務帳戶的角色,請使用 政策模擬器查看變更的影響,然後授予及撤銷適當的角色。
Compute Engine 服務帳戶必須具備下列角色:
主控台
gcloud
在下列步驟中,您會使用
gcloud projects add-iam-policy-binding
指令,在專案層級授予必要角色。REST
如果不想使用預設的 Compute Engine 服務帳戶,可以在
gcloud
匯入和匯出指令中,使用--compute-service-account
旗標指定使用者管理的服務帳戶。如要進一步瞭解如何使用自訂 Compute Engine 服務帳戶,請參閱下列資源:後續步驟
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-11 (世界標準時間)。
-