创建安全映像流水线

本页面介绍如何设置安全映像流水线来自动生成基础容器映像

概览

安全映像流水线是一种开源工具,可设置 Google Cloud 项目、资源和 GitHub 代码库的框架,供您用于创建和维护自定义和基础映像安全基础映像。您可以使用 Google Cloud 项目中的映像。

下图展示了安全映像流水线创建的资源的框架:

安全映像流水线

设置流水线后,它会创建以下资源:

  • 托管容器映像源代码的 GitHub 代码库。

  • 三个 Google Cloud 项目:构建项目、预演项目和已验证的项目。每当映像代码库中的映像更新时,构建项目中的Cloud Build 触发器都会构建更新后的映像、对其进行签名,并将其推送到预演项目中的 Artifact Registry 代码库。手动验证预演项目中的映像时,流水线会将映像推送到经过验证的项目中。

费用

安全映像流水线使用以下 Google Cloud 产品。

请使用价格计算器根据您的预计使用情况来估算费用。

准备工作

必需的 IAM 权限

设置安全映像流水线的用户需要具备 Google Cloud 组织的 roles/organization.adminroles/billing.admin Identity and Access Management 角色。有关授予 IAM 角色的说明,请参阅授予、更改和撤消访问权限

设置安全映像流水线

安全映像流水线 GitHub 代码库包含用于自动生成基础映像的脚本。

若要设置安全映像流水线,请执行以下操作

  1. 将安全映像流水线 GitHub 代码库克隆到本地机器:

    git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
    
  2. 导航到 secure-image-pipeline 目录:

    cd secure-image-pipeline/
    
  3. env.sh.tmpl 复制到 env.sh

    cp env.sh.tmpl env.sh
    
  4. 在所需的编辑器中打开 env.sh

  5. 修改以下值:

    • PARENT_ORGANIZATION:输入 Google Cloud 组织的 ID。安全映像流水线脚本使用此组织生成 Google Cloud 项目和基础映像。
    • BASEIMGFCT_PROJECT:输入一个字符串,脚本会使用该字符串构造其创建的项目的 ID。该字符串必须包含小写字母、数字或连字符,介于 6 到 30 个字符之间。它必须以字母开头,且不能以连字符结尾。例如,如果您指定 foo,则脚本将创建 3 个 ID 分别为 foo-builderfoo-stagefoo-verified 的项目。
    • BASEIMGFCT_BUCKET:输入脚本创建的 Cloud Storage 存储桶的名称,用于存储 Terraform 自动化代码。请确保该名称符合存储桶命名要求
    • BASEIMGFCT_REGION:输入要使用的地区的名称,或者使用默认值。
    • BILLING_ACCOUNT:输入与组织关联的结算账号。
    • GITHUB_TOKEN:输入您的 GitHub 个人访问令牌。该脚本使用此令牌创建 GitHub 代码库,其中包含基础映像的源代码。
  6. 运行设置脚本:

    ./setup.sh
    
  7. 出现提示时,请输入以下 GitHub 账号信息:

    1. 您的 GitHub 组织的名称。

    2. 您的 GitHub 电子邮件地址。

    3. 您的 GitHub 用户名。

    4. 向脚本授予创建用于存储基础映像的新项目的权限。

    5. 输入“y”。

    此操作需要几分钟时间才能完成。完成后,系统会显示消息“关联您的 GitHub 代码库并按任意键继续”。

  8. 按任意键继续。

    该脚本会打开新的 Google Cloud 控制台浏览器窗口,以将 GitHub 代码库与 Google Cloud 项目关联。

  9. 切换到 Google Cloud 控制台浏览器窗口。

  10. 管理您的 GitHub 应用安装弹出式窗口中,选择您的 GitHub 账号。

  11. 点击添加其他项目

  12. 选择项目下拉列表中,选择格式为 YOUR_PROJECT_NAME-builder 的项目。

  13. 选择同意复选框,然后点击下一步

  14. 在代码库列表中,选择名为 baseimgfact-[some number]-containers 的代码库,然后点击 Connect (1) repositories

  15. 创建推送触发器页面中,点击跳过。该脚本会自动为您创建推送触发器。

  16. 点击完成

  17. 切换回终端。

  18. 按任意键继续。

该脚本需要几分钟才能完成执行。

由安全映像流水线创建的资源

设置脚本执行完毕后,将创建以下资源:

GitHub

  • 一个名为 baseimgfct-[some number]-containers 的代码库,其中包含用于创建容器映像的源代码。setup 脚本会用简单的 Dockerfile 指定此代码库,每个 Dockerfile 对应一个热门的 Linux 发行版。
  • 部署密钥 - 代码库的单独写入访问部署密钥。

Google Cloud 项目

  • 名为 YOUR_PROJECT_NAME-builder 的 Google Cloud 项目,其中包含每当 GitHub 代码库中的源代码更新时,用于构建映像并将其推送到预演项目的资源。

    此项目包含 Cloud Build 触发器;当 baseimgfct-[some number]-containers 中的主分支中执行拉取请求或合并时,该触发器会调用构建。拉取请求会构建映像并将其推送到预演项目。合并会构建映像并将其推送到经过验证的项目。

    YOUR_PROJECT_NAME-builder 的 IAM 权限:我们建议您仅将对此项目的访问权限授予预计会更改流水线的团队成员。如需了解如何授予对项目的访问权限,请参阅授予、更改和撤消访问权限

  • 一个名为 YOUR_PROJECT_NAME-stage 的 Google Cloud 项目,用于在将映像发布到经过验证的项目之前暂存映像以进行人工审核。此项目包含以下资源:

    • 一个 Artifact Registry Docker 代码库,其中包含构建的容器映像。
    • 项目中的每个映像的 Cloud Functions 函数,每当发现针对已知漏洞的新修补程序时,它都会触发映像重新构建。
    • 用于执行 Cloud Functions 函数的 Pub/Sub 主题。
    • 作为 Cloud Run 部署运行的 Voucher Server 的实例。Voucher Server 会对照安全政策要求列表检查映像。您可以使用流水线自带的默认政策要求,也可以指定自定义安全政策。安全检查通过后,代金券服务器会使用 Binary Authorization 为映像创建证明。该已证明的映像(也称为签名映像)会推送到经过验证的项目。

    YOUR_PROJECT_NAME-stage 的 IAM 权限:我们建议您仅向有权从 Artifact Registry 读取预演映像的开发者授予此项目的访问权限。如需了解如何授予对项目的访问权限,请参阅授予、更改和撤消访问权限

  • 一个名为 YOUR_PROJECT_NAME-verified 的 Google Cloud 项目。此项目包含已手动审核的最终签名映像。

后续步骤