dsh-kubectl-guard:基于 kubeconfig 上下文的 kubectl 操作门控

前言

在 DeepSeek Harness (DSH) 环境中,大模型可能直接执行 kubectl delete 或 apply 等不可逆操作。如果这些命令作用于生产环境的非本地集群,风险极高。现有的做法通常依赖人工审查或复杂的提示词工程,效率较低。dsh-kubectl-guard 作为一个策略插件,直接介入工具调用链,在命令执行前根据 kubeconfig 上下文进行拦截或确认。

这是什么

这是一个 DeepSeek Harness 策略插件,由 gengwg 维护。它通过检查 kubeconfig 上下文来限制 kubectl 的使用:禁止对非本地集群执行不可逆操作(如 delete),对可恢复的写入操作(如 apply)进行确认,而允许读取操作和本地集群操作。

核心功能

  • 根据 kubeconfig 上下文对 kubectl 命令进行拦截
  • 禁止对非本地集群执行不可逆操作(例如 delete)
  • 对可恢复的写入操作(例如 apply)发起确认请求
  • 允许读取操作和本地集群操作
  • 检查 Shell 工具调用的命令参数

安装与启用

该插件依赖 pnpm,DSH 会调用它进行安装。

  1. 执行安装命令:
    dsh plugin --profile web add dsh-kubectl-guard
  1. 安装后,插件会自动加入 bundle 栈,重启 DSH 即可生效。

典型用法

该插件不注册新的工具,而是拦截 Shell 工具调用中的 command 参数。

  • 被拦截(不可逆操作 + 非本地集群):
    > delete the stuck nginx pod
    Error: kubectl-guard: ‘delete’ is irreversible and ctx#4be1f92a is not a local cluster. Denied.

  • 被询问(可恢复写入 + 非本地集群):
    > roll out the new deployment
    kubectl-guard: ‘apply’ writes to ctx#4be1f92a, which is not a local cluster.
    [approve] [deny]

  • 无影响(读取操作):
    > what pods are failing in kube-system?
    kubectl get pods -n kube-system –field-selector=status.phase!=Running

  • 无影响(本地集群):
    > wipe the test namespace on my kind cluster
    kubectl –context kind-dev delete ns test

  • 无影响(Dry run):
    > kubectl apply –dry-run=server -f deploy.yaml
    (Dry run 视为读取,直接放行)

适用场景与注意

  • 覆盖范围:目前仅支持 kubectl,helm、argocd 和 flux 不在覆盖范围内。
  • 运行机制:插件以当前 DSH 进程权限运行,需要自行检查源码与许可证。
  • 局限性:它通过解析命令字符串工作,如果 Agent 通过环境变量、别名或 base64 编码来隐藏二进制名称,插件会被绕过。它旨在防范“困惑的 Agent”,而非对抗“恶意的 Agent”。
  • 安全建议:如果需要更强的安全沙箱,应移除凭证,而不是仅依赖命令过滤。

短结尾

dsh-kubectl-guard 是一个实用的安全兜底措施,适合需要在不修改核心 Agent 代码的情况下增加 kubectl 操作约束的场景。更多细节可参考 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜