将应用部署到 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.

后续步骤