本页面介绍了如何自动扫描正在运行的工作负载中的容器操作系统 (OS) 和语言包以查找已知漏洞,以及如何获取切实可行的缓解策略(如果有)。工作负载漏洞扫描是安全状况信息中心的一部分,后者是一组功能,可提供针对性的信息和建议以提高 Google Kubernetes Engine (GKE) 集群和工作负载的安全性。
如需了解详情,请参阅关于工作负载漏洞扫描。
价格
如需了解价格信息,请参阅 GKE 安全状况信息中心价格。
须知事项
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
启用 Container Security API
如需使用 Advanced Vulnerability Insights,请启用 Container Analysis API。
要求
-
如需获得使用工作负载漏洞扫描所需的权限,请让您的管理员向您授予 Google Cloud 项目的 Security Posture Viewer (
roles/containersecurity.viewer
) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。此预定义角色包含使用工作负载漏洞扫描所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
使用工作负载漏洞扫描需要以下权限:
-
resourcemanager.projects.get
-
resourcemanager.projects.list
-
containersecurity.locations.list
-
containersecurity.locations.get
-
containersecurity.clusterSummaries.list
-
containersecurity.findings.list
-
- Advanced Vulnerability Insights 需要使用 GKE 1.27 版或更高版本。
工作负载漏洞扫描层
您可以在层级中启用漏洞扫描,每个层级都将添加扫描功能,如下所示。如果您使用 Google Kubernetes Engine (GKE) Enterprise 版本管理集群舰队,则还可以配置应用于所有成员集群的舰队级漏洞扫描设置。如需了解相关说明,请参阅在舰队级层配置 GKE 安全状况信息中心功能。
层级 | 已启用的功能 | GKE 版本要求 |
---|---|---|
标准standard |
容器操作系统漏洞扫描 |
|
Advanced Vulnerability Insightsenterprise |
|
|
如需详细了解每种功能,请参阅工作负载漏洞扫描简介。
启用容器操作系统漏洞扫描
在运行 1.27 版及更高版本的新 Autopilot 集群中,容器操作系统漏洞扫描功能默认处于启用状态。本部分介绍如何在新现有 Standard 集群和运行 1.27 版之前版本的 Autopilot 集群中启用此功能。
在新集群上启用容器操作系统扫描
gcloud
使用 gcloud CLI 创建新的 GKE 集群:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --workload-vulnerability-scanning=standard
替换以下内容:
CLUSTER_NAME
:新集群的名称。LOCATION
:集群的 Compute Engine 位置。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
转到 Google Kubernetes Engine- 点击 创建。
- 在 GKE Standard 部分中,点击配置。
- 在导航窗格中,点击安全性。
- 在安全性部分中,选中漏洞扫描复选框。
- 选择基本选项。
- 为集群配置其他选项,并在准备就绪后点击创建。
在现有集群上启用容器操作系统扫描
gcloud
更新集群:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --workload-vulnerability-scanning=standard
替换以下内容:
CLUSTER_NAME
:您的集群的名称。LOCATION
:集群的 Compute Engine 位置。
控制台
进入 Google Cloud 控制台中的安全状况页面。
进入“安全状况”- 点击设置标签。
- 在已启用漏洞扫描的集群部分中,点击选择集群。
- 选中要添加的集群对应的复选框。
- 在选择操作下拉菜单中,选择设置为基本。
- 点击应用。
启用 Advanced Vulnerability Insights
Advanced Vulnerability Insights 可持续扫描正在运行的应用的以下漏洞类型:
- 容器操作系统漏洞
- 语言包漏洞
启用 Advanced Vulnerability Insights 时,容器操作系统漏洞扫描功能会自动启用,无法单独停用。
要求
确保已在项目中启用 Container Analysis API。
启用 Container Analysis API
在新集群上启用 Advanced Vulnerability Insights
gcloud
使用 gcloud CLI 创建新的 GKE 集群:
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --workload-vulnerability-scanning=enterprise
替换以下内容:
CLUSTER_NAME
:新集群的名称。LOCATION
:集群的 Compute Engine 位置。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
转到 Google Kubernetes Engine- 点击 创建。
- 在 GKE Autopilot 部分中,点击配置。
- 在导航窗格中,点击高级设置。如果您要创建 Standard 集群,请改为点击安全。
- 在安全性部分中,选中漏洞扫描复选框。
- 选择高级选项。
- 为集群配置其他选项,并在准备就绪后点击创建。
在现有集群上启用 Advanced Vulnerability Insights
gcloud
更新集群:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --workload-vulnerability-scanning=enterprise
替换以下内容:
CLUSTER_NAME
:您的集群的名称。LOCATION
:集群的 Compute Engine 位置。
控制台
进入 Google Cloud 控制台中的安全状况页面。
进入“安全状况”- 点击设置标签。
- 在已启用漏洞扫描的集群部分中,点击选择集群。
- 选中要添加的集群对应的复选框。
- 在选择操作下拉菜单中,选择设置为高级。
- 点击应用。
部署测试工作负载
以下示例清单包含用于演示的已知漏洞。在实践中,如果您知道一个应用存在漏洞,那么您可能不应该运行该应用。
将以下清单保存为
os-vuln-sample.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: frontend spec: replicas: 1 selector: matchLabels: app: guestbook tier: frontend template: metadata: labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend@sha256:dc8de8e0d569d2f828b187528c9317bd6b605c273ac5a282aebe471f630420fc env: - name: GET_HOSTS_FROM value: "dns" resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 80
查看以下清单,其中包含已知的 Maven 漏洞:
(可选)获取集群的凭据:
gcloud container clusters get-credentials CLUSTER_NAME \ --region=COMPUTE_REGION
将应用部署到您的集群:
kubectl apply -f os-vuln-sample.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/security/language-vulns/maven/deployment.yaml
如需测试其他漏洞,请尝试在预演环境中部署旧版映像,例如 nginx
。
查看结果并执行操作
初始扫描至少需要 15 分钟才能返回结果,具体取决于扫描的工作负载数量。GKE 会在安全状况信息中心上显示结果,并自动将条目添加到 Logging。
查看结果
如需大致了解项目的集群和工作负载中发现的问题,请执行以下操作:
进入 Google Cloud 控制台中的安全状况页面。
点击问题标签页。
在过滤条件问题窗格的问题类型部分中,选中漏洞复选框。
查看问题详情和建议
如需查看特定漏洞的详细信息,请点击包含相关问题的行。
漏洞问题窗格会显示以下信息:
- 说明:关于问题的说明,包括 CVE 编号(如果适用)和漏洞及其潜在影响的详细说明。
- 建议执行的操作:可用于解决漏洞的操作,例如已修复的软件包版本以及应用修复的位置。
查看日志以了解发现的问题
GKE 会针对每个发现的问题向 Logging 中的 _Default
日志存储桶添加条目。这些日志仅保留特定时间。有关详情,请参阅日志保留期限。
在 Google Cloud 控制台中,转到 Logs Explorer 页面。
前往 Logs Explorer在查询字段中,指定以下查询:
resource.type="k8s_cluster" jsonPayload.@type="type.googleapis.com/cloud.kubernetes.security.containersecurity_logging.Finding" jsonPayload.type="FINDING_TYPE_VULNERABILITY"
点击运行查询。
如需在 GKE 向 Logging 添加新发现时收到通知,请为此查询设置基于日志的提醒。如需了解详情,请参阅配置基于日志的提醒。
清理
删除您部署的示例工作负载:
kubectl delete deployment frontend
(可选)删除您使用的集群:
gcloud container clusters delete CLUSTER_NAME \ --region=COMPUTE_REGION
停用工作负载漏洞扫描
您可以使用 gcloud CLI 或 Google Cloud 控制台停用工作负载漏洞扫描。
gcloud
运行以下命令:
gcloud container clusters update CLUSTER_NAME \ --region=LOCATION \ --workload-vulnerability-scanning=disabled
替换以下内容:
CLUSTER_NAME
:您的集群的名称。LOCATION
:集群的 Compute Engine 区域或可用区。
控制台
进入 Google Cloud 控制台中的安全状况页面。
进入“安全状况”- 点击设置标签。
- 在已启用漏洞扫描的集群部分中,点击选择集群。
- 选中要移除的集群对应的复选框。
- 在选择操作下拉菜单中,选择设为已停用。
- 点击应用。