📝

CloudflareのキャッシュをAPIとAPI Tokenを使ってパージする

2023/01/29に公開

CDNのキャッシュをパージするにはCDNが用意するAPIを叩いてパージする方法があります。CloudflareにもAPIが用意されいますがこのAPIの利用に少しつまづいたので備忘録として記事に残します。

言いたいこと

  • APIの利用にはAPI Key ではなく適切なスコープをもつAPI Tokenを作成し利用しよう
  • APIの利用にX-Auth-KeyX-Auth-Emailヘッダーは必ずしも必要ではなく、AuthorizationヘッダーにAPI Tokenを付与すれば利用できる

キャッシュパージのAPI

ドキュメントはこちら。今回は特定ページのキャッシュパージを想定するので「Purge Files by URL」を参照しています
API Document Purge Files by URL

curl -X POST "https://api.cloudflare.com/client/v4/zones/[:zone_id]/purge_cache" \
     -H "X-Auth-Email: [:account_email]" \
     -H "X-Auth-Key: [:api_key]" \
     -H "Content-Type: application/json" \
     --data '{"files":["http://www.example.com/css/styles.css",{"url":"http://www.example.com/cat_picture.jpg","headers":{"Origin":"https://www.cloudflare.com","CF-IPCountry":"US","CF-Device-Type":"desktop"}}]}'

こちらはドキュメントに掲載されているリクエストコマンドの例です。
APIリクエストにはX-Auth-EmailX-Auth-Keyが必要なことがわかります。両者についてドキュメントにはこう書かれています。

https://api.cloudflare.com/#getting-started-requests

X-Auth-Key API key generated on the "My Account" page
X-Auth-Email Email address associated with your account

なるほどX-Auth-EmailはアカウントのメールアドレスでX-Auth-Keyはアカウントページから作成できるAPI Keyなんだということが分かりました。ではさっそく作成しようと思ったらここでつまづきました

API Keyを作成できない

ClodufalreのDashboardを覗いても「API Key」なるものを作成できる画面が見当たりません。しかし「API Token」を作成できる画面ならあります。

https://dash.cloudflare.com/profile/api-tokens

同じページ内に「API Key」のセクションがありますが作成ボタンは見当たりません。表示されているのはアカウント毎に作成される2つのAPI Keyのみです。

Global API Keyとそれっぽいものがあるので試しにX-Auth-Keyの値にGlobal API Keyを使ってAPIにリクエストしてみましょう。これは成功します。しかしGlobal API keyは非常に強い権限もつAPI keyです。

he Global API Key is an all purpose token that can read and edit any data or settings that you can access in the dashboard.

このような強い権限をもつKeyを例えばCIのシークレットに登録して使うようなことはしたくありません。

API Tokeで試してみる

キャッシュパージのみのスコープをもつTokenなら作成することができるので試しにこのTokenを使ってリクエストしてみましょう。

残念ながらX-Auth-Keyの値にAPI Tokenを使ってもエラーになります。まあそうだろうな、という感想です。

AuthorizationヘッダーとAPI Tokenでリクエストが成功

TokenなのでAuthorizationヘッダーに載せてリクエストしてみたらあっさり成功しました。

curl -X POST "https://api.cloudflare.com/client/v4/zones/[:zone_id]/purge_cache" \
     -H "Authorization: Bearer [API token]" \
     -H "Content-Type: application/json" \
     --data '{"files":["http://www.example.com/foo]"},

ただAPIドキュメントに書かれている方法とは異なるのでこれで良いのかスッキリしませんがそれでもGlobal API Keyを使うよりはセキュアなはずです。

API KeyがすでにLegacyという位置付けでAPI Tokenの利用が推奨されていることを見ても、API ドキュメントの更新が間に合ってないのかもしれません。

https://developers.cloudflare.com/fundamentals/api/get-started/keys/

おわりに

以上、APIからCloudflareのキャッシュをパージする方法でした。API KeyよりAPI Tokenの利用が推奨されているのでAPI Tokenで安全なリクエストをしていきましょう。

Discussion