Zero Trust Architecture
What I Do
I provide guidance on implementing zero trust security architectures where no user, device, or network segment is implicitly trusted. This includes continuous verification of identity, device health, and context for every access request, microsegmentation of networks, and policy-based access control.
When to Use Me
- Designing a zero trust architecture for an organization or application
- Implementing continuous authentication and authorization checks
- Configuring microsegmentation between services
- Setting up device trust and health verification
- Migrating from perimeter-based security to zero trust
- Implementing policy engines for access decisions
Core Concepts
- Never Trust, Always Verify: Authenticate and authorize every request regardless of source network, previous authentication, or device.
- Least Privilege Access: Grant minimum required permissions for the specific task, resource, and time window.
- Microsegmentation: Divide networks into granular zones with individual access policies for each segment.
- Continuous Verification: Re-evaluate trust continuously based on user behavior, device state, and context changes.
- Device Trust: Verify device identity, health, patch level, and compliance before granting access.
- Context-Aware Policies: Make access decisions based on user identity, device, location, time, and risk score.
- Assume Breach: Design systems assuming adversaries are already inside the network and limit blast radius.
Code Examples
1. Policy Decision Point (Python)
from dataclasses import dataclass
from enum import Enum
from typing import List
class Decision(Enum):
ALLOW = "allow"
DENY = "deny"
MFA_REQUIRED = "mfa_required"
@dataclass
class AccessContext:
user_id: str
device_id: str
device_compliant: bool
ip_address: str
resource: str
action: str
risk_score: float
mfa_verified: bool
def evaluate_access(ctx: AccessContext) -> Decision:
if not ctx.device_compliant:
return Decision.DENY
if ctx.risk_score > 0.8:
return Decision.DENY
if ctx.risk_score > 0.5 and not ctx.mfa_verified:
return Decision.MFA_REQUIRED
if ctx.action in ("delete", "admin") and not ctx.mfa_verified:
return Decision.MFA_REQUIRED
return Decision.ALLOW
2. Service-to-Service mTLS Verification (Go)
package main
import (
"crypto/tls"
"crypto/x509"
"log"
"net/http"
"os"
)
func createMTLSClient(certFile, keyFile, caFile string) (*http.Client, error) {
cert, err := tls.LoadX509KeyPair(certFile, keyFile)
if err != nil {
return nil, err
}
caCert, err := os.ReadFile(caFile)
if err != nil {
return nil, err
}
caPool := x509.NewCertPool()
caPool.AppendCertsFromPEM(caCert)
tlsConfig := &tls.Config{
Certificates: []tls.Certificate{cert},
RootCAs: caPool,
MinVersion: tls.VersionTLS13,
}
return &http.Client{
Transport: &http.Transport{TLSClientConfig: tlsConfig},
}, nil
}
3. Request Context Enrichment Middleware (Python/FastAPI)
from fastapi import Request, HTTPException
from starlette.middleware.base import BaseHTTPMiddleware
from typing import Optional
import ipaddress
TRUSTED_NETWORKS = [ipaddress.ip_network("10.0.0.0/8")]
class ZeroTrustMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
context = {
"user": getattr(request.state, "user", None),
"device_id": request.headers.get("X-Device-ID"),
"client_ip": request.client.host,
"user_agent": request.headers.get("User-Agent", ""),
"request_id": request.headers.get("X-Request-ID"),
}
ip = ipaddress.ip_address(request.client.host)
context["is_internal"] = any(ip in net for net in TRUSTED_NETWORKS)
request.state.security_context = context
response = await call_next(request)
return response
Best Practices
- Authenticate every request with strong identity verification regardless of network location.
- Use mTLS for service-to-service communication to ensure mutual identity verification.
- Implement microsegmentation so each service can only communicate with explicitly allowed peers.
- Evaluate device trust including patch level, encryption status, and endpoint protection before granting access.
- Apply time-limited access with just-in-time provisioning and automatic expiration of elevated privileges.
- Log all access decisions with full context (who, what, when, where, why) for audit and anomaly detection.
- Encrypt all traffic including east-west traffic between internal services.
- Use a centralized policy engine to evaluate access decisions consistently across all services.
- Implement step-up authentication that requires stronger verification for sensitive operations.
- Continuously monitor and adapt policies based on threat intelligence and behavioral analytics.
1---2name: zero-trust-architecture3description: Implementing zero trust security models that verify every request regardless of network location4---56# Zero Trust Architecture78## What I Do910I provide guidance on implementing zero trust security architectures where no user, device, or network segment is implicitly trusted. This includes continuous verification of identity, device health, and context for every access request, microsegmentation of networks, and policy-based access control.1112## When to Use Me1314- Designing a zero trust architecture for an organization or application15- Implementing continuous authentication and authorization checks16- Configuring microsegmentation between services17- Setting up device trust and health verification18- Migrating from perimeter-based security to zero trust19- Implementing policy engines for access decisions2021## Core Concepts22231. **Never Trust, Always Verify**: Authenticate and authorize every request regardless of source network, previous authentication, or device.242. **Least Privilege Access**: Grant minimum required permissions for the specific task, resource, and time window.253. **Microsegmentation**: Divide networks into granular zones with individual access policies for each segment.264. **Continuous Verification**: Re-evaluate trust continuously based on user behavior, device state, and context changes.275. **Device Trust**: Verify device identity, health, patch level, and compliance before granting access.286. **Context-Aware Policies**: Make access decisions based on user identity, device, location, time, and risk score.297. **Assume Breach**: Design systems assuming adversaries are already inside the network and limit blast radius.3031## Code Examples3233### 1. Policy Decision Point (Python)3435```python36from dataclasses import dataclass37from enum import Enum38from typing import List3940class Decision(Enum):41 ALLOW = "allow"42 DENY = "deny"43 MFA_REQUIRED = "mfa_required"4445@dataclass46class AccessContext:47 user_id: str48 device_id: str49 device_compliant: bool50 ip_address: str51 resource: str52 action: str53 risk_score: float54 mfa_verified: bool5556def evaluate_access(ctx: AccessContext) -> Decision:57 if not ctx.device_compliant:58 return Decision.DENY59 if ctx.risk_score > 0.8:60 return Decision.DENY61 if ctx.risk_score > 0.5 and not ctx.mfa_verified:62 return Decision.MFA_REQUIRED63 if ctx.action in ("delete", "admin") and not ctx.mfa_verified:64 return Decision.MFA_REQUIRED65 return Decision.ALLOW66```6768### 2. Service-to-Service mTLS Verification (Go)6970```go71package main7273import (74 "crypto/tls"75 "crypto/x509"76 "log"77 "net/http"78 "os"79)8081func createMTLSClient(certFile, keyFile, caFile string) (*http.Client, error) {82 cert, err := tls.LoadX509KeyPair(certFile, keyFile)83 if err != nil {84 return nil, err85 }86 caCert, err := os.ReadFile(caFile)87 if err != nil {88 return nil, err89 }90 caPool := x509.NewCertPool()91 caPool.AppendCertsFromPEM(caCert)9293 tlsConfig := &tls.Config{94 Certificates: []tls.Certificate{cert},95 RootCAs: caPool,96 MinVersion: tls.VersionTLS13,97 }98 return &http.Client{99 Transport: &http.Transport{TLSClientConfig: tlsConfig},100 }, nil101}102```103104### 3. Request Context Enrichment Middleware (Python/FastAPI)105106```python107from fastapi import Request, HTTPException108from starlette.middleware.base import BaseHTTPMiddleware109from typing import Optional110import ipaddress111112TRUSTED_NETWORKS = [ipaddress.ip_network("10.0.0.0/8")]113114class ZeroTrustMiddleware(BaseHTTPMiddleware):115 async def dispatch(self, request: Request, call_next):116 context = {117 "user": getattr(request.state, "user", None),118 "device_id": request.headers.get("X-Device-ID"),119 "client_ip": request.client.host,120 "user_agent": request.headers.get("User-Agent", ""),121 "request_id": request.headers.get("X-Request-ID"),122 }123 ip = ipaddress.ip_address(request.client.host)124 context["is_internal"] = any(ip in net for net in TRUSTED_NETWORKS)125 request.state.security_context = context126 response = await call_next(request)127 return response128```129130## Best Practices1311321. **Authenticate every request** with strong identity verification regardless of network location.1332. **Use mTLS for service-to-service communication** to ensure mutual identity verification.1343. **Implement microsegmentation** so each service can only communicate with explicitly allowed peers.1354. **Evaluate device trust** including patch level, encryption status, and endpoint protection before granting access.1365. **Apply time-limited access** with just-in-time provisioning and automatic expiration of elevated privileges.1376. **Log all access decisions** with full context (who, what, when, where, why) for audit and anomaly detection.1387. **Encrypt all traffic** including east-west traffic between internal services.1398. **Use a centralized policy engine** to evaluate access decisions consistently across all services.1409. **Implement step-up authentication** that requires stronger verification for sensitive operations.14110. **Continuously monitor and adapt** policies based on threat intelligence and behavioral analytics.