建立 Image Builder 管道前,請先準備 Cloud de Confiance 環境。如要準備環境,請完成下列工作:
事前準備
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Cloud de Confiance by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上範例的預計用途分頁:
控制台
使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,不需要設定驗證。
gcloud
-
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:
gcloud init
-
- 設定預設區域和可用區。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。
詳情請參閱 Cloud de Confiance 驗證說明文件中的「使用 REST 進行驗證」。
必要的角色
如要取得準備環境所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- 服務使用情形管理員 (
roles/serviceusage.serviceUsageAdmin) - 專案身分與存取權管理 (IAM) 管理員 (
roles/resourcemanager.projectIamAdmin) 或服務帳戶管理員 (roles/iam.serviceAccountAdmin) - Artifact Registry 管理員 (
roles/artifactregistry.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
新手指引要求
Image Builder 已正式發布,並提供許可清單。如要為 Cloud de Confiance 專案啟用圖片自訂管道,請提交存取權申請表單,或與 Cloud de Confiance 帳戶團隊聯絡。
許可清單涵蓋的服務帳戶
許可清單會依專案編號授予專案存取權。因此,允許清單只涵蓋服務帳戶,包括:
- 您在專案中建立的使用者自行管理的服務帳戶。
- 預設服務帳戶, Cloud de Confiance 例如在專案中建立的 Compute Engine 預設服務帳戶 (
PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)。
許可清單不包含 Google 擁有的服務帳戶,因為Cloud de Confiance 會在 Google 擁有的專案中建立這些服務帳戶,而不是在您的專案中。Google 擁有的服務帳戶包括:
- 服務代理,例如
service-PROJECT_NUMBER@gcp-sa-SERVICE.s3ns-system.iam.gserviceaccount.com。 - 舊版 Cloud Build 服務帳戶
(
PROJECT_NUMBER@cloudbuild.s3ns-system.iam.gserviceaccount.com), 由 Google 擁有及管理。
如要進一步瞭解這些服務帳戶類型,請參閱「服務帳戶類型」。
如果建構作業是以 Google 擁有的服務帳戶執行,建構作業就無法讀取 Artifact Registry 中的 Image Builder 編排器容器映像檔。因此管道會因權限遭拒錯誤而失敗。如要避免發生這類錯誤,請以您在專案中建立的使用者自行管理的服務帳戶執行管道,並在提交建構作業時指定該服務帳戶。詳情請參閱「設定 Image Builder 服務帳戶」和「預設 Cloud Build 服務帳戶」。
啟用 API
您必須啟用 Compute Engine、Cloud Build、Artifact Registry、服務使用情形和 Resource Manager API,才能使用 Image Builder。如要使用 Cloud de Confiance 控制台或 Google Cloud CLI 啟用 API,請選取下列其中一個分頁標籤:
控制台
如果尚未啟用 Compute Engine、Cloud Build、Artifact Registry、服務使用情形和 Cloud Resource Manager API,請啟用這些 API。
啟用 API 時所需的角色
如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
gcloud
如果尚未啟用,請啟用 Compute Engine、Cloud Build、Artifact Registry、服務使用情形和 Cloud Resource Manager API:
啟用 API 時所需的角色
如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
gcloud services enable compute.googleapis.comcloudbuild.googleapis.com artifactregistry.googleapis.com serviceusage.googleapis.com cloudresourcemanager.googleapis.com
設定 Image Builder 服務帳戶
Image Builder 自動調度管理工具會使用使用者管理的服務帳戶執行。執行映像檔建構管道時,Cloud Build 會將這個服務帳戶附加至臨時 worker VM 和測試 VM 執行個體,以執行自訂和驗證動作。這個服務帳戶需要下列角色:
- Compute 管理員 (
roles/compute.admin):管理 VM 執行個體、永久磁碟和客體 OS 映像檔。 - 服務帳戶使用者 (
roles/iam.serviceAccountUser):允許 Cloud Build 將服務帳戶附加至暫時性工作站和測試 VM 執行個體。 - 儲存空間管理員 (
roles/storage.admin):讀取及寫入 Cloud Storageworkdir暫存 bucket 中的暫時建構構件和記錄。 - 記錄檔記錄寫入者 (
roles/logging.logWriter):將執行記錄寫入 Cloud Logging。 - 服務使用情形檢視者 (
roles/serviceusage.serviceUsageViewer):在管道執行期間檢查專案服務狀態。 - Cloud Build 編輯者 (
roles/cloudbuild.builds.editor):觸發及執行 Cloud Build 工作,並匯出映像檔。 - (選用) Artifact Registry 管理員 (
roles/artifactregistry.admin): 將產生的 OS 映像檔 tar 檔案上傳至 Artifact Registry。
您可以使用現有的服務帳戶,也可以為建構管道建立新的專用服務帳戶。使用專案中的服務帳戶。請勿以 Google 擁有的服務帳戶 (例如舊版 Cloud Build 服務帳戶) 執行管道,因為 Image Builder 許可清單未涵蓋這些服務帳戶。詳情請參閱「許可清單涵蓋的服務帳戶」和「預設 Cloud Build 服務帳戶」。
如要建立新的專屬服務帳戶,並使用 Cloud de Confiance 控制台或 gcloud CLI 授予必要角色,請選取下列其中一個分頁標籤:
控制台
-
確認您具備「建立服務帳戶」身分與存取權管理角色
(
-
前往 Cloud de Confiance 控制台的「Create service account」(建立服務帳戶) 頁面。
前往「建立服務帳戶」 - 選取專案。
-
在「Service account name」(服務帳戶名稱) 欄位中輸入名稱。 Cloud de Confiance 控制台會根據這個名稱填入「Service account ID」(服務帳戶 ID) 欄位。
在「Service account description」(服務帳戶說明) 欄位中輸入說明。例如:
Service account for quickstart。 - 按一下「建立並繼續」。
-
將下列角色授予服務帳戶: Compute Engine > Compute 管理員、服務帳戶 > 服務帳戶使用者、Cloud Storage > Storage 管理員、Cloud Logging > 記錄檔寫入者、服務用量 > 服務用量檢視者、Cloud Build > Cloud Build 編輯者、Artifact Registry > Artifact Registry 管理員。
如要授予角色,請找出「Select a role」(選取角色) 清單,然後選取角色。
如要授予其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。
- 按一下 [繼續]。
-
在「Service account users role」(服務帳戶使用者角色) 欄位中,輸入要將服務帳戶附加至其他資源 (例如 Compute Engine 執行個體) 的主體 ID。
這通常是工作團隊身分集區中某位使用者的 ID。詳情請參閱「 在 IAM 政策中代表工作團隊集區使用者」。
-
按一下「完成」,即完成建立服務帳戶。
roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色
(roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色。
gcloud
為建構管道建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name="Image Builder Service Account"將必要角色 (
roles/compute.admin、roles/iam.serviceAccountUser、roles/storage.admin、roles/logging.logWriter、roles/serviceusage.serviceUsageViewer和roles/cloudbuild.builds.editor) 授予服務帳戶:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/compute.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/iam.serviceAccountUser" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/storage.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/logging.logWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/serviceusage.serviceUsageViewer" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/cloudbuild.builds.editor"選用:將選用角色 (
roles/artifactregistry.admin) 授予服務帳戶:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/artifactregistry.admin"
更改下列內容:
SERVICE_ACCOUNT_NAME:要建立的建構服務帳戶名稱。例如:custom-builder-sa。PROJECT_ID:您的 Cloud de Confiance 專案 ID。SERVICE_ACCOUNT_EMAIL:建構服務帳戶的電子郵件地址。
設定可信映像檔機構政策
由於 Image Builder 在建構執行期間會使用標準 Compute Engine 映像檔匯入和匯出工具,因此專案的信任映像檔政策 (compute.trustedImageProjects) 必須明確允許下列專案的映像檔:
projects/compute-image-import
如果機構政策限制這個專案,映像檔匯出階段就會失敗。
如要更新機構政策,請按照下列步驟操作:
- 在
compute.trustedImageProjects限制的機構政策中,將projects/compute-image-import新增至允許的發布商清單。 - 如需設定機構政策限制的詳細操作說明,請參閱「設定可信映像檔政策」和「將自訂映像檔匯出至 Cloud Storage」。
設定虛擬私有雲網路和存取需求
在建構和驗證階段,Image Builder 會在 Cloud de Confiance 專案中佈建暫時的 worker 和測試 VM。根據預設,Image Builder 會將執行個體連線至 default虛擬私有雲網路,並指派臨時外部 IP 位址。
如果您指定自訂 network 或 subnetwork,或在 imagebuilder.yaml 配方檔案中設定 externalIP: none:
- Private Google Access 和 Cloud NAT:如果工作站或測試 VM 設定為
externalIP: none(沒有外部 IP),虛擬私有雲子網路必須啟用 Private Google Access,執行個體才能存取 Google API 和服務 (例如 Cloud Storage 和 Artifact Registry)。如果自訂步驟會從外部網際網路存放區下載 OS 套件或依附元件,您也必須在子網路上設定 Cloud NAT。 - 防火牆規則:請確認虛擬私有雲防火牆規則允許輸出流量前往 Google API 和必要軟體存放區。如果您打算連線至作用中的工作站 VM 進行互動式偵錯 (
debug: true),請確認防火牆規則允許 TCP 通訊埠 22 的輸入流量。如果 VM 執行個體沒有外部 IP,請允許來自 Identity-Aware Proxy (IAP) IP 範圍35.235.240.0/20的輸入流量,以進行 TCP 轉送。
設定 Artifact Registry
如要儲存及管理自訂 OS 映像檔、安全性中繼資料和 SLSA 建構出處認證,您必須在 Artifact Registry 中設定一般存放區。將映像檔儲存在 Artifact Registry 中,可確保發布的映像檔安全無虞,且記錄不可變更。
設定 Artifact Registry 目的地時,Image Builder 會執行下列步驟:
- 將最終 VM 開機磁碟匯出為標準 tar 檔案 (
.tar.gz)。 - 將 tar 檔案上傳至 Artifact Registry 中的一般存放區。
- 為構件產生並簽署 SLSA 建構作業來源資訊驗證,將構件連結至來源中繼資料。
- 使用 Artifact Registry tar 檔案 URI 做為範本來源,向 Compute Engine 註冊可供正式環境使用的 Compute Engine 映像檔。
如要設定一般 Artifact Registry,請完成下列工作:
確認用於執行 Image Builder 管道的服務帳戶在存放區或專案層級,具備「Artifact Registry 管理員」角色 (
roles/artifactregistry.admin)。如需詳細操作說明,請參閱「設定 Image Builder 服務帳戶」。建立
generic格式的存放區。如要建立存放區,請執行gcloud artifacts repositories create指令:gcloud artifacts repositories create REPOSITORY_NAME \ --repository-format=generic \ --location=REPOSITORY_LOCATION請替換下列預留位置:
REPOSITORY_NAME:一般存放區的名稱。例如:custom-os-images。REPOSITORY_LOCATION:支援的地區。例如:us-central1。
後續步驟
- 使用 Cloud de Confiance 控制台建立及管理管道。
- 透過程式建立及管理管道。
- 瞭解如何定義自訂食譜結構定義中的自訂食譜。
- 查看建構設定 (
cloudbuild.yaml) 檔案結構。