运行时安全性数据分析

1. 简介

在本实验中,您会将一个应用部署到 Cloud Run 和 GKE 集群,并在 Software Delivery Shield 安全性中查看该部署的安全性数据分析

学习内容

  • Artifact Registry 安全数据分析
  • Cloud Run 安全性数据分析
  • GKE Security Posture

2. 设置和要求

Cloud 项目设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常您不在乎这是什么在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为 PROJECT_ID)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且该 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即某些 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。如需关停资源,以免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除整个项目。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。

环境设置

点击搜索栏右侧的图标,激活 Cloud Shell。

ecdc43ada29e91b.png

在 Cloud Shell 中,启用本实验所需的 API:

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

如果系统提示您授权,请点击“授权”以继续。

6356559df3eccdda

这将生成类似于以下内容的成功消息:

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

运行以下命令以异步创建 GKE 集群。我们将在稍后的实验中用到它:

gcloud beta container clusters create gke-cluster \
    --zone us-central1-a \
    --async

3. 准备应用

首先,您将准备一个基于 Express 的简单 Node.js 应用来响应 HTTP 请求。

在 Cloud Shell 中,创建一个名为 starter-nodejs 的新目录,然后切换到该目录:

mkdir starter-nodejs
cd starter-nodejs

通过运行以下命令创建 package.json 文件:

cat > ./package.json << EOF
{
  "name": "cloudrun-starter-app",
  "version": "1.0.0",
  "description": "Node.js Starter Application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}
EOF

上面的文件包含一个 start 脚本命令和一个 Express Web 应用框架依赖项。

接下来,在同一目录中,运行以下命令创建一个 index.js 文件:

cat > ./index.js << EOF
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Received a request.');
  res.send("Hello Cloud Run!");
});

const port = process.env.PORT || 8080;

app.listen(port, () => {
  console.log('Listening on port', port);
});
EOF

此代码会创建一个基本 Web 服务器,监听由 PORT 环境变量定义的端口。您的应用现已编写完毕,可以进行容器化并部署了。

4. 部署 Cloud Run 应用

运行以下命令以部署您的应用:

gcloud run deploy starter-app \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --max-instances=3

确认创建 Artifact Registry 代码库:

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created.

Do you want to continue (Y/n)? y

5. Artifact Registry 和 Cloud Build 安全性数据分析

构建需要几分钟时间才能完成。

打开 Cloud Build 并查看最新构建作业的构建工件。

Google Cloud 控制台中的 Cloud Build 界面包含 Software Delivery Shield 安全性数据分析面板,其中显示与构建相关的安全信息,例如 SLSA 级别、依赖项中的任何漏洞和构建来源。

7d9fd2213f3704c4

查看已创建的容器映像的 Security Insights。点击扫描工件的链接,在 Artifact Registry 中查看此映像的漏洞详情。

返回 Cloud Shell 控制台,并验证 Cloud Run 应用部署是否已完成。

Done.
Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic.
Service URL: https://starter-app-nin5jpgefq-uc.a.run.app

6. Cloud Run 安全性数据分析

Cloud Run 包含一个安全面板(预览版),其中会显示软件供应链安全性数据分析,例如 SLSA build 级合规性信息、build 出处以及在正在运行的服务中发现的漏洞。

打开 Cloud Run 并查看“修订版本 / 安全性”标签页下的 Security Insights。

62a9f5d26207e58e

此面板会显示以下信息:

  • 身份和加密:默认 Compute Engine 服务账号的电子邮件地址以及用于部署的加密密钥。
  • SLSA 级别:此版本的 SLSA 级别为 3,根据 SLSA 规范标识软件构建流程的成熟度级别
  • 漏洞:在应用依赖项中发现的任何漏洞。
  • 构建详情:构建详情,例如构建器和用于查看日志的链接。
  • build 出处:build 的出处,这是关于 build 的一系列可验证元数据的集合。它包含已构建映像的摘要、输入源位置、构建工具链、构建步骤和构建时长等详细信息。

7. GKE 安全状况

GKE 可以评估您的容器安全状况,并围绕集群设置、工作负载配置和漏洞提供主动指导。它包含安全状况信息中心(预览版),可扫描您的 GKE 集群和工作负载,为您提供切实可行的专业建议,帮助您改善安全状况。

在接下来的步骤中,您会将应用部署到 GKE 集群,并在 GKE 安全状况信息中心查看安全性数据分析。

运行以下命令来验证集群是否已准备就绪:

gcloud beta container clusters list

示例输出:

NAME: gke-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.24.9-gke.3200
MASTER_IP: 34.29.226.228
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.24.9-gke.3200
NUM_NODES: 3
STATUS: RUNNING

获取 GKE 集群的凭据和配置:

gcloud container clusters get-credentials gke-cluster  \
    --region=us-central1-a

运行以下命令,使用在上一步中构建的映像部署应用:

export PROJECT_ID=$(gcloud config get-value project)

kubectl run starter-app \
  --image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
  --port 8080

理想情况下,GKE 工作负载应采用强化配置,以限制其受攻击面。跨集群的工作负载检查配置问题可能很难大规模地手动执行。您可以使用安全状况信息中心自动扫描多个集群中所有正在运行的工作负载的配置,并返回可作为行动依据的评分结果和专业建议,从而改善您的安全状况。

启用工作负载配置扫描:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-config-audit

除了扫描工作负载配置之外,您还可以在安全状况信息中心内启用工作负载漏洞扫描并查看结果。安全状况信息中心是一组功能,可提供专业信息和建议,从而提高 GKE 集群和工作负载的安全性。

GKE 使用 NIST 等公共 CVE 数据库中的漏洞数据,自动扫描 GKE 集群中运行的每个符合条件的 Pod 中的容器映像是否存在已知漏洞。

如果在您的容器映像中发现漏洞,GKE 会分配严重级别,并在 Google Cloud 控制台的安全状况信息中心内显示评估结果。GKE 还会向 Cloud Logging 添加条目,以实现审核和可追溯性。

启用工作负载漏洞扫描:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-vulnerability-scanning \
    --async

打开 GKE Security Posture 页面。

等待几分钟,等待工作负载审核完成,然后查看结果。

5b1b8158bc55ce67

查看配置问题和受影响的工作负载。

58e6f4b6d8eaa99a

为何使用安全状况信息中心

安全状况信息中心是一项基础安全措施,您可以为任何符合条件的 GKE 集群启用该措施。Google Cloud 建议在所有集群中使用安全状况信息中心,原因如下:

  • 中断最少:功能不会干扰或中断正在运行的工作负载。
  • 切实可行的建议:安全状况信息中心(如有)会提供待办项,用于解决发现的问题。这些操作包括您可以运行的命令、要执行的配置更改示例,以及关于如何缓解漏洞的建议。
  • 可视化:安全状况信息中心可高度直观地显示影响项目中集群的问题,并提供图表和图形来显示您取得的进度以及每个问题的潜在影响。
  • 观点检验结果:GKE 根据 Google 安全团队的专业知识和业界标准,对发现的问题进行严重程度分级。
  • 可审核的事件日志:GKE 会将发现的所有问题添加到 Logging 中,以实现更好的可报告性和可观测性。

8. 恭喜!

恭喜!您已完成此 Codelab。

所学内容:

  • 有关在 Cloud Run 和 GKE 上运行的构建制品和应用的安全数据分析信息

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

若要避免产生费用,最简单的方法是删除您为本教程创建的项目。

上次更新时间:2023 年 3 月 21 日