Runbook: GAS_AUTH_TOKEN Rotation
関連脅威: ADR-001 T03(Worker→GAS 認証)/ T10(トークン rotation・漏洩時対応)
目的
GAS_AUTH_TOKEN(Cloudflare Worker → GAS Web App 間の共有秘密)を新しく入れ替える。漏洩時の即時無効化と予防的 rotationの両方で本手順を使用する。
前提
- 認証モデル: Worker は GAS 転送時に
?x-verified=true&x-gas-auth=<GAS_AUTH_TOKEN>を付与。GAS 側routeWebhookがGAS_AUTH_TOKENと比較検証(不一致は reject)。 - Token 強度: UUID v4(128bit / 32 hex)。ブルートフォース不可。rotation は強度ではなく運用のためのもの。
GAS_AUTH_TOKENは GAS 側ScriptPropertiesと Worker 側wrangler secretの2箇所に保持。両方を更新する。
手順
1. GAS 側で新トークン生成(旧トークン即時無効化)
- GAS エディタ(script.google.com)で本プロジェクトを開く
config/ScriptProperties.jsを開く- 関数セレクタで
rotateAuthTokenを選択し 実行- 初回実行時は認可プロンプトが出る場合あり(承認)
- 実行完了後、実行ログ(
logシート or Stackdriver)に新トークンは出力しない設計(appendLogRowは rotation 事実のみ記録・値は非表示) - 返却値の新トークンをコピー(実行結果の戻り値、または
Logger.log(rotateAuthToken())で取得)
⚠️ この瞬間から旧トークンは無効。Worker 側を更新するまで Worker→GAS 通信が 401 になる(一時的な予約受信停止)。影響最小化のため、トラフィックの少ない時間帯に実施すること。
2. Worker 側 secret 更新
cd <reserve-optimizer リポジトリ>/worker
npx wrangler secret put GAS_AUTH_TOKEN
# プロンプトで手順1の新トークンを貼り付け
3. デプロイ・疎通確認
npx wrangler deploy
- 確認: LINE からテスト予約を行い、GAS 側
logシートにINFO(reject ではない)が記録されること - 確認:
/api/availability等、Web API 経路が正常応答すること
4. 旧トークン無効化確認
- GAS エディタで
PropertiesService.getScriptProperties().getProperty('GAS_AUTH_TOKEN')を実行し、新トークンになっていることを確認(旧トークンは上書き済み)
予防的 rotation の推奨頻度
- 6ヶ月に1回(目安)
- 漏洩を疑う事象(コミット誤混入・ログ露出・関係者異動)があれば即時実施
漏洩時の影響範囲
GAS_AUTH_TOKEN 1つで GAS の全 webhook/API ルート(LINE・Stripe・Web予約API)が Worker になりすまして実行可能。影響: 虚偽予約・予約データ汚染・Stripe 連携起点。漏洩を発見次第、本手順を即時実行すること。