使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。
快速入门:在 Cloud Run 上部署并查看安全数据分析

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

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

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

    • 部署的身份和加密信息。
    • 软件工件 (SLSA) 级别,用于指定部署的可信级别。
    • 构建工件中的漏洞
    • build 来源,这是关于 build 的可验证元数据集合。它包括构建映像的摘要、输入源位置、构建工具链、构建步骤和构建时长等详细信息。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 安装初始化 Google Cloud CLI。
  3. 创建或选择 Google Cloud 项目。

    • 创建 Cloud 项目:

      gcloud projects create PROJECT_ID
    • 选择您创建的 Cloud 项目:

      gcloud config set project PROJECT_ID
  4. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  5. Enable the Cloud Build, Artifact Registry, Google 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
  6. 安装初始化 Google Cloud CLI。
  7. 创建或选择 Google Cloud 项目。

    • 创建 Cloud 项目:

      gcloud projects create PROJECT_ID
    • 选择您创建的 Cloud 项目:

      gcloud config set project PROJECT_ID
  8. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  9. Enable the Cloud Build, Artifact Registry, Google 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. 设置 Google Cloud Deploy 的默认区域:

    gcloud config set deploy/region us-central1
    

授予访问权限

将 IAM 角色授予默认 Compute Engine 服务帐号。这是 Google 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
    

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

  1. 向 Google Cloud Deploy 服务注册流水线和目标:

    gcloud deploy apply --file cloudrun.clouddeploy.yaml
    

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

  2. 如需验证您的流水线是否存在,请转到 Google Cloud Console 中的交付流水线页面:

    打开“交付流水线”页面

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

  3. 点击 cloudrun-guestbook-backend-delivery 以监控进度。此时会打开交付流水线详细信息页面。

  4. 在 Cloud Shell 中,在 Google 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。部署完成后,交付流水线直观显示会将它显示为已部署:

    部署的屏幕截图

查看部署的安全性数据分析

  1. 打开软件供应链安全性 Cloud Run 服务页面。

    打开“Cloud Run 服务”页面

  2. 在 Cloud Run 服务表中,点击留言板 - 后端生产

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

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

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

安全面板的屏幕截图

此面板会显示以下信息:

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

  • SLSA 级别:该 build 的级别为 SLSA 3 级。点击了解详情链接,了解此安全等级的含义。

  • 漏洞:在您的依赖项中发现的任何漏洞。点击映像名称 (java-guest-backend) 可查看已针对依赖项扫描的工件。Software Delivery Shield 会显示已识别的漏洞的详细信息,以便您评估其对您的应用的影响以及需要采取的修复措施。

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

  • build 来源:build 的来源。

清理

为避免因本页中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的 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
    

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

后续步骤