Cloudflare的API

今天,我們宣布我們的API Token普遍可用了——這是一種可擴展的,更安全的與Cloudflare API交互的方式。作為致力于讓互聯網變得更好的一份子,Cloudflare努力簡化客戶在邊緣的可管理性。我們做到這一點的方法之一是確保我們所有的產品和服務都可以通過API進行配置。從合作伙伴到企業再到開發人員,客戶都希望實現Cloudflare的自動化管理。有時候這(自動化管理)可以通過我們的API直接完成,有時是通過我們幫助維護的開源軟件完成的,比如我們的Terraform提供程序Cloudflare-Go庫。自動化Cloudflare管理的客戶必須保持其Cloudflare服務盡可能安全,這一點至關重要。

最小權限及其重要性

保護軟件系統很難。限制軟件的功能是一種很好的防御措施,可以防止錯誤或惡意行為造成的影響超出其范圍。最小權限原則有助于指導給定系統應該具有多少訪問權限才能執行操作。這一原則最初由Jerome Saltzer提出,“系統的每個程序和每個特權用戶都應該使用最少的權限來完成工作?!?就Cloudflare而言,許多客戶擁有利用各種服務來路由流量的不同域。如果一個不良行為者獲得了對系統未經授權的訪問權,他們就可以使用該系統擁有的任何權限來造成進一步的破壞或竊取額外的信息。

讓我們看看API Token的功能如何適應最小特權原則。

關于API Token

API Token提供三種主要權限:

  1. 根據Cloudflare資源界定API Token的作用域
  2. 根據權限界定API Token的作用域
  3. 規定多個API Token

讓我們來逐個分解一下這些功能。

通過Cloudflare資源(Cloudflare Resource)界定API Token的作用域

Cloudflare按照區域劃分服務配置,等同于通過域名劃分。此外,一些客戶有多個賬戶,每個賬戶又有多個區域。重要的是,當API被授予訪問服務的權限時,它應當只能訪問與當前任務相關的賬戶資源和區域。API Token的作用域可以被限定為只覆蓋特定賬戶和特定區域。一個常見的用例是,如果您有一個暫存區和生產區,那么API Token可以被限制為僅能影響暫存區,而不能訪問生產區。

按權限界定API Token的作用域

能夠將API Token限定在特定區域內是很好的,但是在一個區域內可以配置許多不同的服務:防火墻規則、頁面規則和負載平衡器(僅僅舉幾個例子)。如果客戶的服務只能創建新的防火墻規則來響應流量模式,那么允許該服務更改DNS記錄也是對最低權限的侵犯。API Token可以讓您將每個token的作用域設置為特定權限。您可以組合多個權限來創建自定義Token,從而適應特定的用例。

多個API Token

如果您使用Cloudflare來保護和加速多個服務,這可能會從多個地方(不同的服務器、虛擬機、容器或Workers)對Cloudflare更改API。能夠為每個服務創建API Token意味著每個服務都與來自其他服務的更改隔離。如果一個API Token泄漏或需要輪轉,其他服務的API Token不會受到任何影響。此外,前面提到的功能還意味著可以將每個服務的范圍界定為所需的操作和資源。這使得客戶可以更好地在通過API訪問Cloudflare時實現最小權限原則。

現在,讓我們逐步介紹如何創建和使用一個API Token。

使用API Token

要創建您的第一個API Token,您需要轉到用戶個人資料的“API Tokens”部分,您可以通過以下網址找到該部分:dash.cloudflare.com/profile/api-tokens

1. 在這個頁面上,除了全局API秘鑰和原始CA秘鑰之外,您還可以找到所有API Token的列表。

API Token入門——創建Token

要創建您的第一個API Token,請點擊“創建令牌(Create Token)”


2. 在創建屏幕上,有兩種創建Token的方法。你可以通過“自定義(Custom)”選項從頭開始創建,也可以通過選擇“從模板開始(Start with a template)”來使用預定義的模板。

API Token模板選擇

在這一案例中,我們將使用“編輯區域DNS(Edit zone DNS)”模板來創建API Token,該Token可以編輯單個區域的DNS記錄。


3. 選擇了模板以后,我們需要為API Token選擇一個區域。注意,DNS編輯權限已被預先選擇。

指定API Token可以控制的DNS區域

在這一例中,我們選擇“garrettgalow.com”作為其DNS記錄將能被API Token編輯的區域。


4. 選擇了continue to summary(繼續操作,匯總選擇)以后,我就可以查看我的選擇。在本例中,資源和權限都非常簡單,但在這里您還有更改的機會,以確保在創建API Token之前賦予它正確的權限。

Token選項匯總——確認


5. 創建好后,我們將看到該API Token。這一頁面是唯一一次向您顯示秘鑰的機會,所以請您確保將它存放在安全的地方。擁有這些秘鑰的人都可以在指定的資源上執行授權操作,因此您要像保護密碼一樣保護它。在下面的截圖中,我用黑框蓋出了這個秘鑰,原因顯然。如果您碰巧丟失了這個秘鑰,您總是可以從API Token表重新生成它,這樣您就不必重新配置所有權限。

具有Token秘鑰的Token創建完成頁面

除了秘鑰本身以外,這一頁面還提供了一個curl請求示例,可用于驗證Token是否已經創建成功。它還提供了一個示例,說明如何將Token用于任何直接HTTP請求。對于API Token,我們現在遵循的是RFC授權承載標準。調用該API,我們會看到一個成功的響應,告訴我們該令牌有效且可用。

~$ curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
>      -H "Authorization: Bearer vh9awGupxxxxxxxxxxxxxxxxxxx" \
>      -H "Content-Type:application/json" | jq

{
  "result": {
    "id": "ad599f2b67cdccf24a160f5dcd7bc57b",
    "status": "active"
  },
  "success": true,
  "errors": [],
  "messages": [
    {
      "code": 10000,
      "message": "This API Token is valid and active",
      "type": null
    }
  ]
}

接下來還有什么?

對于使用Cloudflare API的每個人,我們建議從先前使用的API秘鑰轉到使用API Token。隨著這一公告的發出,我們的Terraform provider,Cloudflare-Go library以及WordPress plugin均已更新,以實現API Token的兼容性。其他的函數庫也將很快更新。API Token以及API秘鑰都將暫時被支持,以便客戶能夠安全地進行遷移。我們還有更多API Token的計劃功能,以進一步保護token的使用,敬請期待將來的公告吧!

請讓我們知悉您在Cloudflare社區中對API安全的想法以及接下來您想看到的內容。