CI/CDに脆弱性スキャンを組み込む
要件・前提
- CI/CDワークフローにおいて、OSおよびプログラミング言語のパッケージに対する脆弱性スキャンを組み込みたい。
- ワークフローでは
AWS CodePipelineが使用され、AWS CodeBuild、AWS CodeDeployのステップを含み、Amazon ECRリポジトリを使用している。 - 脆弱性が存在しないイメージのみがデプロイされるようにしたい。
設計方針
-
CodeBuildでビルドしたコンテナイメージをECRにプッシュ - ECRの拡張スキャンにより
AWS InspectorがOSとプログラミング言語のパッケージ両方の脆弱性を検出 - スキャン完了イベントを
EventBridgeで検知し、Lambdaをトリガー - LambdaがCRITICAL/HIGH脆弱性を評価し、
CodePipelineに承認結果を送信 - 脆弱性なしの場合のみApprovedとなり、
CodeDeployでデプロイ実行 - CRITICAL/HIGH脆弱性が検出された場合はRejectedとなりパイプラインを停止
Amazon ECRには基本スキャンと拡張スキャンのイメージスキャンオプションが存在する。
- 基本スキャン
- 無料でOSのパッケージ脆弱性評価ができる。
- 拡張スキャン
- Amazon Inspectorの利用料がかかるが、プログラミング言語のパッケージもスキャン脆弱性評価できる。
- CVE(共通脆弱性識別子)情報と詳細な修復ガイダンスが提供される
- CVSSスコアに基づいた重大度評価(CRITICAL、HIGH、MEDIUM、LOW)ができる