将应用部署到 GKE 并查看安全数据分析

了解如何将蓄意存在漏洞的容器部署到 GKE 集群,并获取 安全状况信息中心GKE 安全状况信息中心会显示已知操作系统的相关信息 漏洞如果您还希望在 Go 或 Java 软件包,请参阅 构建应用并查看安全性数据分析

目标

  • 使用以下命令构建容器化应用并将其推送到 Artifact Registry Cloud Build
  • 在 Cloud Deploy 中创建交付流水线。
  • 将应用部署到预演 GKE 集群,并将其提升到生产集群。
  • 使用 Security Posture 信息 Google Cloud 控制台。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  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. 确保您的 Google Cloud 项目已启用结算功能

  6. 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
  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. 确保您的 Google Cloud 项目已启用结算功能

  11. 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

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备环境

  1. 将项目 ID 设置为环境变量:

    export PROJECT_ID=$(gcloud config get project)
    
  2. 为 Cloud Deploy 设置默认 Google Cloud 区域:

    gcloud config set deploy/region us-central1
    
  3. 克隆包含此任务的示例代码的 GitHub 代码库:

    git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
    cd ~/software-delivery-shield-demo-java/backend
    
  4. 为您的 GKE 创建 IAM 服务账号

    要使用的集群:

    gcloud iam service-accounts create sds-runtime \
        --display-name="SDS with GKE service account"
    
  5. 向 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"
    
  6. 向默认 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 代码库

  1. 创建代码库:

    gcloud artifacts repositories create containers \
        --repository-format=docker \
        --location=us-central1 \
        --description="SDS with GKE repository"
    
  2. 验证代码库是否存在:

    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

  1. 使用您的项目 ID 更新 Cloud Deploy 配置文件:

    sed -i "s/PROJECT_ID/${PROJECT_ID}/g" clouddeploy.yaml
    
  2. 注册流水线和目标:

    gcloud deploy apply --file=clouddeploy.yaml
    
  3. 如需验证您的流水线是否存在,请转到交付流水线页面 在 Google Cloud 控制台中执行以下操作:

    前往“交付流水线”页面

    流水线列表会显示新流水线 guestbook-app-delivery

  4. 点击流水线的名称以监控进度。交付流水线 详细信息页面。

  5. 在 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
    

    新版本显示在分发的发行部分中 流水线详细信息页面。

  6. 交付流水线详情页面上,监控流水线可视化视图,直到 dev-cluster 显示提升按钮。您可能需要刷新页面。

  7. 点击 dev-cluster 可视化图表中的提升

  8. 升级版本窗格中,点击升级以确认促销活动 部署到生产集群

  9. 如需验证发布是否成功,请查看版本部分。 上次发布状态列显示 Successfully deployed to prod-cluster

查看漏洞

在本部分中,您将使用安全状况信息中心查看操作系统漏洞数据分析。信息中心会显示 将正在运行的工作负载部署到 集群。

  1. 前往 Google Cloud 控制台中的 GKE 安全状况页面。

    转到 GKE 安全状况

  2. 如需查看扫描结果,请刷新页面。初始扫描最多可能需要 只需 15 分钟即可完成。

  3. GKE 安全状况页面上,查看工作负载操作系统漏洞部分。本部分列出了影响您已部署工作负载的主要 CVE。

  4. 如需了解详情,请点击查看所有漏洞问题问题标签页 会打开并应用漏洞问题类型的过滤器。表格 概述了每个漏洞及其影响

  5. 如需详细了解特定漏洞,请点击表格中相应问题的名称。系统随即会打开漏洞窗格。在此窗格中,您可以执行以下操作:

    • 阅读 CVE 的详细说明,包括受影响的版本、 以及 CVSS 评分。
    • 查看建议采取的措施来缓解问题,例如文档和补丁版本信息。
    • 受影响的工作负载标签页中查看受漏洞影响的具体工作负载。

清理

为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。

删除各个资源

  1. 删除 Cloud Deploy 流水线:

    gcloud deploy delivery-pipelines delete guestbook-app-delivery --force
    
  2. 删除 GKE 集群:

    gcloud container clusters delete dev-cluster \
        --region=us-central1
    gcloud container clusters delete prod-cluster \
        --region=us-central1
    
  3. 删除 Artifact Registry 代码库:

    gcloud artifacts repositories delete containers \
        --location=us-central1
    
  4. 删除 IAM 服务账号:

    gcloud iam service-accounts delete sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
    

删除项目

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

后续步骤