Hermes Wiki

Defense in Depth

Concept

Defense in depth means never relying on a single security control to protect a system — instead, layering multiple, independent controls so that if one fails, the next one still holds. The AWS Well-Architected Framework's Security Pillar states this as a core design principle: apply security at every layer, not just the perimeter — edge/network, VPC, load balancer, individual instance/compute service, operating system, application, and code. Each layer assumes the layers around it can be breached and is designed to hold on its own.

Concretely, a layered stack typically looks like:

  • Network layer — VPC segmentation, public/private subnet split, security groups, network ACLs
  • Edge layer — WAF against injection/XSS, DDoS protection at the edge
  • Identity layer — strong authentication, least-privilege authorization (IAM), short-lived credentials
  • Data layer — encryption at rest and in transit, key management
  • Application layer — input validation, dependency hygiene, secure coding practices
  • Detection layer — logging, monitoring, automated response to security events

Tradeoffs

Approach Blast radius if one control fails Operational cost Latency/complexity cost
Single strong perimeter (e.g., firewall-only) Total — one breach exposes everything behind it Low Low
Defense in depth (layered controls) Contained to the layer breached Higher — more controls to configure, patch, and monitor Higher — more moving parts, more places for legitimate traffic to be misconfigured-blocked

The core tension: every additional layer is both a security asset and an operational liability. Each control is itself a system that can be misconfigured, drift out of date, or generate false positives that erode trust in alerts (alert fatigue). Defense in depth isn't "add every control available" — it's "add controls at the layers where a realistic threat model says a single point of failure would be catastrophic."

When to use / when not to

  • Always applicable as a principle, but the depth of implementation should scale with what's actually being protected — a public marketing site doesn't need the same layer count as a payments processing path.
  • Justified fully wherever a breach has outsized consequences: anything touching PII, credentials, payment data, or systems with regulatory exposure (PCI-DSS, SOC 2, HIPAA all implicitly require this).
  • Can be over-applied: stacking five redundant controls around a low-sensitivity internal tool mostly adds operational drag (more patching, more false-positive triage) without a proportional risk reduction — the honest question is always "what's the actual blast radius if this specific layer is the only one that fails?"

Common pitfall

Treating defense in depth as a checklist of tools to deploy (WAF ✅, VPC ✅, encryption ✅) rather than as independent, non-overlapping failure domains. If every "layer" ultimately depends on the same underlying credential, key, or misconfigured trust boundary, the layers aren't actually independent — a single compromised IAM role that has access across every layer collapses the whole model back to single-point-of-failure security, just with more dashboards.

Engineering Lens

The interview/review-worthy framing isn't "we have five security controls" — it's being able to draw the specific failure domain each layer protects against and name what happens when that layer alone is breached. That's what separates someone who deployed a checklist from someone who actually modeled the threat. This reasoning transfers directly regardless of industry — a Fintech payments path, a Capital Markets order-entry system, and a BigTech consumer platform all apply the exact same layered-independence logic, just with different assets behind the innermost layer.

Sources

Hermes Wiki