Checkov 는 IaC(Infrastructure as Code)용 정적 코드 분석 도구이자 이미지 및 오픈 소스 패키지용 SCA(소프트웨어 구성 분석) 도구입니다.
Terraform, Terraform 계획, Cloudformation, AWS SAM, Kubernetes, Helm 차트, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM 템플릿 또는 OpenTofu를 사용하여 프로비저닝된 클라우드 인프라를 검사하고 그래프 기반 검사를 사용하여 보안 및 규정 준수 구성 오류를 감지합니다.
CVE(Common Vulnerability and Exposures)에 대한 오픈 소스 패키지 및 이미지를 검사하는 SCA(Software Composition Analysis) 검사를 수행합니다.
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
아니면 홈브류로
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
은 한 줄입니다. 이러한 이유로 모든 결과는 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 파일의 repo 루트를 지정하여 리소스의 적절한 파일 경로, 줄 번호 및 코드 블록으로 출력을 강화합니다. (에스). 추가 이점은 수표 억제가 그에 따라 처리된다는 것입니다.
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 파일 비밀 검사를 건너뛸 수 있습니다.
이러한 플래그가 함께 작동하는 방법에 대한 자세한 내용은 문서를 참조하세요.
지정된 두 가지 검사만 실행하도록 허용합니다.
checkov --directory . --check CKV_AWS_20,CKV_AWS_57
지정된 항목을 제외한 모든 검사를 실행합니다.
checkov -d . --skip-check CKV_AWS_20
지정된 패턴이 있는 검사를 제외한 모든 검사를 실행합니다.
checkov -d . --skip-check CKV_AWS *
심각도가 중간 이상인 모든 검사를 실행합니다(API 키 필요).
checkov -d . --check MEDIUM --bc-api-key ...
심각도가 MEDIUM 이상인 모든 검사를 실행하고 CKV_123도 확인합니다(심각도가 낮은 검사라고 가정).
checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
심각도가 중간 이하인 모든 검사를 건너뜁니다.
checkov -d . --skip-check MEDIUM --bc-api-key ...
심각도가 중간 이하인 모든 검사를 건너뛰고 CKV_789를 확인합니다(심각도가 높은 검사라고 가정).
checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
심각도가 중간 이상인 모든 검사를 실행하고 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) 중 하나입니다.<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:
...
stdout에 대한 자세한 로깅을 위해 환경 변수 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
)주의 : 검사된 파일, ID 확인 및 로드된 사용자 정의 검사가 원하는 대로 되도록 checkov 구성 파일을 확인된 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를 통해 브라우저에서 원클릭 개발을 통해 이 작업을 시작할 수도 있습니다.
새로운 수표를 기부하고 싶으신가요? 여기에서 새 수표(AKA 정책)를 작성하는 방법을 알아보세요.
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 버전에서 문제가 발생하는 경우 문제를 열어주세요.