在 Cloud Run 上部署并查看安全数据分析
本快速入门介绍了如何将容器映像部署到 Cloud Run,以及如何在 Google Cloud 控制台中的安全标签页上查看部署的安全数据分析。您将学习以下内容:
- 使用 Cloud Deploy 将映像部署到 Cloud Run。 Cloud Deploy 是一项 Google Cloud 服务,可按指定的升级序列自动将您的应用交付到一系列目标环境。
查看部署的以下安全数据分析:
- 部署的身份和加密信息。
- 软件工件的供应链级别 (SLSA) 级别,用于标识部署的保证级别。
- 构建工件中的漏洞。
- build 工件的软件物料清单 (SBOM)。
- 构建来源,即关于构建的一组可验证元数据。其中包括已构建映像的摘要、输入源位置、构建工具链、构建步骤和构建时长等详细信息。
准备工作
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
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 - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
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
设置默认设置
为项目 ID 设置环境变量:
export PROJECT_ID=$(gcloud config get project)
设置 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 代码库
在位置
us-central1
中新建一个名为containers
且说明文字为“Docker repository”(Docker 代码库)的 Docker 代码库:gcloud artifacts repositories create containers --repository-format=docker \ --location=us-central1 --description="Docker repository"
验证您的代码库已创建:
gcloud artifacts repositories list
您应该会在显示的代码库列表中看到
containers
。
准备示例应用
您需要一些示例源代码来进行构建和部署。在本部分中,您将克隆一个包含 Java 代码示例的现有源代码库。
克隆包含 Java 代码示例的代码库:
git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git cd software-delivery-shield-demo-java/backend
更新
cloudrun.clouddeploy.yaml
,将PROJECT_ID
替换为您的项目 ID:sed -i "s/PROJECT_ID/${PROJECT_ID}/g" cloudrun.clouddeploy.yaml
构建应用
使用 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 上部署容器
在 Cloud Deploy 服务中注册流水线和目标:
gcloud deploy apply --file cloudrun.clouddeploy.yaml
现在,您已经有了包含目标的流水线,可以将应用部署到第一个目标了。
如需验证您的流水线是否存在,请前往 Google Cloud 控制台中的交付流水线页面:
系统会显示您刚刚创建的交付流水线
cloudrun-guestbook-backend-delivery
。点击
cloudrun-guestbook-backend-delivery
以监控进度。交付流水线详情页面随即打开。在 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
新版本会显示在交付流水线详情页面的版本部分。
在交付流水线详情页面上监控流水线直观显示视图,直到
dev-cluster
显示提升按钮。您可能需要刷新页面。在交付流水线直观显示中的第一个目标
cloudrun-dev
上,点击提升。此时将显示提升版本对话框。它会显示您要提升到的目标的详细信息。
点击提升。
该版本现已加入队列以部署到
cloudrun-prod
。部署完成后,交付流水线直观显示会将它显示为已部署:
在 Cloud Deploy 中查看安全性数据分析
在 Google Cloud 控制台中,打开 Cloud Deploy 交付流水线页面。
在交付流水线表中,点击 cloudrun-guestbook-backend-delivery。
在交付流水线详情页面中,点击 test-release-008。
在版本详情页面中,点击工件标签页。
在构建工件表格中,找到包含工件 java-guestbook-backend 的行,然后在相应的安全分析列下,点击查看。
您会看到用于部署的安全标签页。
此标签页的安全分析部分会显示以下信息:
SLSA 级别:此 build 已达到 SLSA 级别 3。点击了解详情链接,了解此安全级别的含义。
漏洞:在工件中发现的所有漏洞。点击映像名称 (java-guestbook-backend) 可查看已扫描漏洞的工件。
build 工件的依赖项。
构建详情:构建的详细信息,例如构建器以及用于查看日志的链接。
在 Cloud Run 中查看安全数据分析
打开 Cloud Run 服务页面。
在 Cloud Run 服务表中,点击 guestbook-backend-prod。
在服务详情页面中,点击修订版本。
在修订版本面板中,点击安全。
您会看到用于部署的安全标签页。
此标签页的安全分析部分会显示以下信息:
身份和加密:默认 Compute Engine 服务账号的电子邮件地址以及用于部署的加密密钥。
SLSA 级别:此 build 已达到 SLSA 级别 3。点击了解详情链接,了解此安全级别的含义。
漏洞:在工件中发现的所有漏洞。点击映像名称 (java-guestbook-backend) 可查看已扫描漏洞的工件。
build 工件的依赖项。
构建详情:构建的详细信息,例如构建器以及用于查看日志的链接。
清理
为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。
停用 Container Scanning API:
gcloud services disable containerscanning.googleapis.com --force
删除
guestbook-backend-dev
Cloud Run 服务:gcloud run services delete guestbook-backend-dev --region=us-central1 \ --project=${PROJECT_ID}
删除
guestbook-backend-prod
服务:gcloud run services delete guestbook-backend-prod --region=us-central1 \ --project=${PROJECT_ID}
删除交付流水线,包括版本和发布:
gcloud deploy delivery-pipelines delete cloudrun-guestbook-backend-delivery \ --force --region=us-central1 --project=${PROJECT_ID}
此命令会删除交付流水线本身,以及软件供应链安全为该流水线创建的所有
release
和rollout
资源。删除 Artifact Registry 代码库:
gcloud artifacts repositories delete containers \ --location=us-central1 --async
恭喜,您已经完成快速入门!
后续步骤
- 详细了解 Cloud Run 中的安全分析。
- 了解如何在部署到 GKE 时查看安全数据分析。
- 了解如何查看 build 的安全数据洞见。
- 详细了解软件供应链安全。