在 Cloud Run 上部署并查看安全数据分析

本快速入门介绍了如何将容器映像部署到 Cloud Run,以及如何在 Google Cloud 控制台中的安全标签页上查看部署的安全数据分析。您将学习以下内容:

  • 使用 Cloud Deploy 将映像部署到 Cloud Run。 Cloud Deploy 是一项 Google Cloud 服务,可按指定的升级序列自动将您的应用交付到一系列目标环境。
  • 查看部署的以下安全数据分析:

    • 部署的身份和加密信息。
    • 软件工件的供应链级别 (SLSA) 级别,用于标识部署的保证级别。
    • 构建工件中的漏洞
    • build 工件的软件物料清单 (SBOM)
    • 构建来源,即关于构建的一组可验证元数据。其中包括已构建映像的摘要、输入源位置、构建工具链、构建步骤和构建时长等详细信息。

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.googleapis.com

设置默认设置

  1. 为项目 ID 设置环境变量:

    export PROJECT_ID=$(gcloud config get project)
    
  2. 设置 Cloud Deploy 的默认区域:

    gcloud config set deploy/region us-central1
    

授予访问权限

默认 Compute Engine 服务账号授予 IAM 角色。Cloud Deploy 必须满足此要求,才能将工作负载部署到 Cloud Run。

 gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/clouddeploy.jobRunner"
 gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe $PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/iam.serviceAccountUser" \
     --project=$PROJECT_ID
 gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/run.developer"

如果您在添加其中任一角色时遇到问题,请与您的项目管理员联系。

在 Artifact Registry 中创建 Docker 代码库

  1. 在位置 us-central1 中新建一个名为 containers 且说明文字为“Docker repository”(Docker 代码库)的 Docker 代码库:

    gcloud artifacts repositories create containers --repository-format=docker \
        --location=us-central1 --description="Docker repository"
    
  2. 验证您的代码库已创建:

    gcloud artifacts repositories list
    

    您应该会在显示的代码库列表中看到 containers

准备示例应用

您需要一些示例源代码来进行构建和部署。在本部分中,您将克隆一个包含 Java 代码示例的现有源代码库。

  1. 克隆包含 Java 代码示例的代码库:

    git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
    cd software-delivery-shield-demo-java/backend
    
  2. 更新 cloudrun.clouddeploy.yaml,将 PROJECT_ID 替换为您的项目 ID:

    sed -i "s/PROJECT_ID/${PROJECT_ID}/g" cloudrun.clouddeploy.yaml
    

构建应用

  1. 使用 Cloud Build 构建并容器化 Java 应用。以下命令会构建和容器化 Java 应用,并将构建的容器存储在 Artifact Registry Docker 仓库中:

    gcloud builds submit --config=cloudbuild.yaml --region=us-central1
    

    构建完成后,您会看到类似于以下内容的成功状态消息:

    DONE
    -----------------------------------------------------------------------------
    ID: 3e08565f-7f57-4449-bc68-51c46cf33d03
    CREATE_TIME: 2022-09-19T15:41:07+00:00
    DURATION: 54S
    SOURCE: gs://sds-docs-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f78055e9.tgz
    IMAGES: us-central1-docker.pkg.dev/sds-docs-project/containers/java-guestbook-backend:quickstart
    STATUS: SUCCESS
    

为构建的映像生成 SBOM

SBOM 是应用的完整清单,用于标识您的软件依赖的软件包。内容可以包括供应商提供的第三方软件、内部工件和开源库。

为您在上一部分中构建的映像生成 SBOM:

gcloud artifacts sbom export \
    --uri=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart

使用 Cloud Deploy 在 Cloud Run 上部署容器

  1. 在 Cloud Deploy 服务中注册流水线和目标:

    gcloud deploy apply --file cloudrun.clouddeploy.yaml
    

    现在,您已经有了包含目标的流水线,可以将应用部署到第一个目标了。

  2. 如需验证您的流水线是否存在,请前往 Google Cloud 控制台中的交付流水线页面:

    打开“交付流水线”页面

    系统会显示您刚刚创建的交付流水线 cloudrun-guestbook-backend-delivery

  3. 点击 cloudrun-guestbook-backend-delivery 以监控进度。交付流水线详情页面随即打开。

  4. 在 Cloud Shell 中,在 Cloud Deploy 中创建一个版本:

    gcloud deploy releases create test-release-007 \
        --delivery-pipeline=cloudrun-guestbook-backend-delivery \
        --skaffold-file=cloudrun.skaffold.yaml \
        --images=java-guestbook-backend=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
    

    新版本会显示在交付流水线详情页面的版本部分。

  5. 交付流水线详情页面上监控流水线直观显示视图,直到 dev-cluster 显示提升按钮。您可能需要刷新页面。

  6. 在交付流水线直观显示中的第一个目标 cloudrun-dev 上,点击提升

    此时将显示提升版本对话框。它会显示您要提升到的目标的详细信息。

  7. 点击提升

    该版本现已加入队列以部署到 cloudrun-prod。部署完成后,交付流水线直观显示会将它显示为已部署:

    显示从 cloudrun-dev 提升到 cloudrun-prod 的流水线

在 Cloud Deploy 中查看安全性数据分析

  1. 在 Google Cloud 控制台中,打开 Cloud Deploy 交付流水线页面。

    打开 Cloud Deploy 页面

  2. 交付流水线表中,点击 cloudrun-guestbook-backend-delivery

  3. 交付流水线详情页面中,点击 test-release-008

  4. 版本详情页面中,点击工件标签页。

  5. 构建工件表格中,找到包含工件 java-guestbook-backend 的行,然后在相应的安全分析列下,点击查看

您会看到用于部署的安全标签页。

“安全性”标签页

此标签页的安全分析部分会显示以下信息:

  • SLSA 级别:此 build 已达到 SLSA 级别 3。点击了解详情链接,了解此安全级别的含义。

  • 漏洞:在工件中发现的所有漏洞。点击映像名称 (java-guestbook-backend) 可查看已扫描漏洞的工件。

  • build 工件的依赖项

  • 构建详情:构建的详细信息,例如构建器以及用于查看日志的链接。

在 Cloud Run 中查看安全数据分析

  1. 打开 Cloud Run 服务页面。

    打开“Cloud Run 服务”页面

  2. 在 Cloud Run 服务表中,点击 guestbook-backend-prod

  3. 服务详情页面中,点击修订版本

  4. 修订版本面板中,点击安全

您会看到用于部署的安全标签页。

“安全性”标签页

此标签页的安全分析部分会显示以下信息:

  • 身份和加密:默认 Compute Engine 服务账号的电子邮件地址以及用于部署的加密密钥。

  • SLSA 级别:此 build 已达到 SLSA 级别 3。点击了解详情链接,了解此安全级别的含义。

  • 漏洞:在工件中发现的所有漏洞。点击映像名称 (java-guestbook-backend) 可查看已扫描漏洞的工件。

  • build 工件的依赖项

  • 构建详情:构建的详细信息,例如构建器以及用于查看日志的链接。

清理

为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。

  1. 停用 Container Scanning API:

    gcloud services disable containerscanning.googleapis.com --force
    
  2. 删除 guestbook-backend-dev Cloud Run 服务:

    gcloud run services delete guestbook-backend-dev --region=us-central1 \
        --project=${PROJECT_ID}
    
  3. 删除 guestbook-backend-prod 服务:

    gcloud run services delete guestbook-backend-prod --region=us-central1 \
        --project=${PROJECT_ID}
    
  4. 删除交付流水线,包括版本和发布:

    gcloud deploy delivery-pipelines delete cloudrun-guestbook-backend-delivery \
        --force --region=us-central1 --project=${PROJECT_ID}
    

    此命令会删除交付流水线本身,以及软件供应链安全为该流水线创建的所有 releaserollout 资源。

  5. 删除 Artifact Registry 代码库:

    gcloud artifacts repositories delete containers \
        --location=us-central1 --async
    

恭喜,您已经完成快速入门!

后续步骤