运行时安全性数据分析

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 便无法更改,并且在整个项目期间都将保持不变。
  • 此外,还有第三个值,即部分 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.png

这应该会生成类似于以下内容的成功消息:

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 级别、依赖项中的任何漏洞以及 build 出处。

7d9fd2213f3704c4.png

查看已创建的容器映像的安全性数据分析。点击扫描的工件的链接,以在 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 构建级别合规性信息、构建出处以及在运行的服务中发现的漏洞。

打开 Cloud Run,然后在“修订版本”/“安全”标签页下查看安全性数据分析。

62a9f5d26207e58e.png

此面板会显示以下信息:

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

7. GKE Security Posture

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 会使用来自公共 CVE 数据库(例如 NIST)的漏洞数据,自动扫描 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.png

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

58e6f4b6d8eaa99a.png

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

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

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

8. 恭喜!

恭喜!您已完成此 Codelab。

所学内容:

  • Cloud Run 和 GKE 上运行的构建工件和应用的安全性数据分析信息

清理

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

删除项目

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

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