将应用部署到 GKE 并查看安全数据分析
了解如何将蓄意存在漏洞的容器部署到 GKE 集群,并获取 安全状况信息中心GKE 安全状况信息中心会显示已知操作系统的相关信息 漏洞如果您还希望在 Go 或 Java 软件包,请参阅 构建应用并查看安全性数据分析。
目标
- 使用以下命令构建容器化应用并将其推送到 Artifact Registry Cloud Build
- 在 Cloud Deploy 中创建交付流水线。
- 将应用部署到预演 GKE 集群,并将其提升到生产集群。
- 使用 Security Posture 信息 Google Cloud 控制台。
准备工作
- 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 Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com containeranalysis.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 Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com containeranalysis.googleapis.com
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备环境
将项目 ID 设置为环境变量:
export PROJECT_ID=$(gcloud config get project)
为 Cloud Deploy 设置默认 Google Cloud 区域:
gcloud config set deploy/region us-central1
克隆包含此任务的示例代码的 GitHub 代码库:
git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git cd ~/software-delivery-shield-demo-java/backend
为您的 GKE 创建 IAM 服务账号
要使用的集群:
gcloud iam service-accounts create sds-runtime \ --display-name="SDS with GKE service account"
向 IAM 服务账号授予权限:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/container.nodeServiceAccount" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/container.developer" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/artifactregistry.reader"
向默认 Compute Engine 服务账号授予 GKE 集群。Cloud Deploy 会使用此访问权限将应用部署到交付流水线中的集群。
PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')" gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role=roles/container.developer
为您的映像创建 Artifact Registry 代码库
创建代码库:
gcloud artifacts repositories create containers \ --repository-format=docker \ --location=us-central1 \ --description="SDS with GKE repository"
验证代码库是否存在:
gcloud artifacts repositories list \ --location=us-central1 \ --filter="REPOSITORY:containers"
输出会显示您创建的
containers
代码库。
创建 GKE 集群
创建两个 GKE 集群,一个名为 dev-cluster
的预演集群
以及一个名为 prod-cluster
的生产集群。在 Autopilot 中,系统会自动为运行 1.27 及更高版本的新集群启用工作负载漏洞扫描。如果您使用的是标准集群,请指定 --workload-vulnerability-scanning=standard
标志。
gcloud container clusters create-auto dev-cluster \
--region=us-central1 \
--release-channel=rapid \
--service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
gcloud container clusters create-auto prod-cluster \
--region=us-central1 \
--release-channel=rapid \
--service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
集群创建最多可能需要五分钟才能完成。您还可以通过更新现有 GKE 集群来启用工作负载漏洞扫描。
构建映像
使用 Cloud Build 构建并提交映像:
gcloud builds submit --region us-central1 --config cloudbuild.yaml
构建完成后,输出类似于以下内容:
DONE
-----------------------------------------------------------------------------
ID: 3e23094f-7f57-4449-bc68-51c37hn34d03
CREATE_TIME: 2022-09-19T15:41:07+00:00
DURATION: 54S
SOURCE: gs://my-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f.tgz
IMAGES: us-central1-docker.pkg.dev/PROJECT_ID/containers/java-guestbook-backend:quickstart
STATUS: SUCCESS
使用 Cloud Deploy 将映像部署到 GKE
使用您的项目 ID 更新 Cloud Deploy 配置文件:
sed -i "s/PROJECT_ID/${PROJECT_ID}/g" clouddeploy.yaml
注册流水线和目标:
gcloud deploy apply --file=clouddeploy.yaml
如需验证您的流水线是否存在,请转到交付流水线页面 在 Google Cloud 控制台中执行以下操作:
流水线列表会显示新流水线
guestbook-app-delivery
。点击流水线的名称以监控进度。交付流水线 详细信息页面。
在 Cloud Deploy 中创建新版本:
gcloud deploy releases create guestbook-release-001 \ --delivery-pipeline=guestbook-app-delivery \ --images=java-guestbook-backend=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
新版本显示在分发的发行部分中 流水线详细信息页面。
在交付流水线详情页面上,监控流水线可视化视图,直到
dev-cluster
显示提升按钮。您可能需要刷新页面。点击
dev-cluster
可视化图表中的提升。在升级版本窗格中,点击升级以确认促销活动 部署到生产集群
如需验证发布是否成功,请查看版本部分。 上次发布状态列显示
Successfully deployed to prod-cluster
。
查看漏洞
在本部分中,您将使用安全状况信息中心查看操作系统漏洞数据分析。信息中心会显示 将正在运行的工作负载部署到 集群。
前往 Google Cloud 控制台中的 GKE 安全状况页面。
如需查看扫描结果,请刷新页面。初始扫描最多可能需要 只需 15 分钟即可完成。
在 GKE 安全状况页面上,查看工作负载操作系统漏洞部分。本部分列出了影响您已部署工作负载的主要 CVE。
如需了解详情,请点击查看所有漏洞问题。问题标签页 会打开并应用漏洞问题类型的过滤器。表格 概述了每个漏洞及其影响
如需详细了解特定漏洞,请点击表格中相应问题的名称。系统随即会打开漏洞窗格。在此窗格中,您可以执行以下操作:
- 阅读 CVE 的详细说明,包括受影响的版本、 以及 CVSS 评分。
- 查看建议采取的措施来缓解问题,例如文档和补丁版本信息。
- 在受影响的工作负载标签页中查看受漏洞影响的具体工作负载。
清理
为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。
删除各个资源
删除 Cloud Deploy 流水线:
gcloud deploy delivery-pipelines delete guestbook-app-delivery --force
删除 GKE 集群:
gcloud container clusters delete dev-cluster \ --region=us-central1 gcloud container clusters delete prod-cluster \ --region=us-central1
删除 Artifact Registry 代码库:
gcloud artifacts repositories delete containers \ --location=us-central1
删除 IAM 服务账号:
gcloud iam service-accounts delete sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
删除项目
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.