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

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

目标

  • 使用 Cloud Build 构建容器化应用并将其推送到 Artifact Registry。
  • 在 Cloud Deploy 中创建交付流水线。
  • 将应用部署到预演 GKE 集群,并将其提升到生产集群。
  • 使用 Google Cloud 控制台中的安全状况信息中心查看有关已部署应用中漏洞的数据分析。

准备工作

  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 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. Make sure that billing is enabled for your Google Cloud project.

  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="Security insights 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="Security insights 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.

后续步骤