LESSON 30分

ストーリー

田中VPoE
セキュリティ要件を定義した。次はこれを業界標準や法規制にマッピングする。コンプライアンスの話だ
あなた
PCI-DSSやSOC 2のことですか?重要なのはわかりますが、正直、開発者にとっては遠い世界に感じます
田中VPoE
その感覚が問題なんだ。コンプライアンス対応を「別の仕事」として捉えるから、監査のたびに大騒ぎになる。セキュリティ要件をコンプライアンス基準にマッピングしておけば、日々の開発がそのまま監査対応になる
あなた
つまり、コンプライアンスもパイプラインに組み込むということですか
田中VPoE
そうだ。Compliance as Code。コンプライアンス要件をコードで定義し、自動的に準拠状況をチェックする。手動の監査レポートは過去の遺物にする

主要なセキュリティフレームワークと規制

フレームワーク一覧

フレームワーク/規制対象必須/任意概要
SOC 2SaaS企業全般事実上必須セキュリティ、可用性、処理の完全性、機密性、プライバシーの5原則
ISO 27001全業種任意(ただし取引要件になることが多い)情報セキュリティマネジメントシステム(ISMS)
PCI-DSSクレジットカード取扱事業者必須カード情報の保護に関する12の要件
GDPREU市民のデータを扱う事業者必須個人データの保護と処理に関する規則
個人情報保護法日本国内の事業者必須個人情報の適正な取得・利用・管理
NIST CSF米国政府関連、広く参照任意(ベストプラクティス)サイバーセキュリティフレームワーク(Identify, Protect, Detect, Respond, Recover)
CIS Benchmarksインフラ運用任意(ベストプラクティス)OS、クラウド、アプリケーションのセキュリティ設定基準

SOC 2のTrust Services Criteria

SOC 2 の 5 つのカテゴリ:

CC: Common Criteria(共通基準)
├── CC1: 統制環境
├── CC2: コミュニケーションと情報
├── CC3: リスクアセスメント
├── CC4: モニタリング活動
├── CC5: 統制活動
├── CC6: 論理的・物理的アクセス制御
├── CC7: システム運用
├── CC8: 変更管理
└── CC9: リスク軽減

A: Availability(可用性)
P: Processing Integrity(処理の完全性)
C: Confidentiality(機密性)
PI: Privacy(プライバシー)

セキュリティ要件からコンプライアンスへのマッピング

マッピング表の例

要件ID要件内容SOC 2ISO 27001PCI-DSSNIST CSF
SEC-AUTH-001JWT認証必須化CC6.1A.9.4.28.3PR.AC-1
SEC-AUTH-002MFA導入CC6.1A.9.4.28.3.1PR.AC-7
SEC-DATA-001TLS 1.2以上CC6.7A.10.1.14.1PR.DS-2
SEC-DATA-002保存データ暗号化CC6.7A.10.1.13.4PR.DS-1
SEC-LOG-001認証イベント記録CC7.2A.12.4.110.2DE.AE-3
SEC-LOG-003ログ改ざん防止CC7.2A.12.4.210.5PR.DS-6
SEC-INPUT-002パラメータ化クエリCC7.1A.14.2.56.5.1PR.IP-2

マッピングの効果

コンプライアンスマッピングなし:
  監査時に「PCI-DSS 8.3を満たしていますか?」
  → セキュリティチームが慌てて証拠を収集
  → 数週間のドキュメント作業
  → 「多分満たしていると思います」

コンプライアンスマッピングあり:
  監査時に「PCI-DSS 8.3を満たしていますか?」
  → SEC-AUTH-001, SEC-AUTH-002 が対応
  → 自動テストの実行結果を提示
  → 「はい、この自動テストで継続的に検証しています」

Compliance as Codeの実践

Open Policy Agent(OPA)によるポリシー定義

# ポリシー例: TLS 1.2以上を強制する(Rego言語)
package compliance.tls

default allow = false

allow {
    input.tls_version >= 1.2
}

deny[msg] {
    input.tls_version < 1.2
    msg := sprintf(
        "TLS version %v is below minimum 1.2 (SEC-DATA-001, PCI-DSS 4.1)",
        [input.tls_version]
    )
}

Terraformでのコンプライアンスチェック

# tfsec / checkov によるIaCスキャンの例
# S3バケットの暗号化チェック(SEC-DATA-002, PCI-DSS 3.4)

resource "aws_s3_bucket_server_side_encryption_configuration" "example" {
  bucket = aws_s3_bucket.example.id

  rule {
    apply_server_side_encryption_by_default {
      sse_algorithm     = "aws:kms"      # AES-256相当
      kms_master_key_id = aws_kms_key.example.arn
    }
    bucket_key_enabled = true
  }
}

# checkov チェック:
# CKV_AWS_19: "Ensure all data stored in the S3 bucket is securely encrypted"
# → PASSED: SEC-DATA-002, PCI-DSS 3.4 に準拠

CI/CDパイプラインでの自動チェック

# GitHub Actions でのコンプライアンスチェック例
name: Compliance Check

on: [pull_request]

jobs:
  compliance:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: IaC Security Scan (SEC-DATA-*, PCI-DSS 3/4)
        uses: bridgecrewio/checkov-action@v12
        with:
          directory: ./terraform
          framework: terraform

      - name: Container Security (CIS Benchmark)
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'config'
          scan-ref: './docker'

      - name: Policy Check (OPA/Rego)
        run: |
          opa eval --data policies/ --input config.json \
            "data.compliance.allow"

コンプライアンスの継続的モニタリング

コンプライアンスダッシュボードの設計

メトリクス計測方法目標値SOC 2関連
コンプライアンス準拠率自動チェック通過率95%以上CC4.1
ポリシー違反件数OPAデニー数/週減少トレンドCC5.2
暗号化カバレッジ暗号化済みリソース/全リソース100%CC6.7
アクセスレビュー実施率レビュー済みアカウント/全アカウント100%(四半期ごと)CC6.2
パッチ適用率適用済みパッチ/公開パッチ95%以上(30日以内)CC7.1

「コンプライアンスは年1回の監査のためにあるのではない。毎日のダッシュボードで確認できる状態にしておくことが、真のComplianceだ」 — 田中VPoE


まとめ

ポイント内容
主要フレームワークSOC 2、ISO 27001、PCI-DSS、GDPR、NIST CSFを把握する
マッピングセキュリティ要件を各規制の条項にマッピングし、トレーサビリティを確保
Compliance as CodeOPA/Rego、checkov等でポリシーをコード化し、自動チェック
継続的モニタリングダッシュボードで準拠状況をリアルタイムに可視化する

チェックリスト

  • SOC 2、PCI-DSS、ISO 27001の概要を説明できる
  • セキュリティ要件をコンプライアンス基準にマッピングできる
  • Compliance as Codeの概念とツールを理解した
  • コンプライアンスの継続的モニタリングの設計方針を理解した

次のステップへ

次は演習です。実際の組織シナリオをもとに、セキュリティ要件定義書を作成しましょう。


推定読了時間: 30分