先假設:所有環境變數都外流了
Zeabur 在 8/28 公告,部分專案的環境變數遭到未授權存取,內容包含「API 金鑰、資料庫連線字串、雲端服務金鑰」等常見的憑證類型(引自 CodeCat 對該公告的轉述)。Zeabur 9/7 發布了一次安全性升級;10/14 又發生影響更大的資安事件,之後宣布停止營運。
我們無法得知你的資料有沒有受影響,所以最保險的做法是:放在 Zeabur 環境變數裡的每一把金鑰都換掉。
順序:先換會燒錢的,其他搬家時一起換
今天就換:外流後會直接造成金錢損失的金鑰。
| 類型 | 例子 | 換完要檢查 |
|---|---|---|
| 金流 | 綠界、藍新、Stripe 的 HashKey、Secret Key | 最近的交易與退款紀錄 |
| AI API | OpenAI、Anthropic、Gemini 的 API key | 帳單有沒有異常用量,順便設定用量上限 |
| 雲端帳號 | AWS Access Key、GCP 服務帳號 JSON、Cloudflare API Token | 有沒有你不認識的資源被建立 |
| 寄信服務 | SendGrid、Resend、Mailgun | 寄送紀錄(可能被拿去寄詐騙信) |
搬家時一起換:在新平台設定新的金鑰,確認新服務正常後,再撤銷舊的。這樣只要換一次,服務也不會中斷。
- 資料庫密碼(新的資料庫本來就是新密碼,但要注意下一節的坑)
- LINE Channel Secret 與 Channel Access Token;Discord、Telegram 的 Bot Token
- Google、Facebook 登入的 OAuth Client Secret
- JWT/Session 的簽章密鑰:換了之後所有使用者會被登出一次,屬於正常現象
- n8n 裡存放的各家 credentials(見 n8n 篇)
實測發現的坑:還原備份,會把舊密碼也還原回來
Zeabur 的 PostgreSQL 備份是用 pg_dumpall 產生的 data.sql。我們用同樣的格式實測,檔案開頭有這兩行:
CREATE ROLE root;
ALTER ROLE root WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:...';
用 psql 還原到新的資料庫後,root 的密碼就變回了 Zeabur 上的舊密碼。如果這組密碼在資安事件中外流了,新資料庫也一樣不安全。
處理方式(二選一):
- 還原前,先刪掉
data.sql裡的CREATE ROLE和ALTER ROLE這兩行 - 還原後,立刻改密碼:
ALTER ROLE root WITH PASSWORD '新的長密碼';
更好的做法是改用 pg_dump 只備份資料庫本身,這樣不會帶到帳號與密碼。完整做法見資料庫篇。
搬完之後的收尾
- 移除 GitHub 上的 Zeabur App:GitHub → Settings → Applications → Installed GitHub Apps → Zeabur → Uninstall。要等全部搬完再移除,否則 Zeabur 上的服務無法重新部署
- 專用伺服器的 SSH 金鑰:如果你在 Zeabur 專用伺服器上加過 SSH 公鑰,新機器請改用新的一組金鑰
- 刪除 Zeabur 上的資料:確認備份都在自己手上後,刪除服務、Volume 和專案。申請退款時,一併要求刪除帳號資料,並保留書面紀錄
- 留下證據:有異常扣款的帳單截圖存起來,向 Zeabur 申請資安事件賠償時會用到(見總整理的退款段落)