本文件說明在 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.
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.
-
設定 Cloud Storage 值區的存取權
您必須能夠存取匯入或匯出工具可用的 Cloud Storage 值區。如果您沒有 Cloud Storage 值區,請參閱「建立 Cloud Storage 值區」一節。
如要設定 Cloud Storage 值區的存取權,請參閱「授予帳戶必要的角色」和「Compute Engine 服務帳戶」。
如果您要匯出圖片,匯出工具會將圖片上傳至 Cloud Storage 值區。
如果要匯入圖片,請先將圖片上傳至 Cloud Storage 值區。匯入工具會將檔案從 Cloud Storage 值區下載至 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
)
主控台
前往專案或機構的「IAM 與管理」頁面。
找出您的帳戶,然後按一下
「編輯」。在「請選取角色」清單中,選取下列角色:
- Cloud Storage > Storage 管理員
- 「Project」>「Viewer」
- 「Resource Manager」>「Project IAM Admin」
- Cloud Build > Cloud Build 編輯器
儲存變更。
gcloud
在後續步驟中,您會使用 gcloud projects add-iam-policy-binding
指令,在專案層級授予必要角色。
授予
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'
REST
使用資源的
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
將必要角色授予 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 服務帳戶,該帳戶位於您匯入或匯出映像檔的專案中。
不過,您可以手動授予這些角色,確保已啟用必要權限:
主控台
啟用 Cloud Build API 後,請前往專案或機構的「IAM 與管理」頁面。
找出 Cloud Build 服務帳戶,然後按一下
「Edit」(編輯)。如果未列出必要角色,請按照下列步驟操作:
- 按一下 「Add another role」。
在「Select a role」清單中,選取要新增的必要角色:
- 服務帳戶 > 服務帳戶憑證建立者
- 「服務帳戶」>「服務帳戶使用者」
「Compute Engine」>「Compute 管理員」
您也可以選取「自訂」角色。請參閱本文件稍早的自訂角色所需權限。
按一下「儲存」即可儲存變更。
選用:如果您要匯入或匯出使用共用虛擬私有雲的映像檔,請在共用虛擬私有雲專案中選取「Compute 網路使用者」角色:
- 在控制台頂端的專案選取器中,選取共用虛擬私有雲主專案。
- 在「IAM 與管理」頁面中,按一下 「授予存取權」。
- 在「新增主體」欄位中,輸入 Cloud Build 服務帳戶的電子郵件地址:
將PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
PROJECT_NUMBER
替換為您匯入或匯出圖片的專案專屬編號。 - 在「Select a role」(請選擇角色) 清單中,依序選取「Compute Engine」>「Compute Network User」(Compute 網路使用者) 角色。
- 按一下「儲存」即可儲存變更。
gcloud
在後續步驟中,您會使用 gcloud projects add-iam-policy-binding
指令,在專案層級授予必要角色。
將
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
:匯入或匯出圖片的專案專屬編號
REST
使用資源的
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 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 映像檔時必須具備此角色
主控台
前往專案或機構的「IAM 與管理」頁面。
找出 Compute Engine 服務帳戶,然後按一下
「Edit」(編輯)。在「請選取角色」清單中,選取下列角色:
- 「Compute Engine」>「Compute Storage Admin」
- Cloud Storage > Storage 物件檢視器
- Cloud Storage > Storage Object Admin
儲存變更。
gcloud
在後續步驟中,您會使用 gcloud projects add-iam-policy-binding
指令,在專案層級授予必要角色。
授予
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'
REST
使用資源的
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
如果您不想使用預設的 Compute Engine 服務帳戶,可以在 gcloud
匯入和匯出指令中使用 --compute-service-account
標記,指定使用者管理的服務帳戶。如要進一步瞭解如何使用自訂 Compute Engine 服務帳戶,請參閱下列資源: