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

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

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

    • 部署的身份和加密信息。
    • 软件制品的供应链级别 (SLSA) 级别 ,用于标识部署的保证级别。
    • 构建工件中的漏洞
    • 构建工件的软件物料清单 (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
    

授予访问权限

默认 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。部署完成后,交付流水线直观显示会将它显示为已部署:

    部署的屏幕截图

在 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),以查看 进行漏洞扫描

  • 构建工件的依赖项

  • build 详情:build 的详细信息,例如构建器和指向 查看日志。

在 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
    

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

后续步骤