This page maps the lab from source code to Azure services. Use it when you want to understand which tool owns which layer, where the code lives, and which wiki page explains the behavior.
| Layer | Technology | Source | Primary wiki pages |
|---|---|---|---|
| Infrastructure as code | Terraform | main.tf, variables.tf, outputs.tf |
Deploy, variables |
| Azure provider | AzureRM provider | versions.tf |
Module map |
| Entra provider | AzureAD provider | versions.tf |
Entra test users |
| Generated lab access | Random provider | main.tf |
Key Vault secrets |
| Cloud target | Microsoft Azure | environments/lab.tfvars |
Architecture overview |
| CI/CD | GitHub Actions | .github/workflows/terraform-checks.yml |
GitHub Actions reference |
| Policy as code | Open Policy Agent/Rego | policies/security.rego |
Policy posture |
| Integration tests | Terratest and Go | tests/security_lab_test.go |
Final validation |
| Tool | Required | Used for | Current run notes |
|---|---|---|---|
| Terraform | Yes | fmt, init, validate, plan, apply, destroy |
Tested with 1.12.0 |
| Azure CLI | Yes | Azure authentication, resource checks, Run Command, REST queries | Tested with 2.83.0 |
| PowerShell | Yes on Windows runbooks | Scripting variables and cleanup | Used for the June 7, 2026 validation |
| TFLint | Optional | Terraform linting | Not installed in the checked workstation |
| Checkov | Optional | IaC security scanning | Not installed in the checked workstation |
| Gitleaks | Optional | Secret scanning | Not installed in the checked workstation |
| Go | Optional | Terratest execution | Installed in the July 7, 2026 SOC run; run tests from tests/ |
Terraform variables
-> locals and naming
-> resource groups
-> VNets, subnets, NSGs, route tables
-> firewall, policy, monitoring, Key Vault, budget
-> Windows VMs
-> optional Sentinel, AMA telemetry, AD DS, Defender paths, playbooks
-> diagnostics, secrets, outputs
-> validation commands and KQL
The strongest source of truth is still the Terraform code. When documentation
and code disagree, update the wiki after reading variables.tf,
locals.tf, and the module that owns the behavior.