Instiq
第2章 · ソース管理の設計と実装·v2.0.0·更新 2026/6/3·読了目安 約9分

変更要約: AZ-400 第2章を深掘り(比較表・シナリオ・FAQ・ひっかけ・深掘り段落を各節に追加、図を日本語版に対応)

2.3リポジトリ管理とセキュリティ

この節の要点

リポジトリの統制——アクセス権限大きなファイル(Git LFS)サブモジュールシークレットスキャンモノレポ vs マルチレポ——を理解します。健全で安全なリポジトリを維持します。

リポジトリは健全さと安全さを保ちます。権限、巨大ファイル、シークレット混入を管理し、構成(モノ/マルチ)を選びます。

2.3.1リポジトリの管理

リポジトリ管理を示した図。アクセス権限(読み取り/コントリビュート/管理を最小権限で付与)、大きなバイナリは Git LFS で管理してリポジトリ肥大化を防止、複数リポジトリの依存はサブモジュールやパッケージで管理、コミットにシークレット(APIキー等)が混入していないかをシークレットスキャン(プッシュ保護)で検出し、リポジトリ構成はモノレポ(単一・統合容易)かマルチレポ(独立・疎結合)から選ぶことを示した図。
リポジトリの管理とセキュリティ
  • アクセス権限:読み取り/コントリビュート/管理を最小権限で付与する。
  • Git LFS:大きなバイナリを管理し、リポジトリの肥大化を防ぐ
  • シークレットスキャン:コミットに混入したAPIキー等を検出(プッシュ保護で push 自体を阻止)。
  • モノレポ vs マルチレポ単一で統合容易独立で疎結合 かをチーム構造で選ぶ。
試験ポイント

「巨大バイナリ=Git LFS」「コミットの機密混入検出=シークレットスキャン/プッシュ保護」「権限は最小権限」「構成=モノレポ(統合容易)/マルチレポ(独立)」 は AZ-400 で頻出です。誤ってキーをコミットしてしまった場合は履歴からの削除+キーのローテーションが必要です。

AZ-400 のリポジトリ管理は「健全性・セキュリティ・構成の選択」を問います。アクセス権限は最小権限で、Azure DevOps なら読み取り/コントリビュート/管理、GitHub なら Read/Triage/Write/Maintain/Admin をチーム/個人に付与し、保護ブランチへの直接 push 権限は絞ります。巨大バイナリGit LFS(実体を別ストレージに置きポインタだけ追跡)で扱い、リポジトリの肥大化とクローン遅延を防ぎます。複数リポジトリの共有コードは、サブモジュール(特定コミットを参照、密結合で扱いがやや煩雑)かパッケージ化(Artifacts/npm/NuGet 等でバージョン配布、疎結合で推奨)で管理します。セキュリティの要はシークレットの混入防止で、シークレットスキャンプッシュ保護(検出時に push 自体を拒否)でコミット前/時点に阻止し、万一漏れた場合は履歴からの削除(git filter-repo/BFG)だけでなく必ずキーをローテーション(無効化)します——一度公開された秘密は履歴を消しても漏洩済みだからです。依存関係の脆弱性(Dependabot 等)やコードスキャン(SAST)もパイプラインに組み込みます。構成は、モノレポ(横断的な変更・統一 CI・コード共有が容易だが大規模化に工夫)とマルチレポ(チーム独立・権限分離・疎結合だが横断変更が手間)をチーム構造で選びます。設計の要は、最小権限・LFS・シークレット保護(スキャン+ローテーション)・構成選択を組み合わせ、リポジトリを安全かつスケーラブルに保つことです。

課題対策要点
権限管理最小権限のロール付与保護ブランチへの直接 push を制限
巨大バイナリGit LFSポインタ+別ストレージ・肥大化防止
機密の混入シークレットスキャン+プッシュ保護検出で push 拒否・漏洩時はローテーション必須
リポジトリ構成モノレポ / マルチレポ統合容易 / 独立・疎結合
補足

シナリオ:開発者が誤って本番 API キーをコミットし、リモートに push してしまった。最小限かつ正しい対応は?→
①即座にキーをローテーション(無効化して再発行)——これが最優先(一度 push された秘密は漏洩済み)。
履歴から削除(git filter-repo/BFG で当該ブロブを除去し強制 push)。
③再発防止にシークレットスキャンのプッシュ保護を有効化し、機密はコードに置かず Key Vault/変数グループ(シークレット)から参照する運用に切り替えます。

補足

FAQ:モノレポとマルチレポはどちらを選ぶ? 横断的なリファクタやコード共有が多く、統一した CI/依存管理をしたいならモノレポ(ただし大規模化時はスパースチェックアウトやビルドキャッシュの工夫が要る)。チームやサービスを独立して所有・リリースし、権限を分離したいならマルチレポ。組織やコンウェイの法則(チーム構造)に合わせて選び、共有コードはパッケージ化で疎結合に保つのが定石です。

注意

ひっかけ:漏洩したキーへの対応を「履歴から削除すれば十分」とするのは誤り——push された時点で漏洩済みのため、必ずローテーション(無効化)が必要です。また巨大バイナリ問題を「.gitignore に入れる」だけで解決しようとするのも不十分で、リポジトリで版管理したいバイナリは Git LFS を使います。シークレットの恒久対策は、混入検出(スキャン)+外部のシークレットストア参照です。

2.3.2この節のまとめ

  • 管理=最小権限+Git LFS(巨大ファイル)
  • 安全=シークレットスキャン/プッシュ保護/構成=モノ/マルチレポ

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. 大きなバイナリ(動画やビルド成果物)をリポジトリに含めつつ肥大化を防ぎたい。何を使いますか?

Q2. API キーやパスワードが誤ってコミットされるのを、push の段階で検出・阻止したい。何を使いますか?

Q3. 誤って API キーを過去のコミットに含めてしまった。最低限すべき対応はどれですか?

理解度を確認第2章「ソース管理の設計と実装」の問題を解く