
ビルド時にTerraform、Kubernetes、CloudFormation、コンテナイメージ全体でクラウドの誤設定、脆弱性、シークレットを検出するインフラストラクチャ・アズ・コード向けの静的解析ツール。
Checkov は、Infrastructure as Code (IaC) の静的コード分析ツールであり、イメージやオープンソースパッケージ向けのソフトウェア構成分析 (SCA) ツールでもあります。
Terraform や Terraform plan、Cloudformation、AWS SAM、Kubernetes、Helm チャート、Kustomize、Dockerfile、Serverless、Bicep、OpenAPI、ARM テンプレート、OpenTofu を使用してプロビジョニングされたクラウドインフラストラクチャをスキャンし、グラフベースのスキャンによりセキュリティとコンプライアンスの設定ミスを検出します。
オープンソースパッケージやイメージを対象に、Common Vulnerabilities and Exposures (CVE) をスキャンする Software Composition Analysis (SCA) スキャン を実行します。
Checkov は、開発ライフサイクル全体でクラウドセキュリティを定義・合理化する、開発者ファーストのプラットフォーム Prisma Cloud Application Security にも活用されています。Prisma Cloud は、クラウドリソースや Infrastructure-as-Code ファイルにおける設定ミスの特定、修正、防止を行います。
CLI でのスキャン結果

Jenkins でのスケジュールスキャン結果

pip のインストールについては、公式ドキュメントに従ってください。```sh pip3 install checkov
一部の環境(例:Debian 12)では、Checkov を仮想環境にインストールする必要がある場合があります。```sh
# Create and activate a virtual environment
python3 -m venv /path/to/venv/checkov
cd /path/to/venv/checkov
source ./bin/activate
# Install Checkov with pip
pip install checkov
# Optional: Create a symlink for easy access
sudo ln -s /path/to/venv/checkov/bin/checkov /usr/local/bin/checkov
または Homebrew (macOS または Linux)```sh brew install checkov
### bash autocomplete を有効にする```sh
source <(register-python-argcomplete checkov)
pip3 でインストールした場合```sh pip3 install -U checkov
またはHomebrew```sh
brew upgrade checkov
checkov --directory /user/path/to/iac/code
または特定のファイル```sh
checkov --file /user/tf/example.tf
または```sh checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
または、JSON形式のterraform planファイル```sh
terraform init
terraform plan -out tf.plan
terraform show -json tf.plan > tf.json
checkov -f tf.json
注意: terraform show の出力ファイル tf.json は1行になります。
そのため、すべての検出結果は Checkov によって行番号 0 として報告されます。```sh
check: CKV_AWS_21: "Ensure all data stored in the S3 bucket have versioning enabled"
FAILED for resource: aws_s3_bucket.customer
File: /tf/tf.json:0-0
Guide: https://docs.prismacloud.io/en/enterprise-edition/policy-reference/aws-policies/s3-policies/s3-16-enable-versioning
If you have installed `jq` you can convert json file into multiple lines with the following command:```sh
terraform show -json tf.plan | jq '.' > tf.json
スキャン結果がもっとユーザーフレンドリーだと良いです。```sh checkov -f tf.json Check: CKV_AWS_21: "Ensure all data stored in the S3 bucket have versioning enabled" FAILED for resource: aws_s3_bucket.customer File: /tf/tf1.json:224-268 Guide: https://docs.prismacloud.io/en/enterprise-edition/policy-reference/aws-policies/s3-policies/s3-16-enable-versioning
225 | "values": {
226 | "acceleration_status": "",
227 | "acl": "private",
228 | "arn": "arn:aws:s3:::mybucket",
または、計画ファイルの生成に使用したhclファイルのリポジトリルートを`--repo-root-for-plan-enrichment`フラグで指定することで、出力に適切なファイルパス、行番号、リソースのコードブロックを追加できます。追加の利点として、チェックの抑制も適切に処理されます。```sh
checkov -f tf.json --repo-root-for-plan-enrichment /user/path/to/iac/code
Passed Checks: 1, Failed Checks: 1, Suppressed Checks: 0 Check: "Ensure all data stored in the S3 bucket is securely encrypted at rest" /main.tf: Passed for resource: aws_s3_bucket.template_bucket Check: "Ensure all data stored in the S3 bucket is securely encrypted at rest" /../regionStack/main.tf: Failed for resource: aws_s3_bucket.sls_deployment_bucket_name
Checkovを使い始めるには、[Getting Started](https://github.com/bridgecrewio/checkov/blob/main/docs/1.Welcome/Quick%20Start.md)のページをお読みください。
### Dockerの使用```sh
docker pull bridgecrew/checkov
docker run --tty --rm --volume /user/tf:/tf --workdir /tf bridgecrew/checkov --directory /tf
注意:Python 3.6(Ubuntu 18.04のデフォルトバージョン)を使用している場合、checkovは動作せず、ModuleNotFoundError: No module named 'dataclasses' というエラーメッセージが表示されて失敗します。この場合は、代わりにDockerバージョンを使用できます。
特定のケースでは、docker run --ttyの出力をファイルにリダイレクトすると(たとえば、Checkov JUnit出力をファイルに保存したい場合)、余分な制御文字が印刷されることがあります。これによりファイル解析が壊れる可能性があります。この問題が発生した場合は、--ttyフラグを削除してください。
--workdir /tfフラグはオプションで、作業ディレクトリをマウントされたボリュームに変更します。SARIF出力-o sarifを使用している場合、results.sarifファイルはマウントされたボリューム(上記の例では/user/tf)に出力されます。そのフラグを含めない場合、作業ディレクトリは"/"になります。
コマンドラインフラグを使用することで、指定した名前のチェックのみを実行(許可リスト)したり、リストされたものを除くすべてのチェックを実行(拒否リスト)したりできます。APIキーを介したプラットフォーム統合を使用している場合は、スキップおよび/または含める重大度のしきい値を指定することもできます。さらに、JSONファイルにはコメントを含めることができないため、JSONファイルのシークレットスキャンをスキップする正規表現パターンを渡すことができます。
これらのフラグがどのように連携するかについての詳細は、ドキュメントを参照してください。
指定された2つのチェックのみを実行許可する:```sh checkov --directory . --check CKV_AWS_20,CKV_AWS_57
指定されたチェック以外のすべてのチェックを実行します:```sh
checkov -d . --skip-check CKV_AWS_20
指定されたパターン以外のすべてのチェックを実行します:```sh checkov -d . --skip-check CKV_AWS*
MEDIUM 以上の重大度のすべてのチェックを実行します(API key が必要):```sh
checkov -d . --check MEDIUM --bc-api-key ...
MEDIUM 以上の重大度のすべてのチェックと、チェック CKV_123 (これは LOW 重大度のチェックと仮定します) を実行してください:```sh checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
MEDIUM 重要度以下のすべてのチェックをスキップ:```sh
checkov -d . --skip-check MEDIUM --bc-api-key ...
MEDIUM以下の深刻度のすべてのチェック、およびチェックCKV_789(これは高深刻度チェックと仮定)をスキップします:```sh checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
すべてのMEDIUM重大度以上のチェックを実行しますが、チェックCKV_123はスキップします(これはMEDIUM以上の重大度のチェックと仮定します):```sh
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
CKV_789のチェックを実行しますが、中程度の深刻度の場合はスキップします(--checkロジックは常に--skip-checkより先に適用されます)```sh checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
Kubernetes workloads の場合、allow/deny namespaces を使用することもできます。例えば、kube-system namespace
に対する結果を報告しないようにする:```sh
checkov -d . --skip-check kube-system
コンテナイメージのスキャンを実行します。最初にイメージをプルまたはビルドし、その後ハッシュ、ID、または name:tag: で参照します。```sh checkov --framework sca_image --docker-image sha256:1234example --dockerfile-path /Users/path/to/Dockerfile --repo-id ... --bc-api-key ...
checkov --docker-image :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
ショートカットとして、--docker-image の代わりに --image フラグを使用してコンテナイメージをスキャンすることもできます:```sh
checkov --image <image-name>:tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
リポジトリ内のパッケージに対してSCAスキャンを実行する:```sh checkov -d . --framework sca_package --bc-api-key ... --repo-id <repo_id(arbitrary)>
バッファリングを除去し、デバッグレベルのログを追加する環境変数でディレクトリのスキャンを実行します:```sh
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
または、複数回実行するための環境変数を有効にします。```sh export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
MyDirectory 内のすべてのファイルに対してシークレットスキャンを実行します。接尾辞が DontScan である json ファイルに対する CKV_SECRET_6 チェックをスキップします。```sh
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*DontScan.json$
MyDirectory内のすべてのファイルに対してシークレットスキャンを実行します。パスに"skip_test"を含むjsonファイルに対してCKV_SECRET_6チェックをスキップします。```sh checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*skip_test.*json$
スキャン結果から値をマスクするには、マスクエントリを含む設定ファイル(`--config-file`フラグを使用)を指定します。マスキングはリソースと値(カンマで区切られた複数の値)に適用できます。
例:```sh
mask:
- aws_instance:user_data
- azurerm_key_vault_secret:admin_password,user_passwords
上記の例では、以下の値がマスクされます:
他の静的解析ツールと同様に、分析範囲に制限があります。 例えば、リソースが手動で管理されている場合や、後続の構成管理ツールを使用している場合、 抑制は簡単なコードアノテーションとして挿入できます。
特定のTerraform定義ブロックまたはCloudFormationリソースに対するチェックをスキップするには、そのスコープ内で以下のコメントパターンを適用します:
checkov:skip=<check_id>:<suppression_comment>
<check_id> は、[利用可能なチェックスキャナー](docs/5.Policy Index/all.md) のいずれかです。<suppression_comment> は、出力に含める任意の抑制理由です。以下のコメントは、foo-bucket で識別されるリソースに対する CKV_AWS_20 チェックをスキップします。このチェックは、AWS S3バケットがプライベートかどうかをスキャンします。
この例では、バケットはパブリック読み取りアクセスで構成されています。抑制コメントを追加すると、チェックが失敗する代わりに適切なチェックがスキップされます。```hcl-terraform
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"
}
出力には、``SKIPPED`` チェック結果エントリが含まれるようになります:```bash
...
...
Check: "S3 Bucket has an ACL defined which allows public access."
SKIPPED for resource: aws_s3_bucket.foo-bucket
Suppress comment: The bucket is a public static content host
File: /example_skip_acl.tf:1-25
...
複数のチェックをスキップするには、それぞれを新しい行として追加します。``` #checkov:skip=CKV2_AWS_6 #checkov:skip=CKV_AWS_20:The bucket is a public static content host
Kubernetesマニフェストでのチェックを抑制するには、次の形式のアノテーションが使用されます:
`checkov.io/skip#: <check_id>=<suppression_comment>`
例:```bash
apiVersion: v1
kind: Pod
metadata:
name: mypod
annotations:
checkov.io/skip1: CKV_K8S_20=I don't care about Privilege Escalation :-O
checkov.io/skip2: CKV_K8S_14
checkov.io/skip3: CKV_K8S_11=I have not set CPU limits as I want BestEffort QoS
spec:
containers:
...
標準出力への詳細なログを有効にするには、環境変数 LOG_LEVEL を DEBUG に設定します。
デフォルトは LOG_LEVEL=WARNING です。
ファイルやディレクトリをスキップするには、--skip-path 引数を使用します。この引数は複数回指定できます。この引数は、現在の作業ディレクトリからの相対パスに対する正規表現を受け付けます。ディレクトリ全体や特定のファイルをスキップするために使用できます。
デフォルトでは、node_modules、.terraform、.serverless という名前のすべてのディレクトリに加えて、. で始まるすべてのファイルまたはディレクトリがスキップされます。
. で始まるディレクトリのスキップを解除するには、環境変数 CKV_IGNORE_HIDDEN_DIRECTORIES を上書きします export CKV_IGNORE_HIDDEN_DIRECTORIES=false
環境変数 CKV_IGNORED_DIRECTORIES を設定することで、スキップするディレクトリのデフォルトセットを上書きできます。
このリストを保持して追加したい場合は、これらの値を含める必要があることに注意してください。例えば、CKV_IGNORED_DIRECTORIES=mynewdir と設定すると、そのディレクトリのみがスキップされ、上記の他のディレクトリはスキップされません。この変数はレガシー機能です。--skip-file フラグを使用することをお勧めします。
コンソール出力はデフォルトでカラーです。モノクロ出力に切り替えるには、環境変数を設定します:
ANSI_COLORS_DISABLED
VS Code 内で Checkov を使用したい場合は、Prisma Cloud 拡張機能 を試してみてください。
Checkov は YAML 設定ファイルを使用して構成できます。デフォルトでは、checkov は以下の場所で優先順位に従って .checkov.yaml または .checkov.yml ファイルを探します:
--directory)注意: checkov 設定ファイルは、検証済みのIDで構成された信頼できるソースから読み込むことがベストプラクティスです。これにより、スキャンされるファイル、チェックID、読み込まれるカスタムチェックが意図通りになります。
ユーザーはコマンドラインで設定ファイルへのパスを渡すこともできます。その場合、他の設定ファイルは無視されます。例:```sh checkov --config-file path/to/config.yaml
ユーザーは `--create-config` コマンドを使用して設定ファイルを作成することもできます。このコマンドは現在のコマンドライン引数を取得し、指定されたパスに書き出します。例:```sh
checkov --compact --directory test-dir --docker-image sample-image --dockerfile-path Dockerfile --download-external-modules True --external-checks-dir sample-dir --quiet --repo-id prisma-cloud/sample-repo --skip-check CKV_DOCKER_3,CKV_DOCKER_2 --skip-framework dockerfile secrets --soft-fail --branch develop --check CKV_DOCKER_1 --create-config /Users/sample/config.yml
以下のような config.yaml ファイルを作成します:```yaml
branch: develop
check:
ユーザーは `--show-config` フラグを使用して、すべての引数と設定、およびそれらがどこから来たのか(すなわち、コマンドライン、設定ファイル、環境変数、またはデフォルト)を表示することもできます。例:```sh
checkov --show-config
表示されます:```sh Command Line Args: --show-config Environment Variables: BC_API_KEY: your-api-key Config File (/Users/sample/.checkov.yml): soft-fail: False branch: master skip-check: ['CKV_DOCKER_3', 'CKV_DOCKER_2'] Defaults: --output: cli --framework: ['all'] --download-external-modules:False --external-modules-download-path:.external_modules --evaluate-variables:True
## コントリビューション
コントリビューションを歓迎します!
まずは[コントリビューションガイドライン](https://github.com/bridgecrewio/checkov/blob/main/CONTRIBUTING.md)をご確認ください。その後、[good first issue](https://github.com/bridgecrewio/checkov/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)をご覧ください。
以下のリンクからGitpodを使ってワンクリックでブラウザ上で開発を始めることもできます:
[](https://gitpod.io/#https://github.com/bridgecrewio/checkov)
新しいチェック(ポリシー)のコントリビューションをお考えですか?新しいチェックの書き方は[こちら](https://github.com/bridgecrewio/checkov/blob/main/docs/6.Contribution/Contribution%20Overview.md)をご覧ください。
## 免責事項
`checkov` は、特定可能な顧客情報を保存、公開、または共有することは一切ありません。
Prisma Cloud の公開ガイドを照会するために、特定可能な顧客情報が使用されることはありません。
`checkov` は Prisma Cloud の API を使用して、結果に修復ガイドへのリンクを追加します。
この API 呼び出しをスキップするには、`--skip-download` フラグを使用してください。
## サポート
[Prisma Cloud](https://www.prismacloud.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov) は Checkov を構築・維持し、ポリシー・アズ・コードをシンプルかつアクセスしやすいものにしています。
クイックチュートリアルやサンプルについては、[ドキュメント](https://www.checkov.io/1.Welcome/Quick%20Start.html)から始めてください。
## Python バージョンサポート
当社は Python の公式サポートサイクルに従い、サポート対象の Python バージョンに対して自動テストを実施しています。
現在サポートしているのは Python 3.9 から 3.13 までです(両端を含む)。
なお、Python 3.8 は 2024年10月に EOL(サポート終了)に達し、Python 3.9 は 2025年10月に EOL に達する予定です。
EOL に達していない Python バージョンで問題が発生した場合は、Issue を開いてください。