CloudflareのキャッシュをAPIとAPI Tokenを使ってパージする
CDNのキャッシュをパージするにはCDNが用意するAPIを叩いてパージする方法があります。CloudflareにもAPIが用意されいますがこのAPIの利用に少しつまづいたので備忘録として記事に残します。
言いたいこと
- APIの利用にはAPI Key ではなく適切なスコープをもつAPI Tokenを作成し利用しよう
- APIの利用に
X-Auth-Key
とX-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-Email
とX-Auth-Key
が必要なことがわかります。両者についてドキュメントにはこう書かれています。
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」を作成できる画面ならあります。
同じページ内に「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 ドキュメントの更新が間に合ってないのかもしれません。
おわりに
以上、APIからCloudflareのキャッシュをパージする方法でした。API KeyよりAPI Tokenの利用が推奨されているのでAPI Tokenで安全なリクエストをしていきましょう。
Discussion
「API Tokeで試してみる」 は 「API Tokenで試してみる」
「--data '{"files":["http://www.example.com/foo]"},」 は 「--data '{"files":["http://www.example.com/foo"]}」なのでは?と思いました。