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

本快速入门介绍如何将容器映像部署到 Cloud Run,并在 Google Cloud 控制台的 Software Delivery Shield 安全性面板中查看部署的安全性数据分析。您将学习以下内容:

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

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

准备工作

  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
    

授予访问权限

将 IAM 角色授予默认 Compute Engine 服务帐号。只有这样,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。部署完成后,交付流水线直观显示会将它显示为已部署:

    部署的屏幕截图

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

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

    打开 Cloud Deploy 页面

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

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

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

  5. 构建工件表中,找到具有工件 java-guestbook-Backend 的行,然后在相应的安全性数据分析列下,点击查看

您会看到用于部署的 Software Delivery Shield 安全面板。

安全面板的屏幕截图

此面板会显示以下信息:

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

  • 漏洞:在您的工件中发现的任何漏洞。点击映像名称 (java-guestbook-backend) 查看已针对漏洞进行扫描的工件。

  • 构建工件的依赖项

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

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

  1. 打开 Cloud Run 服务页面。

    打开“Cloud Run 服务”页面

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

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

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

您会看到用于部署的 Software Delivery Shield 安全面板。

安全面板的屏幕截图

此面板会显示以下信息:

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

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

  • 漏洞:在您的工件中发现的任何漏洞。点击映像名称 (java-guestbook-backend) 查看已针对漏洞进行扫描的工件。

  • 构建工件的依赖项

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

清理

为避免因本页面中使用的资源导致您的 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
    

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

后续步骤