See it as a diagram
Everything below, as a diagram you can edit. Describe yours and see it in seconds.
No account needed · Editable canvas, not a picture
The four things a reviewer is checking
Consistency with the system description. The narrative says the platform runs three services and a warehouse. The diagram has to show three services and a warehouse. A mismatch between two pieces of your own evidence is the fastest way to turn a routine review into a longer one, because it suggests neither document was produced from the system.
A note on scope while you are here: the description criteria cover the whole system, meaning infrastructure, software, people, procedures and data. The diagram carries the first two. Do not let a good diagram become the excuse for a thin narrative on the other three.
Boundaries and control points. The common access-control criteria ask you to demonstrate how access is restricted, so the diagram needs to show which resources sit in public versus private subnets, where firewalls or security groups enforce the split, and how administrative access reaches the environment. A picture of logical components with no boundary is not evidence for that criterion.
Currency, with a date on it. An undated diagram is worth very little because the reviewer cannot tell whether it describes the period under review. A date is cheap and it is the single highest-value annotation on the page.
Agreement with your other evidence. The asset inventory, the configuration export and the diagram all describe the same environment. When a resource appears in the config export and not in the diagram, that gap is what generates follow-up requests.
Why the annual redraw is the expensive path
The common pattern is to redraw everything in the two weeks before fieldwork, largely from memory and from last year file. That is precisely the condition under which errors enter: the person drawing is reconstructing rather than reading, they are under time pressure, and nothing verifies the result.
It is also the most expensive way to spend engineering time in the compliance cycle, and it repeats every year with no accumulation. Nothing built during the scramble makes next year cheaper, because the artefact starts decaying the day after it is submitted.
The alternative is to derive the picture from the same source as the infrastructure, so it is never more than a day behind and no scramble is required. For teams whose infrastructure is declared in Terraform this is straightforward, because the declaration already contains the boundaries, the subnets and the external endpoints that the reviewer wants to see.
Making a diagram evidence-grade
Date it and version it. Keep the previous versions, because an audit covers a window rather than a moment, and a question about a control in April is best answered with the diagram as it stood in April. Pinning the sync to a release tag rather than to a moving branch gives exactly that: the architecture as of the version that was actually running. See diagram versioning.
Draw the boundaries, not just the components. Zones for the VPC, the public subnet, the private subnet and anything outside your control. Label every external system, including the processors and vendors, because data leaving your boundary is where most of the follow-up questions live.
Leave secrets out. No keys, no tokens, no internal hostnames carrying credentials, no full IP allocation tables unless asked. A diagram becomes evidence, evidence circulates, and it is easier to keep it clean than to redact it afterwards.
One diagram per environment, not one diagram for everything. Production is in scope, the sandbox usually is not, and a combined picture forces the reviewer to work out which parts apply. Terraform repositories with per-environment counts make this separation easy to keep honest, since the real numbers per environment are visible rather than assumed.
Export a PNG for the evidence package and keep the live version linked for the reviewer who wants to look again. Both come from the same canvas, so the exported file and the live picture cannot disagree.
Generating it from the infrastructure repository
Connect the infrastructure repository read only through repository sync on GitHub, GitLab or Azure DevOps, and pick the branch or tag that represents what is running. For Terraform repositories every .tf and .tfvars file is parsed directly: no terraform init, no state file access, and no cloud credentials of any kind.
That last point matters twice for compliance work. The diagramming tool never holds a cloud credential that would itself have to appear in your vendor review, and the access it does hold is read-only on one repository pinned to one ref, which is a sentence you can put in a security questionnaire without qualification. The alternative, granting a diagramming tool the ability to read state or to call the cloud APIs, turns a documentation tool into an in-scope system. See Terraform diagrams without state.
What comes back is structured the way a reviewer reads: modules as zones, major resources as individual nodes with provider icons, repeated minor resources rolled into one node carrying the count, and per-environment counts preserved. Wiring is counted rather than drawn, which is the right call for evidence as well as for legibility: a role assignment or a generated password is a control detail belonging in the access-control evidence, not a box on an architecture page. The daily regeneration means the picture you submit at fieldwork is the picture that has been true all along, rather than an artefact created for the occasion.
The extract below is what a small stack produces before anything is drawn. Note the two lines a reviewer cares about most: a storage account declared once with for_each over a variable, resolved from the tfvars into a real number per environment, and the wiring counted instead of hidden.
9 declared resources + 0 data lookups + 1 registry module call across
1 stack (platform); 2 module directories. Curated to 7 nodes.
Providers: azurerm, random.
Environments (tfvars): DEV, QUAL - one deployment of every stack per environment.
State backend: azurerm.
(stack root):
* node-storage-account-lakebase | lakebase | Storage account;
per lakebase_projects (DEV 2, QUAL 1); account_tier Standard
* node-vpc | vpc | Module terraform-aws-modules/vpc/[email protected]
(registry module: one node for everything it provisions)
module lakehouse:
* node-lakehouse-databricks-workspace | Azure Databricks workspace; sku premium
* node-lakehouse-key-vault | Key vault; sku_name standard
Hidden wiring: 3 wiring resources not worth boxes:
1 password, 1 role assignment, 1 key vault secret.The diagram as of the release, not as of today
FAQ
Does a SOC 2 audit require an architecture diagram?
What does an auditor actually look for in the diagram?
Should the diagram cover the audit period or the present day?
What should be left out of an architecture diagram used as evidence?
Can a compliance diagram be generated without cloud credentials?
How many diagrams should an environment have?