news 2026/4/28 2:04:16

用 Python 编写 K8s 漏洞扫描器,自动发现集群内的配置错误

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 Python 编写 K8s 漏洞扫描器,自动发现集群内的配置错误

标签:#Kubernetes #Python #DevSecOps #网络安全 #云原生 #自动化运维


🚨 前言:你的集群也许正在“裸奔”

你是否见过这种 YAML 配置?

securityContext:privileged:true# 为了省事,直接给特权runAsUser:0# 直接用 root 跑

这种配置在开发环境很常见,可一旦溜进生产环境,就是严重的容器逃逸风险。
普通的镜像扫描(Image Scanning)只能扫出软件漏洞(CVE),扫不出这种配置漏洞。我们需要的是配置审计(Configuration Audit)


🏗️ 一、 核心架构:基于 K8s API 的巡检

我们要做的不是黑客攻击,而是以“管理员”的身份,通过 Python 调用 K8s 的 API Server,拉取所有资源的配置清单,然后用一套规则去匹配。

扫描器工作流 (Mermaid):

1. 加载 ~/.kube/config
2. List API (Pods/Deployments)
3. 返回 JSON 对象
6. 告警
4. 逐条匹配
5. 命中风险

安全规则库

检测特权容器 (Privileged)

检测 Root 用户运行

检测资源限制缺失 (No Limits)

检测敏感挂载 (Docker Socket)

启动扫描器

K8s 认证

K8s API Server

Python 分析引擎

生成 JSON/HTML 报告

钉钉/Slack 通知


🛠️ 二、 环境准备

我们需要安装 Python 的 K8s 官方客户端:

pipinstallkubernetes

确保你的机器上配置了~/.kube/config,且有权限读取集群信息。


💻 三、 代码实战:编写扫描核心

我们将实现一个简单的K8sScanner类,演示如何查找“特权容器”“未设置资源限制”的 Pod。

1. 初始化连接
fromkubernetesimportclient,configclassK8sScanner:def__init__(self):# 1. 加载 kubeconfig,如果在 Pod 内部运行则用 load_incluster_config()try:config.load_kube_config()print("✅ 成功连接到 K8s 集群")exceptExceptionase:print(f"❌ 连接失败:{e}")exit(1)self.v1=client.CoreV1Api()
2. 核心检测逻辑
defscan_privileged_pods(self,namespace='default'):""" 规则:检测开启了 privileged=true 的危险容器 """print(f"🔍 开始扫描{namespace}命名空间的特权容器...")try:pods=self.v1.list_namespaced_pod(namespace)risks=[]forpodinpods.items:pod_name=pod.metadata.nameforcontainerinpod.spec.containers:# 获取 security_contextsec_ctx=container.security_contextifsec_ctxandsec_ctx.privileged:risk_msg=f"🔴 [高危] Pod:{pod_name}| 容器:{container.name}| 问题: 开启了特权模式!"risks.append(risk_msg)print(risk_msg)ifnotrisks:print("✅ 未发现特权容器。")returnrisksexceptExceptionase:print(f"扫描出错:{e}")return[]defscan_resource_limits(self,namespace='default'):""" 规则:检测未设置 CPU/Memory Limit 的容器 (容易导致节点雪崩) """print(f"🔍 开始扫描{namespace}命名空间的资源限制...")pods=self.v1.list_namespaced_pod(namespace)forpodinpods.items:forcontainerinpod.spec.containers:resources=container.resources# 检查 limits 是否存在ifresources.limitsisNone:print(f"⚠️ [中危] Pod:{pod.metadata.name}| 容器:{container.name}| 问题: 未设置资源限制 (OOM风险)")
3. 运行扫描
if__name__=="__main__":scanner=K8sScanner()# 扫描 default 命名空间scanner.scan_privileged_pods("default")scanner.scan_resource_limits("default")# 你可以遍历所有 namespace# namespaces = [ns.metadata.name for ns in scanner.v1.list_namespace().items]

🛡️ 四、 进阶:DevSecOps 的闭环

写好脚本只是第一步,如何把它融入到运维体系中?

  1. CI/CD 集成
    把这个脚本放在 Jenkins 或 GitLab CI 里。
    当开发者提交 YAML 文件时,先跑一遍 Python 脚本(解析本地 YAML 文件而非连接集群),如果有高危配置,直接打断构建,禁止发布
  2. 准入控制 (Admission Controller)
    如果你想做的更绝一点,可以了解OPA (Open Policy Agent)Kyverno。它们是 K8s 原生的拦截器,可以在 API 请求阶段就拒绝不合规的 Pod 创建。
    我们的 Python 脚本适合做“事后审计”,OPA 适合做“事前拦截”。
  3. 自定义规则扩展
  • 镜像来源检查:必须来自公司私有 Harbor,禁止使用docker.io公共镜像。
  • 探针检查:检查 Deployment 是否配置了livenessProbereadinessProbe
  • 标签规范:检查是否包含app,owner,env等必填 Label。

🎯 总结

通过 Pythonkubernetes库,我们将黑盒的集群配置变成了可编程、可审计的数据对象
这不仅是一个安全工具,更是一个运维治理的利器。

别等到黑客通过一个特权 Pod 拿下了你的 Master 节点,才后悔没有早点做配置审计。

Next Step:
打开你的 IDE,把上面的代码复制进去,运行一下。看看你的开发环境集群里,到底藏了多少个没设资源限制的“裸奔”容器?结果可能会让你大吃一惊!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 10:33:11

L911349010CB 继电器板

L911349010CB 继电器板概述类型:工业继电器控制板功能:通过低电压控制信号驱动高电压或大电流负载用途:实现设备开关控制、自动化逻辑执行或保护回路主要功能开关控制接收来自 PLC、控制器或传感器的低电压信号控制继电器闭合或断开&#xff…

作者头像 李华
网站建设 2026/4/25 12:44:55

天气预报应用为何总是不准?技术解析

为什么天气预报应用如此糟糕?| New Scientist 如果你本周曾晾晒衣物、去海滩游玩或准备烧烤,几乎肯定会先查看天气应用。而你或许对结果并不完全满意。这就引出了一个问题:为什么天气应用如此不靠谱? 即使是像英国雷丁大学的罗布汤…

作者头像 李华
网站建设 2026/4/25 6:53:55

科研绘图还在 “卡半天”?虎贲等考 AI 让学术图表一键 “出圈”

科研成果的呈现,一半实力在数据,一半颜值在绘图。但多数科研人都难逃绘图困境:用 Origin、Visio 半天调不出规范样式,图表配色杂乱缺乏学术感,数据可视化逻辑混乱,投稿时因图表不达标被期刊打回修改。虎贲等…

作者头像 李华
网站建设 2026/4/27 15:25:49

MLflow跟踪医疗实验稳住模型迭代

📝 博客主页:jaxzheng的CSDN主页 MLflow:医疗AI实验管理的稳定器——从追踪到迭代的革命性实践目录MLflow:医疗AI实验管理的稳定器——从追踪到迭代的革命性实践 引言:医疗AI迭代的隐性危机 一、医疗AI模型迭代的核心痛…

作者头像 李华
网站建设 2026/4/27 12:09:03

【计算机毕业设计案例】基于python机器学习识别水果的成熟度

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华