デプロイ運用手順
本番起動前に migration role でマイグレーションを適用し、audit_logs の owner が API role ではなく、API role に UPDATE/DELETE 権限がないことを検証する。検証に失敗した場合、API は起動しない。
適用範囲
リポジトリ内の Docker Compose ファイルは開発・デモ用のトポロジーであり、本番環境の堅牢化ガイドではない。本番デプロイには、管理されたシークレット、TLS 終端、バックアップ・リストア手順、ネットワークセグメンテーション、及び組織固有の規制対応管理が必要である。
本番環境で必須の管理策
MERLON_ENV=productionを設定し、認証を有効化する。- 外部 TLS は信頼できるイングレスまたはリバースプロキシで終端し、配備全体のレート制限もそこで実施する。API のメモリ内リミッターはプロセス単位の補助防御としてのみ扱う。
- Ingress で
X-Forwarded-Forを上書きまたは安全に追記し、その狭い送信元 CIDR のみをMERLON_TRUSTED_PROXY_CIDRSに指定する。これにより、監査記録とアプリ側リミッターが観測済みのクライアントアドレスを使用する。 - データベースパスワード、ブートストラップトークン、JWT 材料、暗号鍵はシークレットマネージャに保存し、コミットしたり本番用の値を
.envファイルに配置したりしないこと。 - ローカル開発環境以外では
MERLON_SEED=falseを維持する。 - PostgreSQL と API の
/metricsは、プライベートネットワークまたは認証済みの監視基盤に限定する。 MERLON_ENCRYPTION_KEY_RINGをバックアップし、復旧手順がデータベースデータと必要な鍵材料の両方をリストアできることを検証する。
設定検証
ロールアウト前に、起動ログからネイティブエンジン設定ダイジェストを記録し、承認済みのルールファイルをリリース証跡とともに保管する。ADR-0012 を参照。
監査ログのデータベースロール
アプリケーションのデータベースロールは audit_logs に対する UPDATE 権限や DELETE 権限を持つべきではない。読み取り専用の監査アクセスは別ロールを通じて付与し、対象環境で権限付与を検証する。ロールテンプレートの例は本ディレクトリ内の audit-hardening.sql.example を参照。