前言¶
在 DeepSeek Harness (DSH) 环境中,大模型可能直接执行 kubectl delete 或 apply 等不可逆操作。如果这些命令作用于生产环境的非本地集群,风险极高。现有的做法通常依赖人工审查或复杂的提示词工程,效率较低。dsh-kubectl-guard 作为一个策略插件,直接介入工具调用链,在命令执行前根据 kubeconfig 上下文进行拦截或确认。
这是什么¶
这是一个 DeepSeek Harness 策略插件,由 gengwg 维护。它通过检查 kubeconfig 上下文来限制 kubectl 的使用:禁止对非本地集群执行不可逆操作(如 delete),对可恢复的写入操作(如 apply)进行确认,而允许读取操作和本地集群操作。
核心功能¶
- 根据 kubeconfig 上下文对 kubectl 命令进行拦截
- 禁止对非本地集群执行不可逆操作(例如 delete)
- 对可恢复的写入操作(例如 apply)发起确认请求
- 允许读取操作和本地集群操作
- 检查 Shell 工具调用的命令参数
安装与启用¶
该插件依赖 pnpm,DSH 会调用它进行安装。
- 执行安装命令:
dsh plugin --profile web add dsh-kubectl-guard
- 安装后,插件会自动加入 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 仓库。