技術Tips
DevSecOps入門:CI/CDパイプラインにセキュリティを組み込む方法
開発の早い段階で脆弱性を検出し修正する「シフトレフト」を実現。DevSecOpsの基本概念とツール連携を解説。
佐藤 裕介
フルスタックエンジニアとして15年以上の経験を持ち、スタートアップから大企業まで幅広いプロジェクトに携わってきました。
DevSecOps Security CI/CD DevOps Automation
はじめに
DevSecOpsは、開発(Dev)、セキュリティ(Sec)、運用(Ops)を統合し、開発ライフサイクル全体を通じてセキュリティを確保するための文化であり、プラクティスです。その中心的な考え方が「シフトレフト」、つまりセキュリティ対策を開発プロセスのより早い段階(左側)に移行させることです。この記事では、CI/CDパイプラインにセキュリティを組み込むことでDevSecOpsを実現する具体的な方法を紹介します。
CI/CDパイプラインに組み込むべきセキュリティテスト
1. 静的アプリケーションセキュリティテスト (SAST)
- 目的: ソースコードを直接解析し、コーディング規約違反や脆弱なコードパターンを検出します。
- タイミング: コミット時やプルリクエスト作成時。
- ツール例: Snyk Code, Semgrep, SonarQube
2. ソフトウェアコンポジション解析 (SCA)
- 目的: アプリケーションが利用しているオープンソースライブラリの依存関係をスキャンし、既知の脆弱性(CVE)を持つライブラリを特定します。
- タイミング: ライブラリ追加時、ビルド時。
- ツール例: Dependabot, Snyk Open Source, Trivy
3. 動的アプリケーションセキュリティテスト (DAST)
- 目的: 実行中のアプリケーションに対して、外部から実際の攻撃をシミュレートし、脆弱性を検出します。
- タイミング: ステージング環境へのデプロイ後。
- ツール例: OWASP ZAP, Burp Suite
4. コンテナイメージスキャン
- 目的: Dockerイメージをスキャンし、OSパッケージやライブラリに含まれる脆弱性を検出します。
- タイミング: コンテナイメージのビルド後、レジストリへのプッシュ前。
- ツール例: Trivy, Grype, Snyk Container
実践的なワークフロー例 (GitHub Actions)
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Trivy vulnerability scanner in IaC mode
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
この例では、コードのチェックアウト後にTrivyでファイルシステム全体をスキャンし、SnykでNode.jsの依存関係をスキャンしています。
まとめ
DevSecOpsの実現には、ツールの導入だけでなく、開発者、運用担当者、セキュリティ担当者が協力し合う文化の醸成が不可欠です。CI/CDパイプラインへのセキュリティテストの統合は、その文化を支えるための技術的な第一歩です。まずはSCAやコンテナスキャンといった導入しやすいものから始め、徐々にセキュリティ活動をシフトレフトさせていきましょう。
著者について
佐藤 裕介
フルスタックエンジニアとして15年以上の経験を持ち、スタートアップから大企業まで幅広いプロジェクトに携わってきました。