准备环境

在创建 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 角色:

  • Service Usage Admin (roles/serviceusage.serviceUsageAdmin)
  • 项目 Identity and Access Management (IAM) 管理员 (roles/resourcemanager.projectIamAdmin) 或服务账号管理员 (roles/iam.serviceAccountAdmin)
  • Artifact Registry Administrator (roles/artifactregistry.admin)

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

新手入门请求

Image Builder 已正式推出,但仅面向列入许可名单的客户提供。如需为您的 Cloud de Confiance 项目启用映像自定义流水线,请提交访问权限申请表单或与您的 Cloud de Confiance 客户支持团队联系。

启用 API

Image Builder 要求您启用 Compute Engine、Cloud Build、Artifact Registry、Service Usage 和 Resource Manager API。如需使用 Cloud de Confiance 控制台或 Google Cloud CLI 启用 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) 获得此权限。了解如何授予角色

启用 API

gcloud

启用 Compute Engine、Cloud Build、Artifact Registry、Service Usage 和 Cloud Resource Manager API:

启用 API 所需的角色

如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (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 会将此服务账号附加到临时工作器虚拟机和测试虚拟机实例,以执行自定义和验证操作。此服务账号需要具有以下角色:

  • Compute Admin (roles/compute.admin):管理虚拟机实例、永久性磁盘和客机操作系统映像。
  • Service Account User (roles/iam.serviceAccountUser):允许 Cloud Build 将服务账号附加到临时工作器和测试虚拟机实例。
  • Storage Admin (roles/storage.admin):在 Cloud Storage workdir 暂存存储桶中读取和写入临时 build 工件和日志。
  • 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。

您可以使用现有服务账号,也可以为 build 流水线创建新的专用服务账号。如需使用 Cloud de Confiance 控制台或 gcloud CLI 创建新的专用服务账号并授予所需角色,请选择以下标签页之一:

控制台

    确保您拥有 Create Service Accounts IAM 角色 (roles/iam.serviceAccountCreator) 和 Project IAM Admin 角色 (roles/resourcemanager.projectIamAdmin)。了解如何授予角色
  1. 在 Cloud de Confiance 控制台中,前往创建服务账号页面。

    转到“创建服务账号”
  2. 选择您的项目。
  3. 服务账号名称字段中,输入一个名称。 Cloud de Confiance 控制台会根据此名称填充服务账号 ID 字段。

    服务账号说明字段中,输入说明。例如,Service account for quickstart

  4. 点击创建并继续
  5. 向服务账号授予以下角色:Compute Engine > Compute Admin、服务账号 > 服务账号用户、Cloud Storage > Storage Admin、Cloud Logging > Logs Writer、Service Usage > Service Usage Viewer、Cloud Build > Cloud Build 编辑者、Artifact Registry > Artifact Registry 管理员

    如需授予角色,请找到选择角色列表,然后选择相应角色。

    如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。

  6. 点击继续
  7. 服务账号用户角色字段中,输入将服务账号关联到其他资源(例如 Compute Engine 实例)的主账号的标识符。

    这通常是员工身份池中的用户的标识符。如需了解详情,请参阅 在 IAM 政策中表示员工池用户

  8. 点击完成以完成服务账号的创建过程。

gcloud

  1. 为您的 build 流水线创建服务账号:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --display-name="Image Builder Service Account"
    
  2. 向您的服务账号授予所需的角色(roles/compute.adminroles/iam.serviceAccountUserroles/storage.adminroles/logging.logWriterroles/serviceusage.serviceUsageViewerroles/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:要创建的 build 服务账号的名称。例如 custom-builder-sa
  • PROJECT_ID:您的 Cloud de Confiance 项目 ID。
  • SERVICE_ACCOUNT_EMAIL:您的 build 服务账号的电子邮件地址。

配置可信映像组织政策

由于 Image Builder 在构建执行期间会在内部使用标准的 Compute Engine 映像导入和导出工具,因此您项目的可信映像政策 (compute.trustedImageProjects) 必须明确允许来自以下项目的映像:

  • projects/compute-image-import

如果您的组织政策限制此项目,映像导出阶段将失败。

如需更新组织政策,请执行以下操作:

  1. 在针对 compute.trustedImageProjects 限制的组织政策中,将 projects/compute-image-import 添加到允许的发布商列表中。
  2. 如需详细了解如何配置组织政策限制条件,请参阅设置可信映像政策将自定义映像导出到 Cloud Storage

配置 VPC 网络和访问权限要求

在构建和验证阶段,Image Builder 会在您的 Cloud de Confiance 项目中预配临时工作器和测试虚拟机。默认情况下,Image Builder 会将实例连接到您的 default VPC 网络,并分配临时外部 IP 地址。

如果您在 imagebuilder.yaml 配方文件中指定了自定义 networksubnetwork,或者配置了 externalIP: none,则:

  • 专用 Google 访问通道和 Cloud NAT:如果工作器或测试虚拟机配置为 externalIP: none(无外部 IP),则您的 VPC 子网必须启用专用 Google 访问通道,以便实例可以访问 Google API 和服务(例如 Cloud Storage 和 Artifact Registry)。如果您的自定义步骤从外部互联网代码库下载操作系统软件包或依赖项,您还必须在子网上配置 Cloud NAT
  • 防火墙规则:确保您的 VPC 防火墙规则允许出站流量流向 Google API 和必要的软件代码库。如果您计划连接到活跃的工作器虚拟机以进行交互式调试 (debug: true),请确保防火墙规则允许通过 TCP 端口 22 进行入站流量。如果虚拟机实例没有外部 IP,则允许来自 Identity-Aware Proxy (IAP) IP 范围 35.235.240.0/20 的入站流量,以进行 TCP 转发

配置 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,请完成以下任务:

  1. 确保用于运行 Image Builder 流水的服务账号在代码库或项目级层具有 Artifact Registry Admin 角色 (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

后续步骤