はじめに
Super-Linter が 6.0.0 から checkov をサポートしました
これにより、これまでより一層厳密なチェックが行われます
ただし、どうしてもチェックで無視してほしい場合というのが出てきます
この記事では GitHub Actions の Super-Linter で checkov に無視してもらう方法を紹介します
checkov とは
checkov はクラウドインフラの構成定義をチェックするツールです
IaC (Infrastracture as Code) ツールで使用するファイルを静的解析し、セキュリティリスクなどを検出します
以下のような IaC 用ファイルに対応しています
- Terraform
- CloudFormation
- AWS SAM
- Kubernetes
- Dockerfile
- Ansible
設定ファイルによる無視
checkov 自体の設定ファイルでルール単位、IaCツール単位の無視が可能です
skip-check:
- CKV_DOCKER_3
- CKV_DOCKER_2
skip-framework:
- dockerfile
- secrets
デフォルトの設定ファイル名は .checkov.yaml
ですが、実行時に --config-file
で指定可能です
リソース内のコメントによる無視
各ファイル内にコメントとして無視対象のルールを書くことで無視できます
resource "aws_s3_bucket" "foo-bucket" {
region = var.region
#checkov:skip=CKV_AWS_20:The bucket is a public static content host
bucket = local.bucket_name
force_destroy = true
acl = "public-read"
}
Super-Linter での checkov
毎回全てのファイルをチェックしていると時間も費用もかかるため、通常は変更箇所のみチェックするように GitHub Actions を設定します
---
...
- name: Lint Code Base
uses: github/super-linter/slim@v6
env:
DEFAULT_BRANCH: main
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
LINTER_RULES_PATH: ./
VALIDATE_ALL_CODEBASE: false
VALIDATE_ALL_CODEBASE: false
とすることで、 DEFAULT_BRANCH
に指定した main
との差分だけをチェックできます
ただし、 checkov に関しては複数ファイル間の参照まで検証する必要があるため、 必ず全量がチェックされます
プルリクエストに関係ない箇所までチェックするため厳密で良い反面、後に対応する予定の箇所などであっても毎回必ずエラーになってしまいます
Issue にも取り上げられていますが、今のところ対策は立てられていません
従って、エラーになるのを防ぐためには checkov に無視してもらう他ない状況です
checkov の無効化
VALIDATE_CHECKOV: false
とすることで checkov 自体を無効化することが可能です
ただし、無視すべきもの以外も全て無視することになるためオススメしません
checkov の設定ファイル
環境変数 CHECKOV_FILE_NAME
で checkov の設定ファイル名を指定可能です
デフォルトでは .checkov.yaml
になっています
LINTER_RULES_PATH: ./
の場合、プロジェクトのルートディレクトリー配下に .checkov.yaml
を作ることで設定を変更できます
.checkov.yaml
内に無視したいルールを書きましょう
まとめ
以下の方法で checkov のエラーを無視することができました
-
.checkov.yaml
ファイルにスキップ対象のルールを書く - 各ファイル内にコメントでスキップ対象のルールを書く
無視する方法を書きましたが、基本的には無視せず対処した方が良いです