Cloudflare 的 API token 怎么用

Re:Linked

在过去,Cloudflare 的相关 API 都需要通过 Email + Global API key 的方式进行验证。所谓 Global API key,一个账户自然只有一个,并且拥有所有权限。这种一刀切的权限管理不符合最小权限原则。如果把它保存在每个使用它的服务器上,一旦其中一台服务器被骇,整个 Cloudflare 账户上所有站点的配置都有被篡改的风险。

幸运的是,在今年八月末,Cloudflare 终于有了 API token 功能。用户可以通过 API token 细化授权粒度,只给予操作所需要的权限,以增强系统的整体安全性。

(注:现时 (2019/12/20) certbot 的 Cloudflare 插件尚不支持 API token。)

那么如何使用 API token 呢?这里以 acme.shipfs-deploy 为例。

生成 API token

第一步自然是生成一个 API token。登录后,点击右上角图标 - “My Profile”,在上方标签选择 “API Tokens” 就可以看到上方的 API Tokens 设置。此页面的 URL 类似于:

1
2
https://dash.cloudflare.com/deadbeefdeadbeefdeadbeefdeadbeef/profile/api-tokens
# 其中 /dead...beef/ 是你的 Account ID。

页面大概长这个样子:

Cloudflare API token path

权限设置上,注意我们除了 DNS 修改权限之外,还需要赋 Zone 的 Read 权限,使 API 可以读取域名列表。

Cloudflare API permission settings

之后我们就能拿到一个 API token。这个 token 只会在这里显示一次。如果丢失了,只能重新按上述过程生成一个新 token 来替代。

获取 Account ID

API token 要和 Account ID 共同使用。Account ID 可以在任何域名的 overview 页面右栏 “API” 标题下找到。通常是一个 32 字符长的十六进制串(注意不是 Zone ID)。

设置环境变量

对于 acme.sh 来说,

1
2
export CF_Token="sdfsdfsdfljlbjkljlkjsdfoiwje"  # API token
export CF_Account_ID="xxxxxxxxxxxxx" # Account ID

acme.sh 会将这些信息存储至安装目录的 account.conf 以便后续使用。

对于 ipfs-deploy 来说,

1
2
3
4
# 这里假设我们想绑定此 IPFS 目录到 ipfs.example.site
export IPFS_DEPLOY_CLOUDFLARE__API_TOKEN="sdfsdfsdfljlbjkljlkjsdfoiwje" # API token
export IPFS_DEPLOY_CLOUDFLARE__RECORD="_dnslink.ipfs.example.site" # 要修改的 TXT 记录名
export IPFS_DEPLOY_CLOUDFLARE__ZONE="example.site" # Zone 名称,通常为域名

这样一来,我们就可以使用 Cloudflare 提供的 API token 体验更细粒度的权限管理,也使整个系统更加安全。


为本文「鼓掌」

如果喜欢本文,欢迎点击下方的「鼓掌」按钮为本文鼓掌 :-)


评论