ストーリー
田
田中VPoE
セキュリティ要件を定義した。次はこれを業界標準や法規制にマッピングする。コンプライアンスの話だ
あなた
PCI-DSSやSOC 2のことですか?重要なのはわかりますが、正直、開発者にとっては遠い世界に感じます
あ
田
田中VPoE
その感覚が問題なんだ。コンプライアンス対応を「別の仕事」として捉えるから、監査のたびに大騒ぎになる。セキュリティ要件をコンプライアンス基準にマッピングしておけば、日々の開発がそのまま監査対応になる
あなた
つまり、コンプライアンスもパイプラインに組み込むということですか
あ
田
田中VPoE
そうだ。Compliance as Code。コンプライアンス要件をコードで定義し、自動的に準拠状況をチェックする。手動の監査レポートは過去の遺物にする
主要なセキュリティフレームワークと規制
フレームワーク一覧
| フレームワーク/規制 | 対象 | 必須/任意 | 概要 |
|---|
| SOC 2 | SaaS企業全般 | 事実上必須 | セキュリティ、可用性、処理の完全性、機密性、プライバシーの5原則 |
| ISO 27001 | 全業種 | 任意(ただし取引要件になることが多い) | 情報セキュリティマネジメントシステム(ISMS) |
| PCI-DSS | クレジットカード取扱事業者 | 必須 | カード情報の保護に関する12の要件 |
| GDPR | EU市民のデータを扱う事業者 | 必須 | 個人データの保護と処理に関する規則 |
| 個人情報保護法 | 日本国内の事業者 | 必須 | 個人情報の適正な取得・利用・管理 |
| 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 2 | ISO 27001 | PCI-DSS | NIST CSF |
|---|
| SEC-AUTH-001 | JWT認証必須化 | CC6.1 | A.9.4.2 | 8.3 | PR.AC-1 |
| SEC-AUTH-002 | MFA導入 | CC6.1 | A.9.4.2 | 8.3.1 | PR.AC-7 |
| SEC-DATA-001 | TLS 1.2以上 | CC6.7 | A.10.1.1 | 4.1 | PR.DS-2 |
| SEC-DATA-002 | 保存データ暗号化 | CC6.7 | A.10.1.1 | 3.4 | PR.DS-1 |
| SEC-LOG-001 | 認証イベント記録 | CC7.2 | A.12.4.1 | 10.2 | DE.AE-3 |
| SEC-LOG-003 | ログ改ざん防止 | CC7.2 | A.12.4.2 | 10.5 | PR.DS-6 |
| SEC-INPUT-002 | パラメータ化クエリ | CC7.1 | A.14.2.5 | 6.5.1 | PR.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]
)
}
# 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 Code | OPA/Rego、checkov等でポリシーをコード化し、自動チェック |
| 継続的モニタリング | ダッシュボードで準拠状況をリアルタイムに可視化する |
チェックリスト
次のステップへ
次は演習です。実際の組織シナリオをもとに、セキュリティ要件定義書を作成しましょう。
推定読了時間: 30分