EXERCISE 90分

ストーリー

田中VPoE
セキュリティの理論は十分だ。ここからは、組織の標準パイプラインにセキュリティを統合する具体的な設計を行ってもらう
田中VPoE
ただし、現実の組織にはさまざまな制約がある。コストの制約、チームの抵抗、ツールの互換性問題…。完璧な設計よりも、実行可能な設計を目指してくれ
あなた
わかりました。理想と現実のバランスを取りながら設計します

ミッション概要

ミッションテーマ目安時間
Mission 1セキュリティツールの選定15分
Mission 2セキュリティゲート設計20分
Mission 3コンプライアンスポリシー設計20分
Mission 4サプライチェーンセキュリティ設計15分
Mission 5導入ロードマップ策定10分
Mission 6セキュリティ設計書統合10分

前提条件

組織の状況:
- SOC2 Type II認証済み(年次監査あり)
- 一部プロダクトはPCI DSS対象
- GitHub Actionsを標準CI/CDツールとして採用
- 年間セキュリティツール予算: 500万円
- セキュリティ専任チーム: 3名(20チームをサポート)

現状の課題:
- 5チーム中2チームはセキュリティスキャンが未実施
- シークレット管理が統一されていない
- SBOMの生成は行われていない
- 監査対応は手動で、年次監査の準備に毎回2ヶ月かかる

矛盾する要求(ノイズ):
- CISOは「全チームに即座にSASTを導入したい」
- 開発チームは「パイプラインが遅くなるのは困る」
- 経営層は「セキュリティインシデントのリスクをゼロにしたい」

Mission 1: セキュリティツールの選定(15分)

要件

上記の予算制約と組織規模を考慮し、SAST、SCA、DAST、コンテナスキャン、シークレットスキャンの各カテゴリでツールを選定してください。コスト見積もりを含めること。

解答例
カテゴリツール選定理由年間コスト
SASTSemgrep (OSS) + CodeQLGitHub統合、OSS無料0円
SCASnyk (Team)自動修正PR、幅広い言語対応200万円
DASTOWASP ZAP (OSS)OSS無料、十分な機能0円
コンテナスキャンTrivy (OSS)高速、幅広いレジストリ対応0円
シークレットスキャンGitLeaks (OSS) + GitHub Secret Scanning多層防御0円
SBOM生成Syft + Grype (OSS)Anchore製、信頼性高い0円
合計約200万円

トレードオフの判断:

  • 予算500万のうち200万で収まるため、残りは人員教育やインシデント対応に充当可能
  • OSSツール中心だが、SCAのみSnyk有償版を採用(自動修正PRの生産性向上効果が大きい)
  • 「リスクゼロ」は不可能。リスクを許容可能なレベルに低減することが現実的な目標

Mission 2: セキュリティゲート設計(20分)

要件

パイプラインの各ポイントでのセキュリティゲートを設計してください。各ゲートの通過条件、ブロック条件、例外処理を含めること。

解答例

Gate 1: PR時

チェックツールブロック条件例外
SASTSemgrep + CodeQLHigh以上の検出既知の偽陽性(抑制リスト管理)
SCASnykCritical/High CVEセキュリティチーム承認で一時的に例外
シークレットスキャンGitLeaks検出ありなし(絶対ブロック)
ライセンスチェックSnykコピーレフト検出法務確認済みの場合

Gate 2: ビルド後

チェックツールブロック条件例外
コンテナスキャンTrivyCritical CVE修正パッチ未提供の場合はリスク受容
SBOM生成Syft生成失敗なし
イメージ署名Cosign署名失敗なし

Gate 3: 本番デプロイ前

チェックツールブロック条件例外
DASTOWASP ZAPHigh以上の検出ホットフィックス時は事後対応
承認GitHub Environment2名未満の承認なし
ポリシーチェックOPAポリシー違反なし

Mission 3: コンプライアンスポリシー設計(20分)

要件

SOC2とPCI DSSの要件をOPAポリシーとして設計してください。主要な3つのポリシーをRegoで記述すること。

解答例
# policy/soc2.rego
package soc2

# CC6.1: 変更には2名以上の承認が必要
deny[msg] {
  input.environment == "production"
  count(input.approvers) < 2
  msg := "SOC2 CC6.1: 本番変更には2名以上の承認が必要"
}

# CC8.1: すべてのデプロイに監査ログが必要
deny[msg] {
  not input.audit_log_enabled
  msg := "SOC2 CC8.1: 監査ログが有効化されていません"
}

# PCI DSS 6.3: Critical脆弱性のあるアーティファクトのデプロイを禁止
deny[msg] {
  input.pci_scope == true
  vuln := input.vulnerabilities[_]
  vuln.severity == "CRITICAL"
  msg := sprintf("PCI DSS 6.3: Critical脆弱性 %s が未修正", [vuln.id])
}

Mission 4: サプライチェーンセキュリティ設計(15分)

要件

組織のSLSA目標レベルと達成までのロードマップを設計してください。

解答例
フェーズ期間SLSA目標施策
Phase 1即時SLSA 1ビルドプロセスの文書化、ワークフロー定義のバージョン管理
Phase 23ヶ月SLSA 2GitHub Actionsでの来歴証明生成、SBOM自動生成
Phase 36ヶ月SLSA 3ビルド環境の隔離(セルフホストランナー)、来歴証明の署名
Phase 412ヶ月SLSA 4(重要サービスのみ)Hermetic Build、完全な再現性

追加施策:

  • GitHub Actionsのサードパーティアクションを監査し、許可リストを作成
  • すべてのアクションをSHA固定で参照する組織ポリシーを導入
  • Dependabotによる依存関係の自動更新を全リポジトリで有効化

Mission 5: 導入ロードマップ策定(10分)

要件

CISOの「即座に全チーム導入」と開発チームの「パイプラインを遅くしたくない」の要求をバランスさせる導入ロードマップを策定してください。

解答例
施策影響
1-2シークレットスキャン導入(ブロック)パイプライン追加時間: <30秒
3-4SAST導入(警告のみ、ブロックなし)パイプライン追加時間: ~2分
5-6SCA導入(Critical のみブロック)パイプライン追加時間: ~1分
7-8SAST のHigh以上をブロック化開発チームへの影響: 既存の偽陽性を事前に処理
9-12コンテナスキャン + SBOM生成パイプライン追加時間: ~2分
13-16DAST導入(ステージング)ステージングデプロイ後に追加: ~5分

CISOへの説明: 「全チームに段階的に導入します。最初の2週間でシークレットスキャンを全面展開し、最もリスクの高い攻撃を即座に防止します」

開発チームへの説明: 「パイプラインの追加時間は合計5分程度です。並列実行により既存のフローへの影響を最小化します」


Mission 6: セキュリティ設計書統合(10分)

要件

Mission 1-5の成果を統合した「セキュリティパイプライン設計書」の概要を作成してください。

解答例
# セキュリティパイプライン設計書 概要

## 1. ツール構成
- OSS中心 + Snyk SCA(年間200万円)
- 6カテゴリ7ツールで網羅的カバレッジ

## 2. セキュリティゲート
- 3ポイント(PR、ビルド後、本番前)
- 段階的なブロックポリシー

## 3. コンプライアンス
- SOC2 / PCI DSS対応をOPAポリシーで自動化
- 監査対応を手動2ヶ月→自動1週間に短縮目標

## 4. サプライチェーン
- SLSA Level 2を3ヶ月で達成
- SBOM全アーティファクトで生成

## 5. 導入計画
- 16週間で段階的に導入
- 開発者体験への影響を最小化

達成度チェック

ミッションテーマ完了
Mission 1セキュリティツール選定
Mission 2セキュリティゲート設計
Mission 3コンプライアンスポリシー
Mission 4サプライチェーンセキュリティ
Mission 5導入ロードマップ
Mission 6設計書統合

まとめ

ポイント内容
ツール選定コスト制約の中でOSS中心に構成
ゲート設計段階的なブロックで開発者体験を維持
コンプライアンスPolicy as Codeで監査対応を自動化
導入戦略16週間の段階的導入で全チーム展開

チェックリスト

  • 予算制約の中でセキュリティツールを選定できた
  • 矛盾する要求のバランスを取る導入計画を策定できた
  • コンプライアンス要件をコードとして定義できた
  • サプライチェーンセキュリティのロードマップを策定できた

次のステップへ

次はチェックポイントクイズです。セキュリティとコンプライアンスの統合について理解度を確認しましょう。


推定読了時間: 90分