コンテンツにスキップ

検索はプロダクションビルドでのみ利用可能です。 ローカルでテストするには、サイトをビルドしてプレビューしてください。

シークレット管理

Speakeasy で使用するシークレット(機密情報)の一覧と管理方法です。


  1. コードにシークレットを含めない.dev.vars はバージョン管理対象外
  2. Wrangler Secrets を使用 — 本番/dev 環境のシークレットは Wrangler CLI で設定
  3. 最小権限 — 各サービスは必要なシークレットのみアクセス可能
  4. ローテーション対応 — 定期的なキーローテーションを実施
  5. Mule 一元管理 — 外部 API キーは Mule Egress Gateway に集約

シークレット説明ローテーション
BETTER_AUTH_SECRETbetter-auth のセッション署名キー年次
GOOGLE_CLIENT_IDGoogle OAuth クライアント ID必要時
GOOGLE_CLIENT_SECRETGoogle OAuth クライアントシークレット必要時

全外部 API キーを一元管理する Egress Gateway。他サービスは Service Binding(Native RPC)経由でアクセスする。

シークレット説明ローテーション
RESEND_API_KEYResend メール API キー必要時
LINE_MESSAGING_ACCESS_TOKENLINE Messaging API チャネルアクセストークン必要時
VAPID_PUBLIC_KEYWeb Push VAPID 公開鍵年次
VAPID_PRIVATE_KEYWeb Push VAPID 秘密鍵年次
PURELOVERS_API_KEYpurelovers API 認証キー必要時
PURELOVERS_BASIC_AUTHpurelovers レビュー環境 Basic Authdev のみ
PURELOVERS_COOKIESpurelovers レビュー環境 Cookiedev のみ
LINE_CHANNEL_IDLINE Login チャネル ID必要時
LINE_CHANNEL_SECRETLINE Login チャネルシークレット必要時
シークレット説明ローテーション
CLOUDFLARE_ACCOUNT_IDCloudflare アカウント ID不変
CLOUDFLARE_API_TOKENCloudflare API トークン年次

Bell, Fizz, Base, Vintage, Tap, Door は Service Bindings 経由で通信するため、直接シークレットを保持しない。

シークレット説明ローテーション
CLOUDFLARE_API_TOKENWrangler デプロイ用 API トークン年次
CLOUDFLARE_ACCOUNT_IDCloudflare アカウント ID不変
BETTER_AUTH_SECRETProof 用(デプロイ時に同期)年次
GOOGLE_CLIENT_IDProof 用(デプロイ時に同期)必要時
GOOGLE_CLIENT_SECRETProof 用(デプロイ時に同期)必要時
RESEND_API_KEYMule 用(デプロイ時に同期)必要時
LINE_MESSAGING_ACCESS_TOKENMule 用(デプロイ時に同期)必要時
VAPID_PUBLIC_KEYMule 用(デプロイ時に同期)年次
VAPID_PRIVATE_KEYMule 用(デプロイ時に同期)年次
PURELOVERS_API_KEYMule 用(デプロイ時に同期)必要時
LINE_CHANNEL_IDMule 用(デプロイ時に同期)必要時
LINE_CHANNEL_SECRETMule 用(デプロイ時に同期)必要時
GEMINI_API_KEYリリースノート生成用必要時

一括設定スクリプト(dev 環境)

Section titled “一括設定スクリプト(dev 環境)”
Terminal window
# .env にシークレットを記述して実行
bash scripts/sync_secrets.sh
Terminal window
# 本番環境にシークレットを設定
cd services/proof
echo "your-secret-value" | npx wrangler secret put BETTER_AUTH_SECRET
# dev 環境にシークレットを設定
echo "your-secret-value" | npx wrangler secret put BETTER_AUTH_SECRET --env dev
# シークレット一覧の確認
npx wrangler secret list
npx wrangler secret list --env dev
# シークレットの削除
npx wrangler secret delete OLD_SECRET

ローカル開発では .dev.vars ファイルにシークレットを記述:

Terminal window
# .dev.vars(各サービスディレクトリに配置)
BETTER_AUTH_SECRET=local-dev-secret
GOOGLE_CLIENT_ID=xxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=xxx

GitHub リポジトリの Settings > Secrets and variables > Actions で設定:

  1. Repository secrets に追加
  2. ワークフローファイルで ${{ secrets.SECRET_NAME }} で参照

Web Push の VAPID 鍵ペアを生成する場合:

Terminal window
npx web-push generate-vapid-keys

出力された公開鍵と秘密鍵をそれぞれ VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY として設定します。


1. BETTER_AUTH_SECRET のローテーション

Section titled “1. BETTER_AUTH_SECRET のローテーション”
Terminal window
# 1. 新しいシークレットを生成
openssl rand -hex 32
# 2. Proof サービスに設定
cd services/proof
echo "new-secret" | npx wrangler secret put BETTER_AUTH_SECRET
echo "new-secret" | npx wrangler secret put BETTER_AUTH_SECRET --env dev
# 3. GitHub Actions secrets も更新
# Settings > Secrets and variables > Actions > BETTER_AUTH_SECRET
Terminal window
# 1. 新しい鍵ペアを生成
npx web-push generate-vapid-keys
# 2. Mule Egress Gateway に設定
cd gateways/mule
echo "new-public-key" | npx wrangler secret put VAPID_PUBLIC_KEY
echo "new-private-key" | npx wrangler secret put VAPID_PRIVATE_KEY
# 3. GitHub Actions secrets も更新

3. LINE チャネルアクセストークンのローテーション

Section titled “3. LINE チャネルアクセストークンのローテーション”
Terminal window
# LINE Developers Console でトークンを再発行
# Mule Egress Gateway に設定
cd gateways/mule
echo "new-token" | npx wrangler secret put LINE_MESSAGING_ACCESS_TOKEN

セキュリティベストプラクティス

Section titled “セキュリティベストプラクティス”
項目推奨事項
シークレットの共有パスワードマネージャー(1Password 等)を使用
アクセス権限Cloudflare API トークンは最小権限で発行
監査ログCloudflare Dashboard の Audit Log を定期確認
ローテーション年次でのキーローテーションを推奨
漏洩時即座にローテーションし、影響範囲を確認
CI/CD 同期GitHub Actions secrets を更新したら即座にデプロイで反映