準備環境

建立 Image Builder 管道前,請先準備 Cloud de Confiance 環境。如要準備環境,請完成下列工作:

事前準備

  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Cloud de Confiance by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上範例的預計用途分頁:

    控制台

    使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,不需要設定驗證。

    gcloud

    1. 安裝 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 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

新手指引要求

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) 取得這項權限。瞭解如何授予角色。

啟用 API

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.com cloudbuild.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 Storage workdir 暫存 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 授予必要角色,請選取下列其中一個分頁標籤:

控制台

    確認您具備「建立服務帳戶」身分與存取權管理角色 (roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色。
  1. 前往 Cloud de Confiance 控制台的「Create service account」(建立服務帳戶) 頁面。

    前往「建立服務帳戶」
  2. 選取專案。
  3. 在「Service account name」(服務帳戶名稱) 欄位中輸入名稱。 Cloud de Confiance 控制台會根據這個名稱填入「Service account ID」(服務帳戶 ID) 欄位。

    在「Service account description」(服務帳戶說明) 欄位中輸入說明。例如:Service account for quickstart。

  4. 按一下「建立並繼續」。
  5. 將下列角色授予服務帳戶: Compute Engine > Compute 管理員、服務帳戶 > 服務帳戶使用者、Cloud Storage > Storage 管理員、Cloud Logging > 記錄檔寫入者、服務用量 > 服務用量檢視者、Cloud Build > Cloud Build 編輯者、Artifact Registry > Artifact Registry 管理員。

    如要授予角色,請找出「Select a role」(選取角色) 清單,然後選取角色。

    如要授予其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。

  6. 按一下 [繼續]。
  7. 在「Service account users role」(服務帳戶使用者角色) 欄位中,輸入要將服務帳戶附加至其他資源 (例如 Compute Engine 執行個體) 的主體 ID。

    這通常是工作團隊身分集區中某位使用者的 ID。詳情請參閱「 在 IAM 政策中代表工作團隊集區使用者」。

  8. 按一下「完成」,即完成建立服務帳戶。

gcloud

  1. 為建構管道建立服務帳戶:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --display-name="Image Builder Service Account"
    
  2. 將必要角色 (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"
    
  3. 選用:將選用角色 (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

如果機構政策限制這個專案,映像檔匯出階段就會失敗。

如要更新機構政策,請按照下列步驟操作:

  1. 在 compute.trustedImageProjects 限制的機構政策中,將 projects/compute-image-import 新增至允許的發布商清單。
  2. 如需設定機構政策限制的詳細操作說明,請參閱「設定可信映像檔政策」和「將自訂映像檔匯出至 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,請完成下列工作:

  1. 確認用於執行 Image Builder 管道的服務帳戶在存放區或專案層級,具備「Artifact Registry 管理員」角色 (roles/artifactregistry.admin)。如需詳細操作說明,請參閱「設定 Image Builder 服務帳戶」。

  2. 建立 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。

後續步驟