在创建 Image Builder 流水线之前,您必须先准备 您的 Google Cloud 环境。如需准备环境,请完成以下任务:
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行
代码或示例,您可以通过选择以下选项之一向
Compute Engine 进行身份验证:
{1
选择标签页以了解您打算如何使用本页面上的示例:
控制台
当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。
gcloud
-
安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。 登录后, 运行以下命令来初始化 Google Cloud CLI:
gcloud init
-
- 设置默认区域和可用区。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的 凭证。
安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。
如需了解详情,请参阅 身份验证文档 中的 Google Cloud 使用 REST 时进行身份验证。
所需的角色
如需获得准备环境所需的权限,请让您的管理员向您授予项目的以下 IAM 角色:
- Service Usage Admin (
roles/serviceusage.serviceUsageAdmin) - Project Identity and Access Management (IAM) Admin (
roles/resourcemanager.projectIamAdmin) 或 Service Account Admin (roles/iam.serviceAccountAdmin) - Artifact Registry Administrator (
roles/artifactregistry.admin)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。
初始配置请求
Image Builder 目前处于 预览版 阶段。 如需为映像自定义流水线进行 Google Cloud 项目初始配置, 请提交此 访问权限申请表单 或与您的 Google Cloud 客户代表联系。
启用 API
Image Builder 要求您启用 Compute Engine API、Cloud Build API、Artifact Registry API、Service Usage API 和 Resource Manager API。如需使用 控制台或 Google Cloud CLI Google Cloud 启用 API,请选择以下标签页之一:
控制台
启用 Compute Engine API、Cloud Build API、Artifact Registry API、Service Usage API 和 Cloud Resource Manager API。
启用 API 所需的角色
如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获取此权限。了解如何授予角色。
gcloud
启用 Compute Engine API、Cloud Build API、Artifact Registry API、Service Usage API 和 Cloud Resource Manager API:
启用 API 所需的角色
如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (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 会将此服务帐号附加到临时工作器虚拟机和测试虚拟机实例,以执行自定义和验证操作。此服务帐号需要以下角色:
- Compute Admin (
roles/compute.admin):管理虚拟机实例、永久性磁盘和客机操作系统映像。 - Service Account User (
roles/iam.serviceAccountUser):允许 Cloud Build 将服务帐号附加到临时工作器虚拟机和测试虚拟机实例。 - Storage Admin (
roles/storage.admin):在 Cloud Storageworkdir暂存存储桶中读取和写入临时构建工件和日志。 - Logging Log Writer (
roles/logging.logWriter):将执行日志写入 Cloud Logging。 - Service Usage Viewer (
roles/serviceusage.serviceUsageViewer):在流水线执行期间检查项目服务状态。 - Cloud Build Editor (
roles/cloudbuild.builds.editor):触发和运行 Cloud Build 作业并导出映像。 - (可选)Artifact Registry Admin (
roles/artifactregistry.admin):将生成的操作系统映像 tar 文件上传到 Artifact Registry。
您可以使用现有服务帐号,也可以为构建流水线创建新的专用服务账号。如需使用 Google Cloud 控制台或 gcloud CLI 创建新的专用服务帐号并 授予所需角色,请选择以下标签页之一:
控制台
-
确保您拥有 Create Service Accounts IAM 角色
(
-
在 Google Cloud 控制台中,前往创建服务账号页面。
转到“创建服务账号” - 选择您的项目。
-
在服务账号名称 字段中,输入一个名称。控制台 Google Cloud 会根据此名称填充 服务账号 ID 字段。
在服务账号说明 字段中,输入说明。例如,
Service account for quickstart。 - 点击创建并继续 。
-
向该服务帐号授予以下角色: Compute Engine > Compute Admin、Service Accounts > Service Account User、Cloud Storage > Storage Admin、Cloud Logging > Logs Writer、Service Usage > Service Usage Viewer、Cloud Build > Cloud Build Editor、Artifact Registry > Artifact Registry Admin。
如需授予角色,请找到选择角色 列表,然后选择相应角色。
如需授予其他角色,请点击 添加其他 角色 ,然后添加其他各个角色。
- 点击继续 。
-
在服务账号用户角色 字段中,输入将服务帐号关联到其他资源(例如 Compute Engine 实例)的主账号的标识符。
这通常是员工身份池中的用户的标识符。如需了解详情, 请参阅 在 IAM 政策中表示员工池用户。
-
点击完成 以完成服务帐号的创建过程。
roles/iam.serviceAccountCreator) 和 Project IAM Admin 角色
(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:您的 Google Cloud 项目 ID。SERVICE_ACCOUNT_EMAIL:构建服务帐号的电子邮件地址。
配置可信映像组织政策
由于 Image Builder 在构建执行期间会在内部使用标准 Compute Engine 映像导入和导出工具,因此项目的可信映像政策 (compute.trustedImageProjects) 必须明确允许来自以下项目的映像:
projects/compute-image-import
如果您的组织政策限制此项目,则映像导出阶段会失败。
如需更新组织政策,请执行以下操作:
- 在
compute.trustedImageProjects限制的组织政策中,将projects/compute-image-import添加到允许的发布商列表中。 - 如需详细了解如何配置组织政策限制,请参阅 设置可信映像政策 和将自定义映像导出到 Cloud Storage。
配置 Artifact Registry
如需存储和管理自定义操作系统映像、安全元数据和 SLSA 构建出处证明,您必须在 Artifact Registry 中设置通用代码库。将映像存储在 Artifact Registry 中可让您维护已发布映像的安全且不可变记录。
当您配置 Artifact Registry 目标时,Image Builder 会执行以下步骤:
- 将最终的虚拟机启动磁盘导出为标准 tar 文件 (
.tar.gz)。 - 将 tar 文件上传到 Artifact Registry 中的通用代码库。
- 为制品生成 SLSA build 出处证明并对其进行签名,以将其关联到来源元数据。
- 使用 Artifact Registry tar 文件 URI 作为模板来源,向 Compute Engine 注册可用于生产用途的 Compute Engine 映像。
如需配置通用 Artifact Registry,请完成以下任务:
确保用于运行 Image Builder 流水线的服务帐号在代码库或项目级层拥有 Artifact Registry Admin 角色 (
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。
后续步骤
- 使用 Google Cloud 控制台创建和管理流水线。
- 以编程方式创建和管理流水线。
- 了解如何在 自定义配方架构中定义自定义配方。
- 查看
构建配置 (
cloudbuild.yaml) 文件 结构。