0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Checkovでfとskip-pathを同時に使うとfが優先される話

Posted at

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つ管理しなければならなくなるのでやや厄介ですが。
現状、これ以外の回避方法がないのが悩みどころです。
何か良い方法があればコメントいただけると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?