CF API トークンの作り方
line-harness の自動アップデートは、Cloudflare API 経由で あなたの Worker・Pages・D1 を更新します。そのために、 必要最小限の権限を持った API トークンを 1 つだけ発行して、 Worker の Secret に登録します。所要時間は 5 分くらいです。
なぜ必要か
ダッシュボードから「アップデート」ボタンを押すと、line-harness は 以下の Cloudflare リソースを操作します:
- Worker: 新しいバージョンのコードをデプロイ
- Pages: ダッシュボード UI をビルド & デプロイ
- D1: スキーマ migration を適用
- Account: 既存設定の参照
これらを実行するには、Cloudflare API への認証情報が必要です。 OAuth ではなくユーザー発行の API トークンを使うことで、権限を最小化し、いつでも revoke できるようにしています。
必要な scope (権限)
以下の 4 つの権限だけを持ったカスタムトークンを作成します。 無関係なリソース (Zone, DNS, R2 など) には触らないので、 万が一トークンが漏れても影響範囲は限定されます。
| カテゴリ | 権限 | レベル |
|---|---|---|
| Account | Workers Scripts | Edit |
| Account | Cloudflare Pages | Edit |
| Account | D1 | Edit |
| Account | Account Settings | Read |
作成手順
1. API Tokens 画面を開く
dash.cloudflare.com/profile/api-tokens を開きます (右上のプロフィール → My Profile → API Tokens でも辿れます)。
2. Create Token をクリック
画面右上の 「Create Token」 ボタンを押します。 テンプレート一覧が表示されるので、一番下までスクロールして「Custom token」 の 「Get started」 を押します。
3. 権限を追加する
「Permissions」セクションで、上の表の 4 つの権限を順番に追加します。 各行で「Account」「Workers Scripts」「Edit」のように選びます。
4. Account Resources を絞る
「Account Resources」セクションで、対象の Cloudflare アカウントを 1 つ選びます。「Include - All accounts」は使わないでください。 複数アカウントを持っている場合、line-harness 用のアカウントだけを選ぶことで 事故を防げます。
5. Token name を付ける
後で見分けやすいように、token の名前を line-harness-update など分かりやすいものに設定します。
6. Create して、表示されたトークンをコピー
「Continue to summary」→「Create Token」と進むと、トークン文字列が表示されます。
Worker Secret に保存する
コピーした token を、line-harness の Worker Secret として登録します。 サーバーに SSH で入り、以下のコマンドを実行してください。
cd ~/.line-harness
# YOUR_TOKEN をさっきコピーしたトークンに置き換える
printf '%s' "YOUR_TOKEN_HERE" | npx wrangler secret put CF_API_TOKENprintf を使ってください。echo はデフォルトで末尾に改行を付け足します。 改行が混ざったトークンを保存すると、Cloudflare API が 404 を返してしまい、 アップデートが動かなくなります。設定後、npx wrangler secret list で CF_API_TOKEN が一覧に出れば成功です。
セキュリティについて
- Token は Cloudflare 側で暗号化されて保存され、 ダッシュボードからも値は読み取れません (登録 / 削除 / 上書きのみ可能)
- Worker のコード内では
env.CF_API_TOKENとして参照できますが、 ログには出さない / レスポンスに含めない設計になっています - 万が一漏れたと感じたら、Cloudflare ダッシュボードから即時 revoke できます
- 権限が最小化されているので、漏れても影響は line-harness の Worker / Pages / D1 に限定されます (Zone や DNS は触れません)