DAY 243

事前把爆炸半徑縮小

SLIDES · 6
Day 243 事前把爆炸半徑縮小 — 投影片 1Day 243 事前把爆炸半徑縮小 — 投影片 2Day 243 事前把爆炸半徑縮小 — 投影片 3Day 243 事前把爆炸半徑縮小 — 投影片 4Day 243 事前把爆炸半徑縮小 — 投影片 5Day 243 事前把爆炸半徑縮小 — 投影片 6
1 / 6

昨天那篇裡提到一個朋友,Zeabur 上有 30 幾個專案,出事之後只能一個一個查。

那篇講的是事發之後怎麼止血。我們都知道預防勝於治療,所以有了這次的慘痛經驗後,我們可以思考一下使用什麼技巧來降低未來的損失。

這篇分享四個設定:一個用途一把 key、把 key 的權限縮小、每把 key 先設花費上限,還有信用卡那道防線。四個加起來大概半小時,而且今天就能做完。

一把 key 走天下,這種方便最貴

很多人的習慣是這樣:申請一把 OpenAI key,本機開發用它、side project 用它、丟到雲端平台上的服務也用它、給朋友試玩的 demo 還是它。

這樣做的問題不是它比較容易外洩,而是外洩的時候你分不出來是哪裡漏的,也不敢撤掉——那把 key 一撤,四個地方一起掛。

換成一個用途一把 key,事情變成這樣:

  • 本機開發一把
  • 每個線上服務各一把
  • demo/給別人試用一把
  • 自動化流程(CI)一把

外洩的時候,你看用量頁面就知道是哪一把在燒錢,撤掉那一把,其他幾把照常跑。

Anthropic 這邊還多一層:建 key 的時候就要選 workspace,選單一 workspace 的那種 key,建立之後就固定在那裡(也有跨 workspace 的 key,但要在每次請求裡指定 workspace)。這聽起來像限制,但它正好逼你在開 key 的當下就先想清楚這把是給誰用的。

key 的權限可以只給讀,不用全開

OpenAI 的 API key 有三種權限等級:

等級 意思
All 全開,而且是預設值
Read Only 所有 endpoint 只能讀
Restricted 逐個 endpoint 指定 None/Read/Write

重點在「預設是 All」。如果你開 key 的時候一路按下一步,你拿到的是一把什麼都能做的鑰匙。

一個只是要讓模型回話的服務,不需要能刪你送去微調模型的任務,也不需要能讀你上傳的檔案。(組織層級的管理功能本來就要另一種 Admin API key,一般的 key 碰不到。)花 30 秒選 Restricted,外洩之後對方能做的事就少一大截。

OpenRouter 可以直接幫每一把 key 設上限

這段是我覺得最實際的部分。

OpenRouter 做得最直接:建 key 的時候就能設 credit limit,還可以選每天/每週/每月重置。超過上限的請求會在送到模型供應商之前就被擋掉,被擋掉的那些請求本身不會產生費用。

有件事要先知道:這個檢查是逐筆做的,所以同一瞬間湧進來一批請求時,實際金額會稍微超過你設的數字。它擋得住失控,但擋不掉多出來的那一塊錢。

這也是「一個用途一把 key」真正的價值——key 分開之後,那把在燒錢的才有辦法被單獨壓住。它不只是讓你敢撤掉,還讓損失有一個你自己訂的數字。

最後一道防線是那張卡

前面都是平台層的設定。萬一全部失守,還有一層:卡本身。

打開你的銀行 app,找卡片管理。每家銀行開放的選項差很多,先看你這張卡有哪幾項可以動:

  1. 消費額度上限——有的銀行只能調「當期消費額度」,有的可以另外設單筆上限
  2. 「國外交易」或「網路交易」的開關——不是每家都能單獨關,有的只給其中一項。AI API 的扣款幾乎都算國外交易
  3. 能關的就關,需要的時候再開,用完關回去

這招最土法煉鋼,能做到哪一步要看你的發卡行,但它是唯一一個不需要相信任何平台的做法。

這些要花多久

  • 把現有的 key 改成一個用途一把:看你有幾個服務,一個大概 5 分鐘
  • 開新 key 的時候選 Restricted:30 秒
  • OpenRouter 設 credit limit:建 key 的同一個畫面,10 秒
  • 銀行 app 設額度:3 分鐘

真正花時間的只有第一項,而且只要做一次。之後每開一把新 key,多花的就是那 30 秒。

一句話總結:你沒辦法保證 key 不外洩,但你可以決定它外洩的那一刻值多少錢。


延伸閱讀
看完整 243 篇 →