Threat Model — Web App.puml
Browser, API, database: the shape most systems actually are.
Show the source
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!include <threat/ThreatModel>
title Threat Model — Web Application
Person(user, "Customer", "Uses the product")
NetworkBoundary(edge, "Public Edge", "internet") {
Container(waf, "CDN / WAF", "Cloudflare", "TLS termination, rate limiting")
}
TrustBoundary(dmz, "DMZ", "low") {
Container(web, "Web App", "React", "Browser client", $tags="internet_facing")
Container(api, "API", "Node", "Business logic", $tags="internet_facing+authn_oauth2")
}
TrustBoundary(core, "Internal", "high") {
ContainerDb(db, "App Database", "Postgres", "User records", "", "pii+encrypted_at_rest+audit_logged")
ContainerQueue(jobs, "Job Queue", "SQS", "Background work")
Container(admin, "Admin Console", "React", "Support tooling", $tags="admin+mfa+authn_oauth2")
}
System_Ext(mail, "Email Provider", "Transactional email")