島田則幸

Production Readiness — Lab から本番運用へ足すもの

このドキュメントは、ポートフォリオ内の Infra Operation Lab / Linux Lab / Monitoring Stack / Ansible / Cloud Lab を、本番相当の運用へ近づける場合に追加すべき観点を整理したものです。

Lab では「学習しやすさ」「公開しやすさ」「安全に読めること」を優先しています。本番では、監視・通知・認証・秘密情報・バックアップ・変更管理・監査を追加し、障害時に人が迷わない状態まで整えます。


1. 監視 / 通知

Lab の状態 本番で足すもの 理由
Prometheus + Grafana + Loki + 4 アラート Alertmanager / 通知先 / 抑止 / エスカレーション アラートを見えるだけでなく、担当者へ届く状態にする
固定しきい値 ベースライン収集 / SLO / エラーバジェット (具体例) 環境ごとの正常値に合わせる
node_exporter 単体 blackbox_exporter / windows_exporter / アプリメトリクス 外形監視とOS別監視を追加する
Loki + Alloy(server-monitor で実装) retention 90 日 / S3 オブジェクトストレージ / X-Scope-OrgID 認証 ログの長期保管とテナント分離(monitoring-stack/ の Loki + Promtail はアーカイブ済みの初期構成)
Metrics + Logs のみ Traces (OpenTelemetry / Tempo) 観測性の三本柱を揃える
手動確認 Runbook link / ダッシュボードURL / 初動手順 アラートから初動へ直結させる

最小本番化例:

route:
  receiver: teams-primary
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h

2. 認証 / アクセス制御

領域 本番での方針
Linux SSH パスワード認証無効、鍵 + MFA、踏み台 / SSM / VPN 経由
Windows / AD 管理者権限は日常アカウントと分離、JIT / PAM を検討
M365 条件付きアクセス、MFA、サインインログ監視
Cloud IAM Identity Center、最小権限ロール、Break-glass アカウント
Grafana ローカル admin 固定ではなく SSO / RBAC / 監査ログ

3. 秘密情報 / 設定値

Lab の状態 本番で足すもの
README にダミー値を明記 .env / Secret Manager / Ansible Vault / GitHub Actions Secrets
Ansible の admin_pubkey がサンプル Vault 分離、ローテーション手順、失効手順
Grafana password が changeme 初期起動時の強制変更、SSO、有効期限管理
Terraform 変数にサンプルCIDR tfvars は Git 管理外、CI では validate まで

4. バックアップ / リストア / DR

対象 本番で確認すること
Windows ファイルサーバー VSS / Robocopy / ACL復元 / 共有単位復旧 / 月次リストアテスト計画
Linux サーバー rsync / 世代管理 / systemd timer / オフサイト同期 / 完全復元手順
Grafana / Prometheus 永続ボリューム、設定ファイル、ダッシュボードJSONのGit管理
Cloud AWS Backup、世代管理、暗号化、別アカウント保管
副系切替 AD FSMO 移譲、DFS Namespace ターゲット切替、DB レプリカ昇格、VIP(Keepalived)、DNS TTL 短縮 → 切替 → 戻し

バックアップは取得成否だけでなく、戻せること を月次で、副系に切れること を年次の DR ドリルで証明します。手順の具体例は Failover Runbook を参照。


5. 変更管理

本番では、作業前後の証跡とロールバック条件を必ず残します。

フェーズ 残すもの
申請 目的、影響範囲、承認者、作業時間、ロールバック方針
事前確認 現在値、対象リソース、バックアップ、利用者影響
作業 実行コマンド、開始・終了時刻、作業者
検証 期待結果、確認結果、利用者確認
クローズ 添付証跡、残課題、再発防止、ナレッジ更新

AD / M365 の具体例は support-docs/ad-m365-change-case.md にまとめています。


6. CI / 品質ゲート

対象 CIで見るもの
Static site リンク切れ、HTML構造、画像サイズ
PowerShell Pester、PSScriptAnalyzer
Linux script bash -n、将来的には ShellCheck
Prometheus promtool check config / promtool check rules
Docker Compose docker compose config
Ansible collection install、syntax-check、ansible-lint
Terraform fmt、init without backend、validate

追加した workflow:


7. 優先度つきロードマップ

優先 追加するもの 理由
P1 Alertmanager + 通知先 + Runbook link 障害検知から初動までをつなぐ
P1 Secrets / Vault / SSO 公開サンプルから本番運用へ移る際の最低条件
P1 リストアテスト記録 + 年次 DR ドリル(Failover Runbook 実行) バックアップ・副系切替の実効性を示す
P1 CIS Benchmark 自動監査(OpenSCAP / Lynis)を playbook 適用先にも広げる 対応済み。infra-check.ymllynis-audit(CI runner 単体)に加え、playbook-lynis-audit ジョブで ansible/playbook.yml を CI runner に実際に適用し、Lynis の hardening index を before/after で比較(現状マッピング §8 参照)。実サーバー / VM への適用結果を保証するものではない点は引き続き注意(本番化候補)
P2 CloudTrail / Flow Logs / GuardDuty クラウド監査と検知を補う
P2 CI失敗をマージ必須(required)チェック化 ansible-lint は最高プロファイル production に到達済み(.ansible-lint / infra-check.ymlcollections: キーワード廃止と FQCN 統一も対応)。Terraform validate も CI で実行済み。残るのは CI失敗時にマージをブロックできる状態(branch protection の required checks 化)にすること
P3 SLO / Error Budget 対応済み。SLO / Error Budget で Lab サービスの SLI → SLO → Error Budget → 運用判断までを具体例つきで整理済み

関連