Infrastructure as Code should make cloud delivery faster, but compliance checks usually appear too late — after deployment or at the end of the pipeline. Then teams discover the same issues again: naming is not following conventions, mandatory tags are missing, TLS is not enforced, public access is enabled, diagnostics are not configured. None of this is new. Microsoft already provides strong guidance in the Well-Architected Framework (WAF) and Cloud Adoption Framework (CAF). The hard part is applying these rules consistently across many repos and many teams.
This is why I built Azure IaC Compliance Checker: a small open-source CLI that checks Azure IaC before deployment, directly from code.
Where the tool is available
The tool is available on GitHub: vunvulear/azure-iac-checker. You can find it here: https://github.com/vunvulear/azure-iac-checker.
Right now it’s early stage: there are no releases and no published packages, so the normal way to use it is to clone the repository and install it from source.
Why I built it (and what you get)
Existing tools help, but they don’t cover the full need:
Some tools are Terraform-only.
Azure Policy is great, but it mostly works after resources exist.
Many teams use a mix of Terraform, ARM templates, and Bicep, and want one consistent check.
This checker scans a folder of IaC and generates a Markdown compliance report with violations and severity. It supports:
Terraform (
.tf,.tfvars) usingpython-hcl2ARM templates (
.json) detected by the$schemaBicep (
.bicep) compiled to ARM JSON first (needs Bicep CLI if you scan Bicep)
It evaluates rules aligned to WAF and CAF (around 80 rules) and it can fail your pipeline based on a severity threshold. That means you can make compliance “shift-left”: catch problems early, when fixes are small.
How to install and use it
You need Python 3.10+ and pip. Bicep CLI is optional (only for .bicep scans).
Install from source:
git clone https://github.com/vunvulear/azure-iac-checker.git
cd azure-iac-checker
pip install python-hcl2 PyYAML
pip install -e .
iac-checker --version
Now run a scan:
# Scan all formats (Terraform + ARM + Bicep)
iac-checker --path ./infra
You can filter formats if you want:
iac-checker --path ./infra --format terraform
iac-checker --path ./infra --format arm bicep
And you can control output and threshold:
iac-checker --path ./infra --config .iac-checker.yaml --output report.md
iac-checker --path ./infra --severity-threshold High
Exit codes are CI-friendly: 0 = pass, 1 = fail (violations at/above the chosen threshold).
Try it fast
The repo includes sample compliant and non-compliant files under examples/, so you can test quickly and see the report format.
Comments
Post a Comment