1. 概要
- Checkovとは何か(Bridgecrewが開発する静的解析ツール)
- Checkovの特徴とtfsecとの違い
- インストールと基本的な使い方
- GitHub ActionsへのCI統合
- よく使うチェックと抑制方法
CheckovはBridgecrew(Palo Alto Networks)が開発するIaC静的解析ツールです。Terraform / CloudFormation / Kubernetes / Helmなど多様なIaCをサポートしています。
2. Checkovのインストールと基本的な使い方
# pipでインストール
pip install checkov
# バージョン確認
checkov --version
# カレントディレクトリのTerraformをスキャン
checkov -d .
# 特定ディレクトリ
checkov -d ./environments/production
# JSON出力
checkov -d . -o json > checkov_results.json
# 重要度でフィルタ
checkov -d . --check CKV_AWS_8 # 特定チェックのみ
checkov -d . --skip-check CKV_AWS_8 # 特定チェックをスキップ
3. スキャン対象コード例
terraform {
required_version = ">= 1.9"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
variable "environment" {
description = "環境名"
type = string
default = "dev"
}
data "aws_ami" "amazon_linux_2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-x86_64"]
}
}
# ✅ CheckovがPASSするコード
resource "aws_instance" "web" {
ami = data.aws_ami.amazon_linux_2023.id
instance_type = "t3.micro"
# CKV_AWS_135: EC2に詳細モニタリング(任意)
# CKV_AWS_126: 終了保護(任意)
root_block_device {
volume_size = 20
volume_type = "gp3"
encrypted = true # CKV_AWS_8: EBS暗号化 → PASS
}
metadata_options {
http_tokens = "required" # CKV_AWS_79: IMDSv2必須 → PASS
}
tags = {
Name = "${var.environment}-web"
Environment = var.environment
ManagedBy = "terraform"
}
}
4. Checkovのよくチェック項目
| チェックID | 対象 | 内容 |
|---|---|---|
| CKV_AWS_8 | aws_instance | EBSのencrypted=trueか |
| CKV_AWS_79 | aws_instance | IMDSv2が必須(http_tokens=required)か |
| CKV_AWS_18 | aws_s3_bucket | S3のアクセスログ有効化 |
| CKV_AWS_19 | aws_s3_bucket | S3のサーバーサイド暗号化 |
| CKV_AWS_16 | aws_db_instance | RDSのstorage_encrypted=true |
| CKV_AWS_23 | aws_security_group | SGがSSH(22)/RDP(3389)を全開放していないか |
| CKV2_AWS_62 | aws_s3_bucket | S3のEvent Notificationsの設定 |
5. GitHub ActionsへのCI統合
# .github/workflows/checkov.yml
name: Checkov Security Scan
on:
pull_request:
branches: [main]
permissions:
contents: read
security-events: write
jobs:
checkov:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Checkov
uses: bridgecrewio/checkov-action@master
with:
directory: .
framework: terraform
output_format: sarif
output_file_path: checkov_results.sarif
soft_fail: true # 段階的導入時はtrueにしてパイプラインを止めない
- name: Upload SARIF results
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: checkov_results.sarif
SARIFフォーマットで出力するとGitHub Security Alertsと連携できます。
6. チェックの抑制
# コード内でチェックを抑制
#checkov:skip=CKV_AWS_135: 詳細モニタリングは開発環境では不要
resource "aws_instance" "web" {
ami = data.aws_ami.amazon_linux_2023.id
instance_type = "t3.micro"
# ...
}
.checkov.yaml設定ファイルでプロジェクト全体のスキップを設定することもできます。
7. tfsecとの違い
| 比較軸 | tfsec | Checkov |
|---|---|---|
| 対応IaC | Terraform専用 | Terraform / CloudFormation / k8s等 |
| チェック数 | 約400+ | 約1,000+ |
| SARIF出力 | ✅ | ✅ |
| GitHub Actions連携 | ✅ | ✅ |
| カスタムポリシー | Python / Rego | Python / Rego |
| 管理元 | Aqua Security | Palo Alto(Bridgecrew) |
8. 関連記事
- tfsec — TerraformコードのIaCセキュリティスキャン — tfsecとの比較
- OPA/Conftestによるポリシー管理 — Regoベースのカスタムポリシー
- Terraform CloudのRun Tasks — サードパーティスキャン連携 — TF Cloud統合
- GitHub ActionsでTerraformを実行する方法 — CI統合
- Terraform CI/CDのシークレット管理 — セキュリティ全般
- sensitive変数 — 機密値のマスクとstateへの記録 — 機密値の扱い
9. まとめ
- CheckovはTerraformを含む多様なIaCを静的解析するツール。tfsecよりチェック数が多い
- よく検出される問題: EBS暗号化・IMDSv2・S3暗号化・RDS暗号化・SG全開放
- SARIFフォーマットでGitHub Security Alertsと連携できる
- tfsecかCheckovか迷ったら: Terraform専用ならtfsec、多様なIaCを横断するならCheckov
対象バージョン: Checkov >= 3.0 / Terraform >= 1.9 公式ドキュメント: https://www.checkov.io/