ストーリー
ミッション概要
| 項目 | 内容 |
|---|---|
| 演習タイトル | セキュリティパイプラインの設計と構築 |
| 想定時間 | 90分 |
| 成果物 | セキュリティパイプライン設計書(ツール選定 + 設定 + ゲートポリシー) |
| 対象システム | PayConnect(決済連携マイクロサービス) |
前提条件
技術スタック:
- TypeScript / NestJS
- PostgreSQL(RDS)
- Docker / ECS Fargate
- GitHub Actions(CI/CD)
- Terraform(IaC)
コンプライアンス要件:
- PCI-DSS Level 2
- SOC 2 Type II
チーム構成:
- 開発者: 10名
- セキュリティエンジニア: 2名
- DevOpsエンジニア: 3名
予算制約:
- セキュリティツールの年間予算: 500万円
- 可能な限りOSSを活用する
Mission 1: ツール選定と比較
要件
SAST、DAST、SCA、シークレットスキャンそれぞれについて、ツールを選定してください。
- 各カテゴリで2つ以上のツールを比較する
- 選定したツールの選定理由を3つ以上挙げる
- コスト見積もり(年間)を算出する
- 合計が予算500万円以内に収まることを確認する
解答例
SAST ツール比較
| 観点 | Semgrep | SonarQube | CodeQL |
|---|---|---|---|
| ライセンス | OSS (Community) | OSS (Community) | 無料(GitHub) |
| TypeScript対応 | 良好 | 良好 | 良好 |
| カスタムルール | 容易(YAML) | 中程度(Java) | 中程度(QL言語) |
| CI/CD統合 | 容易 | 中程度(サーバー要) | GitHubのみ |
| 速度 | 高速(数秒〜数分) | 中速(数分〜) | 中速(数分〜) |
| PCI-DSS対応ルール | あり | あり | あり |
| 年間コスト | 0円(Community) | 0円(Community) | 0円 |
選定: Semgrep
選定理由:
- カスタムルールの記述がYAMLベースで容易であり、PCI-DSS固有のルールを迅速に追加できる
- 実行速度が高速でPRへのフィードバック時間を短縮できる
- GitHub Actionsとの統合が標準で提供されている
- OSSでコスト0円、予算を他のツールに配分できる
SCA ツール比較
| 観点 | Trivy | Snyk | Dependabot |
|---|---|---|---|
| ライセンス | OSS | Freemium | 無料(GitHub) |
| コンテナスキャン | あり | あり | なし |
| SBOM生成 | あり | あり | なし |
| 自動修正PR | なし | あり | あり |
| IaCスキャン | あり | あり | なし |
| 年間コスト | 0円 | 約200万円(Team) | 0円 |
選定: Trivy + Dependabot(併用)
選定理由:
- Trivyはコンテナスキャン + SBOM生成 + IaCスキャンの統合が可能
- DependabotはGitHub標準で自動修正PRを生成できる
- 両者の併用でコスト0円で網羅的なSCAを実現できる
全体コスト見積もり
| カテゴリ | ツール | 年間コスト |
|---|---|---|
| SAST | Semgrep Community | 0円 |
| DAST | OWASP ZAP | 0円 |
| SCA | Trivy + Dependabot | 0円 |
| シークレットスキャン | Gitleaks | 0円 |
| コンプライアンスチェック | OPA + Checkov | 0円 |
| 結果統合 | DefectDojo (OSS) | 0円 |
| インフラコスト | EC2 for DefectDojo | 約50万円 |
| 合計 | 約50万円 |
残りの予算450万円は、四半期ごとの外部ペネトレーションテスト(約300万円/年)と、セキュリティ研修(約150万円/年)に配分を推奨。
Mission 2: パイプライン設計
要件
GitHub Actionsを使った統合セキュリティパイプラインを設計してください。
- フェーズ別のチェック配置を図示する(プリコミット〜本番デプロイ)
- 各フェーズの実行時間の見積もりを算出する
- 並列実行と直列実行の判断根拠を説明する
- PR作成から結果フィードバックまでの合計時間が10分以内になるようにする
解答例
パイプライン構成図
PR作成 ──→ Phase 1(並列実行、計3分)
├── SAST(Semgrep): 約1分
├── SCA(Trivy fs): 約1分
├── シークレットスキャン(Gitleaks): 約30秒
└── ライセンスチェック: 約1分
──→ Phase 2(Phase 1通過後、計5分)
├── Docker Build: 約3分
└── コンテナスキャン(Trivy image): 約2分
└── SBOM生成(Syft): 約30秒(並列)
PR合計: 約8分(10分以内達成)
main マージ ──→ Phase 3(計20分)
├── ステージングデプロイ: 約5分
└── DAST(ZAP API Scan): 約15分
──→ Phase 4(Phase 3通過後、計2分)
└── コンプライアンスチェック(OPA): 約2分
──→ Phase 5(手動承認)
└── 本番デプロイ承認 → デプロイ
並列/直列の判断根拠
| 実行順序 | 対象 | 根拠 |
|---|---|---|
| 並列 | SAST, SCA, Secret Scan, License Check | 相互に依存せず、同時実行で時間短縮 |
| 直列 | Phase 1 → Phase 2 | Phase 2はDockerビルドが必要。Phase 1で問題があればビルドは無駄 |
| 直列 | Phase 2 → Phase 3 | Phase 3はステージング環境へのデプロイが必要 |
| 並列 | Trivy Image Scan + SBOM生成 | 同一イメージに対する独立した処理 |
Mission 3: ゲートポリシーとエスカレーション
要件
セキュリティパイプラインのゲートポリシーを設計してください。
- 各フェーズのブロック条件を定義する
- 例外処理フローを設計する(緊急リリース時の対応含む)
- エスカレーションルールを定義する
解答例
ゲートポリシー
| フェーズ | ブロック条件 | 例外申請先 |
|---|---|---|
| PR マージ | SAST Critical > 0, SCA Critical > 0, シークレット検出 > 0 | セキュリティリード |
| ビルド | コンテナ Critical > 0 | セキュリティリード |
| ステージングデプロイ | DAST Critical > 0 | セキュリティマネージャー |
| 本番デプロイ | 未解決 Critical > 0, コンプライアンス違反 > 0 | VPoE |
例外処理フロー
脆弱性検出 ──→ 開発者が確認
│
├── 真の脆弱性 ──→ 修正して再スキャン
│
├── 誤検知 ──→ サプレスコメント + レビュー
│ └── セキュリティリードの承認必須
│
└── 修正に時間が必要 ──→ 例外申請
├── JIRAチケット作成(修正期限付き)
├── リスク受容の承認(Critical: VPoE、High: マネージャー)
└── security-exceptions.yaml に記録(有効期限90日以内)
緊急リリース時の対応
| 条件 | 対応 |
|---|---|
| セキュリティパッチの緊急適用 | SAST + Secret Scanのみ実施、DAST/SCAは事後実施 |
| 重大障害の修正 | VPoEの承認でDASTをスキップ可(ただし24時間以内にDASTを実施) |
| ゼロデイ脆弱性への対応 | セキュリティチームの判断でパイプラインの一部をバイパス可 |
エスカレーションルール
| 条件 | エスカレーション先 | 期限 |
|---|---|---|
| Critical脆弱性が24時間未修正 | セキュリティマネージャー | 24時間 |
| Critical脆弱性が48時間未修正 | VPoE | 48時間 |
| 例外が3回以上連続申請 | セキュリティマネージャー | 都度 |
| コンプライアンス違反が検出 | セキュリティマネージャー + コンプライアンス担当 | 即時 |
達成度チェック
| 観点 | 達成基準 |
|---|---|
| ツール選定 | 各カテゴリで2つ以上のツールを比較し、選定理由が明確 |
| コスト | 年間予算500万円以内に収まっている |
| パイプライン設計 | フェーズ別のチェック配置が適切で、PR時のフィードバック時間が10分以内 |
| 並列/直列 | 実行順序の判断根拠が論理的 |
| ゲートポリシー | ブロック条件が明確で、例外処理フローが定義されている |
| エスカレーション | 未修正脆弱性のエスカレーションルールが定義されている |
推定所要時間: 90分