TrivyをGitHub Actionsで動かす際のTips
ワークフローの作り方の紹介記事は多かったが運用時の話が少なかったので、気になった点を整理してみようと思う。
環境
- VCS:GitHub
- Workflows:GitHub Actions
- Trivy:0.19.2
- trivy-action: 0.0.20
前提
運用ケースは以下の通りと想定する。
- ワークフロー構築
- 影響調査
- 対応方法決定
- 修正・解消
内容
ワークフロー構築
aquasecurity/trivy-action#usageにある通り。
OSパッケージ
Supported OSに一覧がある。注意点としては、 Detection of unfixed vulnerabilities
がNoであれば修正済みの脆弱性のみを検出する点。
言語パッケージ
Language-specific Packagesにあるように、各種ファイルが存在している必要がある。
Vulnerability typesに指定し、ファイルが存在しなくても警告は出ないので注意。
脆弱性管理
検知された脆弱性をGitHub上でどのように管理するか。
- 手動
- ワークフロー結果から起票
- 自動
- GitHub Issue
- GitHub Code Scanning
GitHub Issue
GitHub ActionでIssueを自動作成する方法。
- lazy-actions/gitrivyは、Trivyで検知した結果でGitHub Issueを作成・更新してくれるアクション。
GitHub Code Scanning
SARIF
形式をサポートしている GitHub Code Scanning
を利用する方法。ワークフローの書き方は (using-trivy-with-github-code-scanning) から参照できる。
ただし注意点として、 コードスキャンニングについて にあるようにプライベートリポジトリでは GitHub Advanced Security
のライセンスが必要であり、コスト面の心配がある。
影響調査
検知された脆弱性について、どのように影響調査をするか。基本的にはTrivyが脆弱性と判断したデータソースのURLを出力してくれるので、それを読むことになる。(各ライブラリのデータソースはこちらに一覧化されている。)
osライブラリについてはCVE、NVDも関係してくるが、これは別途まとめる。
対応方法決定
検知された脆弱性が現在使っている技術に影響があるのか、その脆弱性が修正済みかによってその後の対応方法が異なる。以下、簡易な表を作成してみた。
影響/脆弱性 | fixed | unfixed |
---|---|---|
あり | バージョンアップ | ベンダー・ライブラリ対応待ち |
なし | バージョンアップ、または無視 | 無視 |
- 対象脆弱性の無視は、
.trivyignore
で管理できる。詳細はBy Vulnerability IDsから参照。 - 修正されていない脆弱性のフィルタリングは、
--ignore-unfixed
オプションを有効にすることで実現できる。
まとめ
運用ケースを仮定して、各ステップ毎に気になる点を整理した。今後使う中で気づきがあったら更新していこうと思う。
Discussion