LESSON 40分

ストーリー

佐藤CTO
ゼロトラストの設計ができた。次は開発プロセスにセキュリティを組み込む番だ

佐藤CTOがCI/CDパイプラインの図を見せました。

佐藤CTO
今のパイプラインにはセキュリティチェックが入っていない。リリース直前にセキュリティレビューをやっているが、手遅れになることが多い
あなた
Shift Left — セキュリティを開発の早い段階に移すんですね
佐藤CTO
その通り。DevSecOpsは開発速度を落とさずにセキュリティを自動化する方法だ。パイプラインに組み込めば、人手に頼らず継続的にセキュリティを担保できる

DevSecOpsとは

DevOpsからDevSecOpsへ

graph LR
    subgraph DevOps
        D1["Dev"] <--> O1["Ops"]
    end
    subgraph DevSecOps
        D2["Dev"] <--> S2["Sec"] <--> O2["Ops"]
    end
観点従来のセキュリティDevSecOps
タイミングリリース前のセキュリティレビュー開発ライフサイクル全体に組み込み
責任セキュリティチームのみ全員がセキュリティに責任を持つ
手法手動レビュー、年1回のペネトレーションテスト自動スキャン、継続的テスト
フィードバック遅い(数週間〜数ヶ月)即座(数分〜数時間)
コスト修正コストが高い(後工程)修正コストが低い(早期発見)

Shift Left セキュリティ

xychart-beta
    title "発見タイミングと修正コスト(Shift Left)"
    x-axis ["要件", "設計", "コード", "ビルド", "テスト", "本番"]
    y-axis "修正コスト(倍)" 0 --> 110
    bar [1, 5, 10, 30, 60, 100]

DevSecOpsパイプライン

セキュリティゲートの配置

graph LR
    C["Code"] --> B["Build"] --> T["Test"] --> R["Release"] --> D["Deploy"] --> M["Monitor"]

    C --> CS["Secret Scan<br/>Lint<br/>Pre-commit"]
    B --> BS["SAST<br/>SCA<br/>Build Verify"]
    T --> TS["DAST<br/>API Test<br/>Pen Test"]
    R --> RS["Image Scan<br/>Sign<br/>SBOM"]
    D --> DS["Policy Check<br/>IAC Scan"]
    M --> MS["SIEM<br/>WAF<br/>EDR<br/>Audit"]

    style CS fill:#fff3e0,stroke:#e65100
    style BS fill:#fff3e0,stroke:#e65100
    style TS fill:#fff3e0,stroke:#e65100
    style RS fill:#fff3e0,stroke:#e65100
    style DS fill:#fff3e0,stroke:#e65100
    style MS fill:#fff3e0,stroke:#e65100

各フェーズのセキュリティツール

フェーズセキュリティ活動ツール例
Codeシークレットスキャン、LintingGitLeaks, Semgrep, ESLint Security
BuildSAST、SCA、ライセンスチェックSonarQube, Snyk, FOSSA
TestDAST、APIテスト、ファジングOWASP ZAP, Burp Suite, AFL
Releaseコンテナスキャン、SBOM生成、署名Trivy, Syft, Cosign
DeployIaCスキャン、ポリシーチェックtfsec, Checkov, OPA
MonitorSIEM、WAF、異常検知Datadog, Falco, CloudTrail

GitHub Actions でのセキュリティパイプライン

# .github/workflows/security-pipeline.yml
name: Security Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  # Phase 1: コード品質とシークレットスキャン
  code-security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 全履歴を取得(シークレットスキャン用)

      - name: Secret Scanning (GitLeaks)
        uses: gitleaks/gitleaks-action@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Semgrep SAST
        uses: semgrep/semgrep-action@v1
        with:
          config: >-
            p/security-audit
            p/owasp-top-ten
            p/typescript

  # Phase 2: 依存関係の脆弱性チェック
  dependency-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Snyk SCA
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          args: --severity-threshold=high

      - name: License Compliance
        run: |
          npx license-checker --failOn "GPL-3.0;AGPL-3.0"

  # Phase 3: コンテナセキュリティ
  container-security:
    runs-on: ubuntu-latest
    needs: [code-security, dependency-check]
    steps:
      - uses: actions/checkout@v4

      - name: Build Docker Image
        run: docker build -t app:${{ github.sha }} .

      - name: Trivy Container Scan
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: app:${{ github.sha }}
          format: sarif
          output: trivy-results.sarif
          severity: CRITICAL,HIGH
          exit-code: 1

      - name: Generate SBOM
        uses: anchore/sbom-action@v0
        with:
          image: app:${{ github.sha }}
          format: spdx-json
          output-file: sbom.spdx.json

  # Phase 4: IaCセキュリティ
  iac-security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Checkov IaC Scan
        uses: bridgecrewio/checkov-action@master
        with:
          directory: ./infrastructure
          framework: terraform,cloudformation
          soft_fail: false

  # セキュリティゲート: 全チェック通過後のみマージ許可
  security-gate:
    runs-on: ubuntu-latest
    needs: [code-security, dependency-check, container-security, iac-security]
    steps:
      - name: Security Gate Passed
        run: echo "All security checks passed"

DevSecOps成熟度モデル

レベル名称特徴
Level 0Ad Hocセキュリティチェックなし、手動対応のみ
Level 1Reactive脆弱性スキャンを定期的に実施、手動トリアージ
Level 2ProactiveCI/CDにSAST/SCA統合、自動ブロック
Level 3Managed全フェーズにセキュリティゲート、メトリクス管理
Level 4OptimizedAI/ML異常検知、自動修正、継続的改善

成熟度評価チェック

// DevSecOps成熟度の自己評価
interface DevSecOpsMaturity {
  codePhase: {
    preCommitHooks: boolean;      // Level 1+
    secretScanning: boolean;       // Level 1+
    sastIntegrated: boolean;       // Level 2+
    customRules: boolean;          // Level 3+
    autoFix: boolean;              // Level 4
  };
  buildPhase: {
    scaEnabled: boolean;           // Level 1+
    licenseCheck: boolean;         // Level 2+
    breakBuildOnHigh: boolean;     // Level 2+
    sbomGeneration: boolean;       // Level 3+
  };
  deployPhase: {
    containerScanning: boolean;    // Level 2+
    imageSigning: boolean;         // Level 3+
    iacScanning: boolean;          // Level 2+
    policyAsCode: boolean;         // Level 3+
  };
  monitorPhase: {
    siemIntegrated: boolean;       // Level 2+
    runtimeProtection: boolean;    // Level 3+
    anomalyDetection: boolean;     // Level 4
    autoRemediation: boolean;      // Level 4
  };
  culture: {
    securityChampions: boolean;    // Level 2+
    securityTraining: boolean;     // Level 1+
    sharedResponsibility: boolean; // Level 3+
    gamification: boolean;         // Level 4
  };
}

セキュリティメトリクス

メトリクス説明目標値
MTTR(Mean Time to Remediate)脆弱性発見から修正までの平均時間Critical: 24h, High: 7d
脆弱性密度1000行あたりの脆弱性数< 1.0
シークレット漏洩率PRに含まれるシークレットの割合0%
セキュリティテストカバレッジセキュリティテストが実行されるパイプラインの割合> 95%
False Positive率誤検知の割合< 10%
パイプライン通過率セキュリティゲートを通過するビルドの割合> 90%

まとめ

ポイント内容
DevSecOps開発ライフサイクル全体にセキュリティを組み込む
Shift Leftセキュリティを早い段階で実施し、修正コストを削減
セキュリティゲート各フェーズにセキュリティチェックポイントを配置
自動化SAST/SCA/DAST/コンテナスキャンをCI/CDに統合
成熟度モデルAd Hoc → Reactive → Proactive → Managed → Optimized

チェックリスト

  • DevSecOpsの概念とShift Leftの重要性を説明できる
  • CI/CDパイプラインの各フェーズに適切なセキュリティツールを配置できる
  • GitHub Actionsでセキュリティパイプラインを構築できる
  • DevSecOps成熟度モデルで自組織を評価できる
  • セキュリティメトリクスを定義し、改善目標を設定できる

次のステップへ

次は「SAST・SCA・シークレットスキャン」を学びます。コードレベルのセキュリティスキャンツールの具体的な導入方法と運用を身につけましょう。


推定読了時間: 40分