DevSecOps
開発・セキュリティ・運用を統合し、セキュリティをパイプラインに組み込むアプローチ
セキュリティDevOps
DevSecOps とは
DevSecOps は、開発 (Dev)・セキュリティ (Sec)・運用 (Ops) を統合し、セキュリティをソフトウェア開発ライフサイクルの全段階に組み込むアプローチである。「セキュリティはリリース前のゲートではなく、全員の責任」という考え方。
従来 vs DevSecOps
| 観点 | 従来 | DevSecOps |
|---|---|---|
| セキュリティの時期 | リリース前にレビュー | 開発の全段階 |
| 担当 | セキュリティチーム | 全員 |
| 発見のタイミング | 遅い (手戻りが大きい) | 早い (修正コストが低い) |
| 自動化 | 手動レビュー | CI/CD に組み込み |
パイプラインへの組み込み
コード → ビルド → テスト → デプロイ → 運用
↓ ↓ ↓ ↓ ↓
SAST SCA DAST IaC検査 監視
(静的解析) (依存脆弱性) (動的解析) (設定検査) (異常検知)
| ツール | 段階 | 検出対象 |
|---|---|---|
| SAST (Semgrep, CodeQL) | コード | SQLi, XSS, ハードコード秘密鍵 |
| SCA (Dependabot, Snyk) | ビルド | 依存パッケージの脆弱性 |
| DAST (OWASP ZAP) | テスト | 実行中のアプリの脆弱性 |
| IaC スキャン (cfn-lint, Checkov) | デプロイ | 設定ミス、過剰な権限 |
GitHub Actions での例
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# 依存パッケージの脆弱性チェック
- run: npm audit --audit-level=high
# シークレットの検出
- uses: trufflesecurity/trufflehog@main
# IaC のセキュリティチェック
- run: cfn-lint template.yaml
AWS でのセキュリティ自動化
| サービス | 用途 |
|---|---|
| IAM Access Analyzer | 過剰な権限の検出 |
| GuardDuty | 脅威の検出 |
| Security Hub | セキュリティ状態の一元管理 |
| Inspector | EC2/Lambda の脆弱性スキャン |
| Config | リソース設定の監査 |
最小権限の原則
# ❌ 過剰な権限
Policies:
- Statement:
- Effect: Allow
Action: "*"
Resource: "*"
# ✅ 最小権限
Policies:
- Statement:
- Effect: Allow
Action: [dynamodb:GetItem, dynamodb:PutItem]
Resource: !GetAtt Table.Arn
より深く学ぶには関連書籍が役立つ。