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 倉庫。

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

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

小夜