TLDR
Checkovで、以下の2つで指定するファイル名が重複した場合、Checkovは 「チェックに含める」 動作を優先する、という話
- チェックするファイル名を指定するコマンド
- 指定のファイルをスキップするコマンド
準備
再現するために以下のセットアップを用意しました。
ファイルツリー
.
└── test/
├── .checkov.yaml
└── main.tf
.checkov.yaml
はCheckovのコンフィグファイルです。Checkovを実行するルートにこのファイル名で保存しておくと、オプションで明示的に指定をせずとも自動的に使ってくれます。
.checkov.yaml
skip-path:
- "main.tf"
実際にどういうことが起きるのか
まずは普通に -d
で全ファイルを指定します。
この場合、 skip-path
が考慮されるため、ここではひとつもチェックを行わずにチェックが終了します。
(venv) /test>checkov -d .
_ _
___| |__ ___ ___| | _______ __
/ __| '_ \ / _ \/ __| |/ / _ \ \ / /
| (__| | | | __/ (__| < (_) \ V /
\___|_| |_|\___|\___|_|\_\___/ \_/
By bridgecrew.io | version: 2.4.61
Update available 2.4.61 -> 3.2.286
Run pip3 install -U checkov to update
(venv) /test>
次に、 -f
コマンドでチェック対象ファイルとして skip-path
に指定したファイル名を指定します。
ここで、この記事先頭に記載したような、-f
が優先される現象が発生します。
(venv) \test>checkov -f main.tf
[ terraform framework ]: 100%|████████████████████|[1/1], Current File Scanned=main.tf
[ secrets framework ]: 100%|████████████████████|[1/1], Current File Scanned=main.tftf
_ _
___| |__ ___ ___| | _______ __
/ __| '_ \ / _ \/ __| |/ / _ \ \ / /
| (__| | | | __/ (__| < (_) \ V /
\___|_| |_|\___|\___|_|\_\___/ \_/
By bridgecrew.io | version: 2.4.61
Update available 2.4.61 -> 3.2.286
Run pip3 install -U checkov to update
terraform scan results:
Passed checks: 3, Failed checks: 5, Skipped checks: 0
...
ちなみに、コンフィグファイルの読み込みにしくじっているわけではないので、--config-file
で明示的に指定してもダメです。
(venv) \test>checkov -f main.tf --config-file .checkov.yaml
[ terraform framework ]: 100%|████████████████████|[1/1], Current File Scanned=main.tf
[ secrets framework ]: 100%|████████████████████|[1/1], Current File Scanned=main.tftf
_ _
___| |__ ___ ___| | _______ __
/ __| '_ \ / _ \/ __| |/ / _ \ \ / /
| (__| | | | __/ (__| < (_) \ V /
\___|_| |_|\___|\___|_|\_\___/ \_/
By bridgecrew.io | version: 2.4.61
Update available 2.4.61 -> 3.2.286
Run pip3 install -U checkov to update
terraform scan results:
Passed checks: 3, Failed checks: 5, Skipped checks: 0
...
(venv) \test>
実際にどういう場面で問題になるのか
「チェック対象とチェック非対称を同時に指定することある??」って聞かれる気もするので書いておきます。
例えば、pre-commitとCheckovを併用しているとこの現象が非常に厄介です。
pre-commitでは、コミットで編集された差分だけをチェックに渡す機能がありますが、そのときにcheckovの-f
オプションが使用されます。
このとき、skip-path
と-f
が重なってしまうことが起きるわけです。
回避方法としては、pre-commit側でファイル無視リストに追加することができます。
とはいえ、この方法だとcheckov側とpre-commit側のコンフィグを2つ管理しなければならなくなるのでやや厄介ですが。
現状、これ以外の回避方法がないのが悩みどころです。
何か良い方法があればコメントいただけると嬉しいです。