Checkov は、 Infrastructur as Code (IaC) 用の静的コード分析ツールであり、イメージおよびオープン ソース パッケージ用のソフトウェア構成分析 (SCA) ツールでもあります。
Terraform、Terraform プラン、Cloudformation、AWS SAM、Kubernetes、Helm チャート、KusTOMize、Dockerfile、Serverless、Bicep、OpenAPI、ARM Templates、または OpenTofu を使用してプロビジョニングされたクラウド インフラストラクチャをスキャンし、グラフベースのスキャンを使用してセキュリティとコンプライアンスの構成ミスを検出します。
これは、共通脆弱性および露出 (CVE) のオープンソース パッケージおよびイメージのスキャンであるソフトウェア構成分析 (SCA) スキャンを実行します。
Checkov は、開発ライフサイクル全体を通じてクラウド セキュリティを体系化し、合理化する開発者優先のプラットフォームであるPrisma Cloud Application Securityも強化しています。 Prisma Cloud は、クラウド リソースとコードとしてのインフラストラクチャ ファイルの構成ミスを特定し、修正し、防止します。
CLI でのスキャン結果
Jenkins でのスケジュール スキャンの結果
pip をインストールするには、公式ドキュメントに従ってください
pip3 install checkov
または Homebrew (macOS または Linux) を使用
brew install checkov
source <( register-python-argcomplete checkov )
pip3 で checkov をインストールした場合
pip3 install -U checkov
またはHomebrewを使用して
brew upgrade checkov
checkov --directory /user/path/to/iac/code
または特定のファイル
checkov --file /user/tf/example.tf
または
checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
または、JSON 形式の Terraform プラン ファイル
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 で報告されます。
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
jq
をインストールしている場合は、次のコマンドを使用して json ファイルを複数行に変換できます。
terraform show -json tf.plan | jq ' . ' > tf.json
スキャン結果は非常に使いやすいものになります。
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 " ,
あるいは、 --repo-root-for-plan-enrichment
フラグを使用して、プラン ファイルの生成に使用される hcl ファイルのリポジトリ ルートを指定し、リソースの適切なファイル パス、行番号、コードブロックで出力を強化します。 (s)。追加の利点は、チェックの抑制がそれに応じて処理されることです。
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 の使用を開始してください。
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 つのチェックのみの実行を許可します。
checkov --directory . --check CKV_AWS_20,CKV_AWS_57
指定されたチェックを除くすべてのチェックを実行します。
checkov -d . --skip-check CKV_AWS_20
指定されたパターンのチェックを除くすべてのチェックを実行します。
checkov -d . --skip-check CKV_AWS *
重大度が MEDIUM 以上であるすべてのチェックを実行します (API キーが必要です)。
checkov -d . --check MEDIUM --bc-api-key ...
重大度 MEDIUM 以上のすべてのチェックを実行し、CKV_123 もチェックします (これは LOW 重大度チェックであると仮定します)。
checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
重大度が MEDIUM 以下のすべてのチェックをスキップします。
checkov -d . --skip-check MEDIUM --bc-api-key ...
重大度が MEDIUM 以下であるすべてのチェックをスキップし、CKV_789 をチェックします (これは高重大度のチェックであると仮定します)。
checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
MEDIUM 重大度以上のすべてのチェックを実行しますが、チェック CKV_123 はスキップします (これは中程度以上の重大度チェックであると仮定します)。
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
チェック CKV_789 を実行しますが、重大度が中程度の場合はスキップします (--check ロジックは常に --skip-check の前に適用されます)。
checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
Kubernetes ワークロードの場合、許可/拒否名前空間を使用することもできます。たとえば、kube-system 名前空間の結果はレポートしません。
checkov -d . --skip-check kube-system
コンテナー イメージのスキャンを実行します。まずイメージをプルまたはビルドしてから、ハッシュ、ID、または名前:タグでそれを参照します。
checkov --framework sca_image --docker-image sha256:1234example --dockerfile-path /Users/path/to/Dockerfile --repo-id ... --bc-api-key ...
checkov --docker-image < image-name > :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
--docker-image の代わりに --image フラグを使用してコンテナ イメージをスキャンして短縮することもできます。
checkov --image < image-name > :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
リポジトリ内のパッケージの SCA スキャンを実行します。
checkov -d . --framework sca_package --bc-api-key ... --repo-id < repo_id(arbitrary) >
環境変数を使用してディレクトリのスキャンを実行し、バッファリングを削除し、デバッグ レベルのログを追加します。
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
または、複数の実行に対して環境変数を有効にします
export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG
checkov -d .
MyDirectory 内のすべてのファイルに対してシークレット スキャンを実行します。サフィックスが DontScan である json ファイルの CKV_SECRET_6 チェックをスキップします。
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * DontScan.json$
MyDirectory 内のすべてのファイルに対してシークレット スキャンを実行します。パスに「skip_test」を含む json ファイルの CKV_SECRET_6 チェックをスキップする
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * skip_test. * json$
マスク エントリを含む構成ファイル (--config-file フラグを使用) を指定することで、スキャン結果から値をマスクできます。マスキングはリソースと値 (またはカンマで区切られた複数の値) に適用できます。例:
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) の 1 つです。<suppression_comment>
出力に含めるオプションの抑制理由です。 次のコメントは、 foo-bucket
で識別されるリソースのCKV_AWS_20
チェックをスキップします。スキャンでは、AWS S3 バケットがプライベートかどうかがチェックされます。この例では、バケットはパブリック読み取りアクセスを使用して構成されています。抑制コメントを追加すると、チェックが失敗するのではなく、適切なチェックがスキップされます。
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
チェック結果エントリが含まれるようになります。
...
...
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>
例えば:
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 によって構成された信頼できるソースからロードすることがベスト プラクティスです。
ユーザーは、コマンド ラインを介して構成ファイルへのパスを渡すこともできます。この場合、他の設定ファイルは無視されます。例えば:
checkov --config-file path/to/config.yaml
ユーザーは、 --create-config
コマンドを使用して構成ファイルを作成することもできます。このコマンドは、現在のコマンド ライン引数を取得し、指定されたパスに書き込みます。例えば:
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
ファイルが作成されます。
branch : develop
check :
- CKV_DOCKER_1
compact : true
directory :
- test-dir
docker-image : sample-image
dockerfile-path : Dockerfile
download-external-modules : true
evaluate-variables : true
external-checks-dir :
- sample-dir
external-modules-download-path : .external_modules
framework :
- all
output : cli
quiet : true
repo-id : prisma-cloud/sample-repo
skip-check :
- CKV_DOCKER_3
- CKV_DOCKER_2
skip-framework :
- dockerfile
- secrets
soft-fail : true
ユーザーは--show-config
フラグを使用して、すべての引数と設定、およびそれらがどこから来たのか (コマンドライン、構成ファイル、環境変数、デフォルトなど) を表示することもできます。例えば:
checkov --show-config
表示されます:
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
貢献は大歓迎です!
まずは投稿ガイドラインを確認してください。その後、良い創刊号を見てください。
次のリンクにある Gitpod を介して、ブラウザでワンクリックで開発を開始することもできます。
新しい小切手に貢献したいですか?新しい小切手 (別名ポリシー) を作成する方法については、こちらをご覧ください。
checkov
特定可能な顧客情報を保存、公開、または他者と共有することはありません。
Prisma Cloud の一般公開されているガイドのクエリには、個人を特定できる顧客情報は使用されません。 checkov
Prisma Cloud の API を使用して、修復ガイドへのリンクを含む結果を充実させます。この API 呼び出しをスキップするには、フラグ--skip-download
を使用します。
Prisma Cloud は、Checkov を構築および保守して、コードとしてのポリシーをシンプルかつアクセスしやすいものにします。
まずはドキュメントから簡単なチュートリアルと例をご覧ください。
当社は Python の公式サポート サイクルに従い、サポートされているバージョンの Python に対して自動テストを使用します。これは、現在 Python 3.9 ~ 3.12 をサポートしていることを意味します。 Python 3.8 は 2024 年 10 月に EOL に達し、Python 3.9 は 2025 年 10 月に EOL に達する予定であることに注意してください。私たちは 3.13 のサポートを調査中です。 EOL 以外の Python バージョンで問題が発生した場合は、問題を開いてください。