SkillAgentSearch skills...

iac-scanner

An agentic AI–powered IaC scanner that evaluates cloud infrastructure against security and compliance benchmarks. It also delivers cost analysis and AWS Well-Architected recommendations, with support for custom policies, checks, and configurable exceptions.

Install / Use

claude mcp add alphacrack -- npx -y github:alphacrack/iac-scanner

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

81/100

Category

Security

Supported Platforms

Claude Code
Claude Desktop

IaC Scanner

PyPI version PyPI downloads Python versions Python implementation CI CodeQL OpenSSF Scorecard License: Apache 2.0 DCO

Python CLI that scans Terraform and AWS CDK Infrastructure-as-Code, reports security + best-practice findings, and writes the fix. Runs locally, keylessly, or grounded by Checkov.

iac-scanner complements rule-based scanners like Checkov, tfsec, and KICS — it doesn't replace them. Its differentiator is AI-generated fixes alongside findings, and keyless operation via GitHub Models, Ollama, or an MCP server.

AI-generated output — review before applying. Fixed code is written to scan-output/fixed/ and must be human-reviewed before overwriting your working tree. No auto-apply.

License: Apache License 2.0.

Quickstart (30 seconds, no cost)

Pick whichever path matches your setup:

GitHub Models (free for any GitHub user)

pip install iac-scanner
export GITHUB_TOKEN=$(gh auth token)
iac-scan scan ./my-tf --provider github -o ./out

Ollama (fully local, offline, free)

pip install iac-scanner[local]
ollama pull qwen2.5-coder:7b-instruct  # first run only
iac-scan scan ./my-tf --provider ollama -o ./out

MCP server — drive from Claude Desktop / Cursor

pip install iac-scanner[mcp]
# Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
#   "mcpServers": { "iac-scanner": { "command": "iac-scan-mcp" } }
# Then in Claude: "Scan the Terraform in ~/work/infra"

OpenAI / Anthropic (bring your own key)

pip install iac-scanner
export OPENAI_API_KEY=sk-...
iac-scan scan ./my-tf --provider openai -o ./out
# or:  iac-scan scan ./my-tf --provider auto  (picks ollama → github → openai → anthropic)

No-network demo (no AI, just parse)

iac-scan scan ./samples/tf -o ./out --scan-only

Every mode writes scan-report.json (findings) and, when AI is enabled, fixed/ (corrected code).

Input (CLI)

  • Terraform: a directory containing main.tf, or the path to main.tf itself. Sibling .tf files are included.
  • CDK: a directory containing index.ts/index.js, or the path to that file. lib/ and bin/ subdirectories are included.

What we skip (automatic)

terraform.tfstate*, *.tfvars, .env*, *.pem, *.key, id_rsa*, .terraform/, node_modules/, cdk.out/. See SECURITY.md for the full skip-list and threat model.

Process

  1. Factory creates the right scanner (TerraformScanner or CdkScanner) from the given path.
  2. Scan: load entry file(s), apply the skip-list, redact obvious secrets, enforce the 200 KB input cap.
  3. (Optional) Rule engine pre-pass (--rules-engine=checkov) adds framework-mapped findings with CWE/CIS/NIST tags.
  4. Analysis (LLM, structured output): findings as a Pydantic-validated JSON array with severity + location.
  5. Fix (LLM, text output): regenerates corrected code with a mandatory AI-generated — review before applying banner.
  6. Output: JSON and/or SARIF 2.1.0 report; fixed files under fixed/.

Output

  • JSON report (scan-report.json): iac_type, entry_path, findings, metadata, provider, analysis_model, fix_model, prompt_version.
  • SARIF 2.1.0 (--format sarif|both): consumed by GitHub Code Scanning, GitLab Security Dashboards, SonarQube.
  • Fixed code (fixed/): multi-file output preserves the original layout; each file starts with the AI-generated banner.

Usage

# Basic scan (analysis + fix)
iac-scan scan ./my-tf-dir

# No-AI parse only (no keys needed)
iac-scan scan ./my-tf-dir --scan-only

# Findings only, skip fix generation
iac-scan scan ./my-tf-dir --no-fix

# Output SARIF for GitHub Code Scanning
iac-scan scan ./my-tf-dir --format sarif -o ./out

# Or both at once
iac-scan scan ./my-tf-dir --format both -o ./out

# Choose a provider explicitly
iac-scan scan ./my-tf-dir --provider github
iac-scan scan ./my-tf-dir --provider ollama
iac-scan scan ./my-tf-dir --provider openai

# Ground the LLM with Checkov rule findings (hybrid mode)
pip install iac-scanner[rules]
iac-scan scan ./my-tf-dir --rules-engine checkov

# CI gate: exit non-zero on any HIGH or CRITICAL finding
iac-scan scan ./my-tf-dir --fail-on high

# Cost cap: abort if projected LLM cost exceeds $0.50
iac-scan scan ./my-tf-dir --max-spend 0.50

# Force-refresh: skip the response cache for this run
iac-scan scan ./my-tf-dir --no-cache

Environment variables

| Variable | Purpose | |-----------------------|-------------------------------------------------------------------------------------------| | IAC_PROVIDER | openai | anthropic | github | ollama (overrides auto-detect). | | OPENAI_API_KEY | Required when --provider=openai. | | ANTHROPIC_API_KEY | Required when --provider=anthropic. | | GITHUB_TOKEN | Required when --provider=github. Any gh auth token works (free tier). | | OLLAMA_HOST | Ollama endpoint. Default: http://localhost:11434. | | IAC_ANALYSIS_MODEL | Override analysis model (e.g. gpt-4o, claude-3-5-sonnet-20241022). | | IAC_FIX_MODEL | Override fix model. | | IAC_MAX_SPEND_USD | Hard dollar cap per run. Abort if projected cost exceeds it. | | IAC_MAX_INPUT_BYTES | Input size cap (default 200 KB, floored to 1 KB, ceilinged to 10 MB). | | IAC_NO_CACHE | When set, skip the content-addressed response cache. | | IAC_NO_REDACT | Disable secret redaction (not recommended — see SECURITY.md). | | IAC_CACHE_DIR | Override cache directory (default ~/.cache/iac-scanner/). | | IAC_OUTPUT_FORMAT | Default output format (json | sarif | both). |

Install

# Base install — includes OpenAI and Anthropic providers + GitHub Models
pip install iac-scanner

# With optional extras
pip install iac-scanner[local]    # Ollama local-LLM provider
pip install iac-scanner[mcp]      # MCP server mode for Claude Desktop / Cursor
pip install iac-scanner[rules]    # Checkov hybrid mode
pip install iac-scanner[all]      # all of the above

# From source
git clone https://github.com/alphacrack/iac-scanner
cd iac-scanner
pip install -e ".[dev]"

Blog and tutorial

Articles and a step-by-step tutorial are published on GitHub Pages at https://alphacrack.github.io/iac-scanner/. Source lives under docs/.

Contributing

See CONTRIBUTING.md for development setup, test strategy, and the release process (Trusted Publishing + SBOM + Sigstore signing).

Governance & support

Security

See SECURITY.md for the threat model (prompt injection, secret exposure, hallucinated fixes, supply-chain, cost abuse) and private disclosure channel.

Project layout

src/iac_scanner/
  cli.py                # CLI entry (click)
  factory.py            # create_scanner(path) → TerraformScanner | CdkScanner
  models.py             # Pydantic: Finding, FindingsList, ScanReport, VerificationResult
  cache.py              # content-addressed SHA-256 response cache
  cost.py               # tiktoken preflight + IAC_MAX_SPEND_USD enforcement
  mcp_server.py         # iac-scan-mcp entry — MCP server for host LLMs
  scanners/
    base.py             # IacScanner (abstract), ScanResult
    _filters.py         # skip-list, secret redaction, input size cap
    terraform.py        # TerraformScanner (main.tf)
    cdk.py              # CdkScanner (index.ts / index.js)
  llm/
    providers.py        # LLMClient + OpenAI / Anthropic / GitHub Models / Ollama
  orchestration/
    tasks.py            # analysis + fix LangChain tasks (structured output, XML fencing)
    runner.py           # run_pipeline: scan → cache → cost check → LLM → result
    hybrid.py           # rule-pre-pass + LLM augment + dedupe
  rules/
    engine.py           # rule-engine dispatcher
    checkov.py          # Checkov subprocess adapter with CWE/CIS/NIST mapping
  output/
    report.py           # write_report_and_fixes — JSON + fixed/ banner
    sarif.py            # SARIF 2.1.0 emitter

Related Skills

View on GitHub
GitHub Stars3
CategorySecurity
Updated20d ago
Forks10

Languages

Python

Security Score

92/100

Audited on Aug 18, 2026

1 low