本文說明在 Compute Engine 上匯入及匯出映像檔的必要條件。
您可以從其他雲端環境或地端部署環境匯入及匯出 Cloud Storage 中的映像檔,藉此共用虛擬機器 (VM) 執行個體、虛擬磁碟檔案和機器映像檔。以下檢查清單彙整了匯入及匯出圖片前須符合的規定:
- 設定 Cloud Storage bucket 的存取權
- 將必要角色授予使用者帳戶
- 將必要角色授予 Cloud Build 服務帳戶
- 將必要角色授予 Compute Engine 服務帳戶
- 設定 VPC Service Controls
事前準備
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上的分頁,瞭解如何使用範例:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,無須設定驗證。
gcloud
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
- 設定預設地區和區域。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。
設定 Cloud Storage bucket 的存取權
您必須有權存取匯入或匯出工具可使用的 Cloud Storage bucket。如果沒有 Cloud Storage bucket,請參閱「建立 Cloud Storage bucket」。
如要設定 Cloud Storage 值區的存取權,請參閱「授予帳戶必要角色」和「Compute Engine 服務帳戶」。
如果您要匯出圖片,匯出工具會將圖片上傳至 Cloud Storage bucket。
如果要匯入映像檔,請先將映像檔上傳至 Cloud Storage bucket。匯入工具會將檔案從 Cloud Storage bucket 下載至 Compute Engine,然後透過該磁碟檔案在 Compute Engine 中建立映像檔。
授予必要的 IAM 角色
VM 映像檔匯入和匯出工具需要下列帳戶代表您執行作業:
- 使用者帳戶。您要執行匯入和匯出指令的帳戶。
- Cloud Build 服務帳戶。匯入或匯出工具啟用 Cloud Build API 時建立的預設 Cloud Build 服務帳戶。
- Compute Engine 服務帳戶。匯入和匯出工作流程所需的預設或自訂 Compute Engine 服務帳戶。
將必要角色授予使用者帳戶
如要匯入或匯出圖片,使用者帳戶必須具備下列角色:
- Storage 管理員角色 (
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」(檢視者)
- Resource Manager > 專案 IAM 管理員
- 「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 服務帳戶。
Cloud Build 使用的服務帳戶取決於您是否在 2024 年 5 月前使用專案中的 Cloud Build。如果是,系統會使用舊版 Cloud Build 服務帳戶執行日後的建構作業。否則會使用預設的 Compute Engine 服務帳戶。
- 服務帳戶權杖建立者角色 (
roles/iam.serviceAccountTokenCreator) - 服務帳戶使用者角色
(
roles/iam.serviceAccountUser) - Compute 管理員角色 (
roles/compute.admin)如要避免授予 Compute 管理員角色,您可以 建立自訂角色,並授予該角色下列 Compute Engine IAM 權限,然後將該角色授予 Cloud Build 服務帳戶:
- Compute 網路使用者角色 (
roles/compute.networkUser)只有在匯入或匯出使用 Shared VPC 的映像檔時,才需要這個角色。
在 Shared VPC 專案中,將 Compute 網路使用者角色授予 Cloud Build 服務帳戶,該帳戶位於您匯入或匯出映像檔的專案中。
不過,您可以手動授予這些角色,確保必要的權限生效:
控制台
啟用 Cloud Build API 後,請前往專案或機構的「IAM 與管理」頁面。
找出 Cloud Build 服務帳戶,然後按一下「編輯」。
如果未列出必要角色,請按照下列步驟操作:
- 按一下 「Add another role」(新增其他角色)。
在「Select a role」(選取角色) 清單中,選取要新增的必要角色:
- 「服務帳戶」>「服務帳戶權杖建立者」
- 「服務帳戶」>「服務帳戶使用者」
「Compute Engine」(Compute Engine) >「Compute Admin」(Compute 管理員)
或者,您也可以選取「自訂」角色。請參閱本文件稍早的「自訂角色需要的權限」。
按一下「儲存」儲存變更。
選用:如果您要匯入或匯出使用 Shared VPC 的映像檔,請在 Shared VPC 專案中選取 Compute Network User 角色:
- 在控制台頂端的專案選取器中,選取 Shared VPC 主專案。
- 在「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'
選用:如要匯出或匯入使用 Shared VPC 的映像檔,請授予
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:Shared VPC 所在主機專案的 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 服務帳戶。請參閱本文件稍早的「自訂角色需要的權限」。選用:如要匯出或匯入使用 Shared VPC 的映像檔,請在 Shared VPC 專案中授予
roles/compute.networkUser角色。POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:getIamPolicy
將
HOST_PROJECT_ID替換為 Shared 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 日後建立,系統預設會強制執行這項限制。
停用自動角色授予功能後,您必須決定要將哪些角色授予預設服務帳戶,然後自行授予這些角色。
如果預設服務帳戶已具備「編輯者」角色,建議您將「編輯者」角色替換為權限較少的角色。如要安全修改服務帳戶的角色,請使用 Policy Simulator 查看變更會造成的影響,然後授予及撤銷適當的角色。
Compute Engine 服務帳戶必須具備下列角色:
- Compute 儲存空間管理員角色
(
roles/compute.storageAdmin):匯出及匯入 VM 映像檔時皆須具備此角色 - Storage 物件檢視者角色
(
roles/storage.objectViewer):匯入 VM 映像檔時必須具備此角色 - Storage 物件管理員角色 (
roles/storage.objectAdmin):匯出 VM 映像檔時必須具備此角色 - 儲存空間管理員角色
(
roles/storage.admin):匯出 VM 映像檔時必須具備此角色
控制台
前往專案或機構的「IAM 與管理員」頁面。
找出 Compute Engine 服務帳戶,然後按一下「編輯」。
在「Select a role」(選取角色) 清單中,選取下列角色:
- 「Compute Engine」(Compute Engine) >「Compute Storage Admin」(Compute 儲存空間管理員)
- 「Cloud Storage」>「Storage 物件檢視者」
- 「Cloud Storage」>「Storage Object Admin」(Storage 物件管理員)
儲存變更。
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 服務帳戶,請參閱下列資源:
設定 VPC Service Controls
如果您使用 VPC Service Controls 保護專案,則必須在 compute-image-import (數字 71462206840) 專案中新增輸出規則。為遵守最小權限原則,建議您只允許 artifactregistry.googleapis.com 服務使用下列方法:
artifactregistry.repositories.downloadArtifactsartifactregistry.tags.getartifactregistry.tags.listartifactregistry.versions.get
詳情請參閱「VPC Service Controls 限制」。