はじめに
今回はTrivyをterraformのCIツールとして導入します。Trivyはセキュリティスキャンツールです。
前回の記事でtfsecを紹介させていただきましたが、そのリポジトリ内ではこのような表記があります。
Going forward we want to encourage the tfsec community to transition over to Trivy. Moving to Trivy gives you the same excellent Terraform scanning engine, with some extra benefits:
翻訳
tfsecはTrivyへの移行を推奨しています。
Trivyを使用するとtfsecと同じエンジンを使用できる他、追加機能が備わっています。
tfsecがtrivyを推しているなら...
今回はそのTrivyをGithubActionsに導入しましょう。
想定読者
- Terraformにセキュリティツールを導入したい方
- セキュリティツールに興味がある方
- TerraformにCIツールを何を入れれば良いか検討している方
前回の記事
ツールの説明
Trivyの読み方
- 読み方は「トリビー」です。
Trivyとは?
- 静的解析ツールでセキュリティ上の脆弱性を検出するOSS
- IaCの誤設定や機密情報の流出を防ぐ
Terraformのコード
Trivyを導入方法
「aquasecurity/trivy-action@master」というアクションを使用します。
.github/workflows/trivy.yml
今回セキュリティスキャンするファイルは./envs/dev/main.tf
です。
scan-ref
を使って設定できます。
name: Terraform Trivy Scan
on:
push:
branches:
- feature/*
- hotfix/*
pull_request:
branches:
- feature/*
- hotfix/*
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Trivy
uses: aquasecurity/trivy-action@master
with:
scan-type: 'config'
scan-ref: ./envs/dev/main.tf # セキュリティスキャンする設定ファイル
trivyignores: ./envs/dev/.trivyignore # ignoreする設定ファイル
exit-code: '1'
Trivyで設定できる項目(一部抜粋)
設定値 | 値 | 説明 |
---|---|---|
scan-type | string | スキャンのタイプ |
input | string | tarを入力 |
image-ref | string | イメージを指定 |
scan-ref | string | 実行するディレクトリ |
format | string | 出力フォーマット |
template | string | 出力テンプレート |
output | string | 結果をファイルに出力するディレクトリ先 |
exit-code | string | 脆弱性を検知したときのエラーコード |
ignore-unfixed | boolean | パッチが適用されていない脆弱性を無視 |
vuln-type | string | スキャン対象の脆弱性のタイプ |
severity | string | 危険度の対象レベル |
cache-dir | string | キャッシュディレクトリ |
timeout | string | タイムアウト時間 |
hide-progress | string | プログレスバーを非表示 |
list-all-pkgs | string | 全ての危険レベルを出力 |
scanners | string | 検出するセキュリティ問題のカンマ区切りのリスト |
trivyignores | string | .trivyignoreの相対パス |
trivy-config | string | trivy.yml設定のパス |
trivyignores
では、Trivyで無視する設定を追加できます。
# セキュリティグループでIPアドレスを全て許可している
AVD-AWS-0107
# IPv4を自動割り当てに設定している
AVD-AWS-0164
# VPCフローログを有効にしていない
AVD-AWS-0178
動作確認
開発途中で脆弱性を無視したい場合は白枠の部分を、.trivyignore
に追加しましょう。
.trivyignore
にコードを追加するとエラーをとして吐き出されなくなります。
おわりに
今回はセキュリティスキャンツールのTrivyを導入しました。
記事を書く前まではTrivyのことをコンテナイメージの脆弱性ツール
という認識だったのですが、
セキュリティスキャンもできることを知らなかったです。
Trivyを導入して開発進めていく際に不具合など発見しましたら、
記事にて共有させていただきます。
最後まで読んでいただきましてありがとうございました。
今回作成したgithubのリポジトリ : https://github.com/hikobend/terraform-qiita
参考文献
- Trivyとは?読み方、使い方、インストール、Aqua Security Trivyの読み方
- aquasecurity/trivy TrivyのGithubリポジトリ
- aquasecurity/trivy-action TrivyをGithubActionで動かすGithubリポジトリ
- Trivy の Misconfiguration Scanning で Terraform の設定ミスを検出しよう TrivyをGithubでの作動方法