Appearance
リリースセキュリティチェックリスト
本番リリース承認前に、コード検査だけでなくCloudflare、Firebase、Android署名、配布経路の設定を確認する。
API / Cloudflare
- [ ]
NODE_ENV=productionを設定し、ALLOW_DEMO_ADMIN_FALLBACKを設定しない、またはfalseにする。 - [ ]
REQUIRE_CSRF_ORIGIN_CHECK=trueを設定する。 - [ ]
ALLOWED_ORIGINSは実際のGuardian/Staff/PWA・FacilityのOriginだけに限定し、localhost、demoドメイン、*を本番へ持ち込まない。 - [ ]
JWT_SECRET、ACCESS_TOKEN_SECRET、REFRESH_TOKEN_SECRET、ENCRYPTION_KEYを十分な長さのSecretとして登録する。 - [ ]
PROVIDER_API_SECRET、KIOSK_API_KEY、KIOSK_QR_SECRET、LINE/FCM関連Secretを必要な環境だけへ登録する。 - [ ] Provider Portal用に専用の管理組織を作成し、そのIDを
PROVIDER_ADMIN_ORGANIZATION_IDに設定する。通常のtenant adminをProvider管理者として使わない。 - [ ] Provider APIの機械間クライアントは
X-Provider-TokenとPROVIDER_API_SECRETを使用し、Secretをブラウザへ配布しない。 - [ ] 本番D1、KV、R2のbinding IDを確認し、staging/demoのDBを参照していないことを確認する。
- [ ]
/healthと/v1/healthが200で、databaseがokになることを確認する。 - [ ] 未認証の
auth/me、Facility dashboard、SSEが401となり、404や500にならないことを確認する。
クライアント / 署名
- [ ] 各アプリの
.env.productionでVITE_DEMO_MODE=false、HTTPS API、更新署名公開鍵、Firebase実値を設定する。 - [ ] 更新マニフェスト署名検証を有効化し、公開鍵とAPI側の鍵ID・ローテーション方針が一致することを確認する。
- [ ] Android keystore、alias、パスワードをSecret管理から渡し、リポジトリやログへ保存しない。
- [ ] APK/AABが期待するpackage ID、versionName、versionCode、非debuggable、署名を満たすことを確認する。
- [ ] PWA ZIPに
.env、source map、秘密鍵、開発用設定が含まれないことを確認する。
受入 / 運用
- [ ] 実APIのGuardian、Staff、Facilityでログイン、権限分離、ログアウト、期限切れ更新を確認する。
- [ ] Firebase通知、LINE連携、Cloudflare更新配信、外部ストレージを実環境のアカウントで確認する。
- [ ] 児童氏名などのPIIがAPI応答、ログ、PWA ZIP、Facility/Kiosk APKの平文へ不要に出ないことを確認する。
- [ ]
release/release-manifest-<version>.jsonとSHA-256 sidecarを保管し、承認対象と一致させる。 - [ ] ロールバック対象版、DBバックアップ、Secretローテーション、障害時の連絡先を記録する。
ローカルで実行できる検査
powershell
pwsh -ExecutionPolicy Bypass -File ./scripts/verify-local-stack.ps1
pwsh -ExecutionPolicy Bypass -File ./scripts/check-api-compatibility.ps1
pwsh -ExecutionPolicy Bypass -File ./scripts/run-dependency-check.ps1
pwsh -ExecutionPolicy Bypass -File ./scripts/verify-release-config.ps1 -App guardian -EnvFile app/Guardian/.env.production -RequireFirebaseローカル検査の成功だけでは、本番外部サービス、実アカウント、署名鍵、Cloudflare設定の承認を代替しない。