前言¶
在 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 倉庫。