Free tool
Checkov output, as a report people can read.
Drop the JSON from checkov -o json, tfsec, Trivy config or KICS. Get every failed check grouped by policy, with the resource, file, line and code block — then copy a Markdown table for the pull request or send the whole report to the person who has to sign off on the infrastructure.
5 failed checks (2 high, 2 error, 1 medium) · 4 policies · 41 passed · 1 skipped
Publishes this report on Comma: one URL for the scan that opens without CI access, restricted to named people or your company’s email domain if you like, comments pinned to the exact finding, and the next scan kept as a revision you can diff. Free, no card.
How the file is read
- Checkov prints one object per framework —
check_type,results.failed_checks,passed_checks,skipped_checksand asummary— or an array of them when several frameworks ran. Every block is read; each failure keeps itsresource,file_line_range,code_blockandguideline. - Severity is kept when the scanner sets it. Open-source Checkov leaves it
null, so those show as Error until you scan with a Prisma Cloud key. - tfsec results use
long_idas the policy,status0 as failed, 1 as passed and 2 as ignored;impactandresolutionbecome the description. - Trivy misconfigurations come from
Results[].Misconfigurationswith the cause’s resource, start line and code lines;MisconfSummarysupplies the pass count. - KICS queries list one row per file occurrence, with
actual_valueas the message andexpected_valuebeneath it.
Getting the JSON
| Scanner | Writes JSON with |
|---|---|
| Checkov | checkov -d . -o json > checkov.json |
| Checkov (plan) | checkov -f tfplan.json --framework terraform_plan -o json |
| Checkov (CI) | checkov -d . -o cli -o json --output-file-path console,. |
| tfsec | tfsec . --format json --out tfsec.json |
| Trivy | trivy config --format json --output trivy.json . |
| KICS | kics scan -p . --report-formats json -o out/ |
Add --soft-fail (Checkov, tfsec) or --exit-code 0 (Trivy) so the CI step still writes the file when checks fail.
When the scan has to leave CI
Checkov’s CLI output is a wall of Check: CKV_AWS_… blocks in a job log; its JSON is something only a pipeline reads. The people who decide whether a public bucket or an open SSH port is acceptable — the platform lead, the SOC 2 auditor, the client who asked for an infrastructure review — need one document they can read end to end and comment on policy by policy. Published to Comma, that is one link, and an agent can publish it from the pipeline after every scan, as a new revision of the same report. More on sharing the scanners’ own output in how to share a Checkov report and how to share a tfsec report.
Questions
- How do I turn Checkov output into an HTML report?
- Run checkov -d . -o json > checkov.json (or --output-file-path to write results_json.json), then drop the file here. You get a findings report in your browser: totals by severity, every failed check with its guideline link, each resource with its file, line and code block, and the files with the most failures. Download it as a single HTML file or publish it as a link.
- Which scanners does it read?
- Checkov JSON (one framework or the array Checkov prints when it scans Terraform, Kubernetes, Dockerfiles and GitHub Actions together), tfsec --format json, Trivy misconfiguration scans (trivy config --format json, or the Misconfigurations in trivy fs) and KICS results.json. SARIF from any of them belongs in the SARIF viewer.
- Why do my Checkov findings all say Error instead of High or Low?
- Open-source Checkov leaves severity null — severities come from Prisma Cloud and are filled in only when you run with a --bc-api-key. Without one, every failed check is shown as Error, the same level Checkov's own SARIF output uses. tfsec, Trivy and KICS always ship a severity, and it is kept.
- What happens to skipped and passed checks?
- They are counted, not listed. Checkov's skipped_checks (inline #checkov:skip comments or --skip-check), tfsec results with status ignored and Trivy exceptions show as suppressed; passed checks are tallied so the report says how much was actually tested.
- Can I post the failed checks on a pull request?
- Yes. “Copy Markdown” gives a GitHub-flavored table — severity, check id, file:line and the resource that failed — that pastes into a PR comment or appends to $GITHUB_STEP_SUMMARY. For the code blocks and guideline links, publish the report and link it in the comment.
- tfsec is deprecated — does this still help?
- tfsec's checks moved into Trivy, and trivy config prints the same findings as Misconfigurations. Both formats are read here, so a team mid-migration can compare the two runs side by side.
- Is my scan uploaded?
- No. The JSON is parsed and the report is built in your browser. It only leaves your machine if you click “Get a shareable link” and publish the report to Comma — and then you choose who can open it.
Related: Terraform plan viewer · SARIF viewer · Trivy / Grype viewer · what a Terraform plan is · what policy as code is · all free tools