Cloudflare API 403 怎麼查?用 documentation_url 找到缺少的權限
呼叫 Cloudflare API 遇到 403 時,最容易做的事是重新建立一組 token,或直接把權限改成 Edit。這兩個動作都可能讓問題更難追:前者沒有回答「哪個 endpoint 拒絕了什麼」,後者則可能把權限範圍放大。
Cloudflare 在 2026 年 8 月 21 日更新 API 錯誤回應,許多 403 的 errors[] 會帶上 documentation_url。這個網址不是新的 API endpoint,而是被拒絕操作的官方文件入口;沿著它看 Security 與 Accepted Permissions,再回頭核對 token 的 account、zone 和資源範圍,排查會快很多。
先看錯誤物件,不要只看 HTTP status
官方範例的重點不是錯誤碼 10000,而是錯誤物件裡的 documentation_url:
{ "success": false, "errors": [ { "code": 10000, "message": "Forbidden", "documentation_url": "https://developers.cloudflare.com/api/resources/workers/subresources/beta/subresources/workers/methods/list" } ], "messages": [], "result": null}在本機或 CI 重新送出請求時,可以先把回應存成變數,再只印出錯誤欄位。不要把完整回應和 token 一起丟進公開 log:
response=$(curl -sS "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/workers/workers" -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN")
printf '%s\n' "$response" | jq -r '.errors[]? | [.code, .message, (.documentation_url // "(missing)")] | @tsv'documentation_url 可能不存在,因此查詢要保留 fallback。Cloudflare 的公告用「nearly all product APIs」描述涵蓋範圍,客戶端不應把它當成永遠存在的欄位。
沿著文件網址讀三個區塊
拿到網址後,先不要直接改 token。以 Cloudflare API 的 List Workers 文件為例,依序確認以下內容:
| 文件位置 | 要確認的問題 |
|---|---|
| HTTP method 與 path | 目前請求是不是同一個 endpoint?account_id、zone_id 或 resource ID 是否屬於預期帳號? |
| Security/Accepted Permissions | 這個操作接受哪個 API token permission?讀取與編輯是否是不同層級? |
| 參數與資源範圍 | token 選到的帳號、zone 或資源,是否涵蓋請求裡的目標? |
Cloudflare 的 API 文件會列出 endpoint 所需的權限。例如 List Workers 端點列出 Workers Scripts Read、Workers Scripts Write 與 Workers Tail Read 等可接受權限;這比看到 403 後猜一個「萬用」角色更可靠。
修正 token 前先核對 account 與權限範圍
1. 先確認 URL 裡的帳號
API path 如果使用 accounts/ACCOUNT_ID,token 也必須被授權到該 account。多帳號本機環境尤其容易把 token 選對、account_id 卻留成另一個專案的值。若你同時維護多個 Cloudflare 帳號,可以先看 Wrangler auth profiles 的帳號防呆方式;API 呼叫本身仍要另外檢查 token scope。
2. 對照 endpoint 的最小 permission
不要只看「帳號有沒有管理員」;API token 可能被限制在特定 account、zone 或資源。用 endpoint 文件列出的 permission 與目前 token summary 逐項比較,缺哪一項再補哪一項。
3. 確認認證方式沒有混用
Cloudflare 官方優先建議 API token。請確認程式送的是:
curl -sS "$API_URL" -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"不要在排錯過程中把 API token、Global API Key 和 Email header 互換,然後把不同認證方式的結果混在一起判讀。先固定 endpoint、account ID 與認證方式,才知道修改哪個條件真的有效。
用原始請求驗證,而不是只看 dashboard
完成權限調整後,沿用原本的 method、URL 和必要 header 重試一次。建議把驗證流程固定成:
- 保存 403 回應裡的 documentation_url 和 endpoint path。
- 在官方文件中確認 Accepted Permissions、account/zone scope 與必要參數。
- 由有權限的管理者調整最小範圍 token,或建立一組短期測試 token。
- 用同一個 curl 或 API client 重試,確認成功後再把設定同步到 CI secret store。
- 刪除不再使用的測試 token,並檢查 log 沒有留下 Authorization header。
如果你的 403 是 Workers AI 的付費模型或帳號資格問題,處理路徑和一般 API token permission 不同,可先看 Workers AI 403/5035 的模型與方案排查。
讓自動化讀文件,但不要自動放大權限
documentation_url 很適合交給 CLI、CI 或 agent 做下一步文件定位,但它不應該直接觸發權限升級。自動化可以解析網址、抓取 endpoint 的 permission 說明、產生待審核差異;真正修改 token scope 仍應由人確認帳號、資源與用途。
實務上的完成條件是:原始請求已用最小可行 permission 通過,token 沒有被寫進輸出,且缺少 documentation_url 時仍能回到 API reference 和 permission list。這比「403 消失了」更能避免下一次部署又把高權限金鑰帶進錯的環境。
常見問題
Q: documentation_url 是可以直接呼叫的 API 嗎?
A: 不是。它是被拒絕 endpoint 的官方文件網址,用來查看角色、permission 與參數邊界。修正後仍要重試原本的 API method 和 path。
Q: Cloudflare API 403 都一定有 documentation_url 嗎?
A: 不應假設一定有。Cloudflare 公告表示涵蓋 nearly all product APIs,但程式仍應處理欄位缺少或 URL 無法使用的情況,並 fallback 到 API reference 與 token permissions 文件。
Q: 遇到 403 是否應該直接重建 API token?
A: 先不用。先讀 documentation_url、確認 endpoint 所需 permission,再核對 account、zone 和資源範圍。只有在 token 已無法安全調整、需要輪替或需要不同用途的短期 token 時,才建立新 token。
參考資料:
Cloudflare Changelog:Enriched 403 responses for the Cloudflare API
回報錯字、失效連結,或告訴我你想看的延伸主題。