InfraGuard

プロジェクト(サービス ▸ プロジェクト)

プロジェクトのメタ情報を共有するレジストリ — ソース(GitHub)、CI/CD(Jenkins)、web/db の連携、バックアップ対象、機密情報への参照を登録します(デプロイツールではありません)。

概要 — 何をする画面か

プロジェクト は、チームが運用しているすべてのプロジェクトのメタ情報を1か所に集めて共有する レジストリです。プロジェクトごとに、ソースリポジトリ(GitHub など)、CI/CD パイプライン(Jenkins)、利用している Web サービスとデータベース、バックアップ対象、そして — もっとも重要な — 機密情報がどこにあるか を登録します。これにより、チームの誰もが「このプロジェクトは何でできていて、どこにデプロイされ、どの機密情報がどこにあるのか」を一目で把握できます。

この画面は デプロイツールではありません。 実際のビルドとデプロイは Jenkins で行われます。InfraGuard はここからパイプラインを起動しません。登録したデータは 共有ドキュメント です。保存する URL・Job 名・ブランチは参照用のリンクとラベルにすぎず、実行されることはありません。

中核となる設計原則:

こんなときに使う

画面構成

KPI ストリップ

項目 意味
プロジェクト 登録済みプロジェクトの総数
外部公開 accessible=1 のプロジェクト(外部 URL を持つ)
内部 accessible=0 のプロジェクト(内部専用・公開しない)
アーカイブ済み status=archived のプロジェクト

プロジェクトカード

各カードには次が表示されます:

編集モーダル(6タブ)

入力をタブごとに分割したワイドモーダル(.infr-modal__panel--wide)です。

タブ 入力項目
概要 名称(必須)・キー(スラッグ)・状態・グループ・外部アクセスのトグル・URL・概要・タグ
ソース リポジトリ提供元(GitHub/GitLab/Gitea/Bitbucket/その他)・リポジトリ URL・既定ブランチ・公開範囲(public/private/internal)
CI/CD Jenkins URL + 環境リピーター(dev/staging/prod ごとに: デプロイ URL・ブランチ・Jenkins Job・メモ)
連携 Web サービス のチェックボックス(登録済みの infr_web_service)+ DB(コレクター) のチェックボックス(access=database のコレクター)
バックアップ バックアップ対象リピーター(種別・対象・スケジュール・メモ)
機密情報 保管庫の鍵への参照(チェック+値の表示)+ 機密情報チェックリストのリピーター(項目・場所・参照・メモ)

使い方

プロジェクトを登録する

  1. 右上の [プロジェクトを追加] をクリックします(書き込み権限が必要)。
  2. 概要 タブで名称(必須)を入力します。キー(スラッグ)は任意で、^[a-z0-9_-]+$ に一致する必要があります(例: coin-market)。
  3. サービスが外部から到達可能なら 外部からアクセス可能 のトグルをオンにして URL を入力します。内部専用ならオフのままにします。その場合 URL の入力欄は無効になります。
  4. 残りのタブ(ソース、CI/CD、連携、バックアップ、機密情報)を必要に応じて入力します — すべて任意です。
  5. [保存] — サーバーが検証し、infr_project に upsert してカードを更新します。

CI/CD の環境を登録する

CI/CD タブで Jenkins URL を入力し、[環境を追加] でデプロイ先を1行ずつ追加します:

{
  "env": "prod",
  "url": "https://coin.example.com",
  "branch": "main",
  "jenkins_job": "coin_market-deploy-prod",
  "note": "blue/green"
}

web/db を連携する

連携 タブで、このプロジェクトが使用しているリソースにチェックを入れます。

いずれの連携も最大50件です。

バックアップ対象を宣言する

バックアップ タブのリピーターで、このプロジェクトのバックアップ方針(種別・対象・スケジュール・メモ)を記録します。これは 参照用のメタ情報 であり、実行されることはありません — 実際のバックアップジョブは スケジュールボード で管理します。

機密情報を管理する(中心機能)

機密情報は 2つの仕組みを併用 します。どちらも実際の機密情報の値を infr_project に保存しません。

1) 保管庫の鍵への参照(vault_key_ids)

保管庫の値の 表示は監査対象です。 表示するたびに vault_key.reveal(target=vault_key、via=project)が infr_audit_log に記録されます。値は短時間だけ表示され、クリックするとクリップボードにコピーされます — 必要なときだけ表示してください。保存されるプロジェクトのレコードが持つのは 鍵の id への参照だけ です。

2) 機密情報チェックリスト(secrets、マスク済み)

保管庫にない(または外部で保持している)機密情報については、場所だけ を記録します。値は決して保存されません。

フィールド 例
label STRIPE_SECRET_KEY
location .env (prod server /var/www)
ref 1Password › Coin › prod
note rotate quarterly

サーバーの cleanList() は 許可されたキー(label/location/ref/note)だけ を残し、それぞれ255文字に切り詰めます。4つのフィールドがすべて空の行は破棄されます。

削除する

編集モーダルの左下、またはカードの [削除] から削除します。確認後、POST /service/projects/delete が infr_project の行を削除し、project.delete を記録します。

データソース

データ ソース
プロジェクトのレコード infr_project(マイグレーション 000715)
グループ(カテゴリ) infr_asset_group(group_id 経由)
Web サービスの選択肢 infr_web_service(名称・ドメイン)
DB(コレクター)の選択肢 access=database である infr_collector(key・title・host_alias)
保管庫の鍵の選択肢 infr_vault_key — マスク済み(id・カテゴリ・タイトル・ユーザー名。値は含まない)
保管庫の値の表示 infr_vault_key.revealSecret()(復号。表示したときだけ)
監査ログ infr_audit_log(project.create/update/delete、vault_key.reveal)

ストレージスキーマ(infr_project 抜粋)

key            varchar(60) unique nullable   # スラッグ
group_id       int -> infr_asset_group
name           varchar(160)                  # 必須
status         enum(active,paused,archived)
accessible     boolean default 1
url            varchar(255)                  # accessible=1 のとき公開
summary        text
repo_provider  enum(github,gitlab,gitea,bitbucket,other)
repo_url / default_branch / visibility(public,private,internal)
jenkins_url    varchar(255)
environments   json  [{env,url,branch,jenkins_job,note}]
web_refs       json  -> infr_web_service id array
db_refs        json  -> infr_collector(database) key array
backup_targets json  [{kind,target,schedule,note}]
vault_key_ids  json  -> infr_vault_key id array (values stay in the vault)
secrets        json  [{label,location,ref,note}]  # チェックリスト。値は保存しない
tags / meta    json

この画面は ライブポーリングを行いません。 保存・削除・更新ボタン(GET /service/projects/list)のときにだけ一覧を再読み込みします。リアルタイムの状態は サービス ▸ カタログ と サービス ▸ Web が扱います。

アクセス権限

操作 ルート 最低レベル
閲覧(index/list) GET /service/projects、/list 1(demo、infr.auth)
保管庫の値の表示 POST /service/projects/vault-reveal 1(+監査)
保存(作成/更新) POST /service/projects/save 2(staff)
削除 POST /service/projects/delete 2(staff)

トラブルシューティングと FAQ

Q. 保存を押すと 403 になります。 書き込みにはレベル2以上が必要です。閲覧者(レベル1)のアカウントは、閲覧と保管庫の値の表示しかできません。管理者にレベルを上げてもらってください。

Q. [表示] を押しても空で返ってきます。 その保管庫のエントリに機密情報が入っていない(hasSecret=false)か、復号に失敗しています(APP_KEY が変わった場合など)。インベントリ ▸ 鍵情報 で値を設定し直してください。revealSecret() は失敗時に null を返します。

Q. Web/DB の連携リストに何も表示されません。 Web サービスはまず サービス ▸ Web に存在している必要があり、DB の選択肢には access=database のコレクターが必要です。登録したうえでプロジェクトのモーダルを開き直すと、選択肢が表示されます。

Q. キー(スラッグ)を保存すると形式エラーになります。 キーに使えるのは小文字・数字・ハイフン・アンダースコアだけです(^[a-z0-9_-]+$、最大60文字)。空白・大文字・その他の記号は取り除いてください。キーは任意なので、空のままでもかまいません。

Q. ここからデプロイを実行できますか。 いいえ。デプロイは Jenkins で行われます。この画面が保持する Jenkins URL と Job 名は ドキュメントとしてのみ 扱われます。

Q. 機密情報のメモに、値をそのまま書いてもよいですか。 絶対にいけません。secrets は値を一切保存しない 場所のマップ です。実際の値は暗号化された インベントリ ▸ 鍵情報 の保管庫に入れ、vault_key_ids から参照してください。

関連項目

프로젝트 레지스트리
프로젝트 레지스트리