ZTNA — default-deny access
Author default-deny access policies (allow-groups, min-trust, posture-required, ports, resource) and evaluate each request into a recorded session verdict. ZTNA decisions target ≤100 ms.
SS-26 · Network Fabric & SASE
The core of the product. Default-deny ZTNA, network segments and residency paths, an application-aware SD-WAN overlay, a Tailscale-style tailnet, the zero-knowledge multi-tenant mesh (SDP control plane), native WireGuard coordination that retired Headscale, EVE-NG digital twins, and the write-once UPO policy compiler that renders one policy to ZTNA / SD-WAN / firewall targets.
What it does
Author default-deny access policies (allow-groups, min-trust, posture-required, ports, resource) and evaluate each request into a recorded session verdict. ZTNA decisions target ≤100 ms.
Create a per-tenant mesh with MTU/MSS clamping (the 1280–1420 trap), enroll peers by public key only, keep an ephemeral endpoint cache with roaming, and pull topology changes from a cursor-based delta engine.
Generate each node's netmap and a zero-knowledge wg-quick config, serve a delta-driven coordination poll (the Headscale map-poll replacement), and perform seamless mesh-wide re-keys — ADR-0072 route 2.
Write one versioned UnifiedPolicy, validate fail-closed, compile to ztna / sdwan / firewall rulesets, and apply with a diff against the last-applied baseline. Compilers render; they never mutate the enforcement stores.
Build tunnels over ≥1 link, set app-aware path-selection and QoS classes with protected floors, record SLA probes, and compute a live steering decision that reroutes an app onto the healthier link — reroute on loss targets ≤1 s.
Enroll devices with ephemeral/reusable auth keys, gate them with ACLs + device posture, resolve private names over MagicDNS, fall back through DERP relays, advertise subnet routes (advertise → approve), run exit nodes, and expose a k8s Service into the tailnet.
Secure Web Gateway policies, CASB SaaS controls, FWaaS rules, DLP inspection profiles and a SASE PoP registry — the security controls that sit close to users and workloads.
Build a lab of nodes and links, start/stop/snapshot it, validate a proposed change against the emulated topology before it touches production, and reach the console only over a private mesh overlay address.
Worked examples
Auth on every call is the platform standard: an SS-01 Bearer token plus your X-Tenant-Id. $BASE is the service's /api/v1 base; ${H[@]} carries the auth headers.
A ZTNA policy is deny-by-default: it names exactly who may reach one resource, on which ports, at what trust level, with posture enforced. Everything not named is denied.
curl -sX POST "$BASE/sase/ztna/policies" "${H[@]}" \
-d '{
"name": "payments-api",
"resource": "svc://payments.prod",
"allow_groups": ["sre", "payments-oncall"],
"ports": [443],
"min_trust": 70,
"require_posture": true
}'
# → 201 { "id": "ztna-7", "default_action": "deny", "version": 1 }
# Evaluate a request → a recorded session verdict
curl -sX POST "$BASE/sase/ztna/grant" "${H[@]}" \
-d '{ "policy":"ztna-7", "user":"ada", "groups":["sre"],
"device":"dev-1", "trust":82, "posture":true,
"resource":"svc://payments.prod" }'
# → 200 { "decision": "allow", "session": "sess-1a2b", "ttl_s": 900 }Write one abstract policy; validate fail-closed; render it to ztna, sdwan and firewall; then apply and get a reviewable diff. The compilers render configs — they never mutate the enforcement stores.
# 1. Author the unified policy (bumps the version)
curl -sX POST "$BASE/upo/policy" "${H[@]}" -d '{
"name": "corp-baseline",
"user_groups": ["eng","sales"],
"segments": ["prod","corp"],
"applications": ["payments","crm"],
"access_rules": [{ "user_group":"eng", "segment":"prod", "action":"allow" }],
"egress_policies": [{ "target":"crm", "action":"inspect", "inspection_level":"deep" }]
}'
# 2. Validate fail-closed (an invalid policy cannot compile)
curl -sX POST "$BASE/upo/policy/validate" "${H[@]}"
# → { "valid": true, "errors": [] }
# 3. Compile → a deterministic ruleset per target
curl -sX POST "$BASE/upo/compile" "${H[@]}" \
-d '{ "targets": ["ztna","sdwan","firewall"] }'
# → { "ztna": {...}, "sdwan": {...}, "firewall": {...}, "policy_version": 4 }
# 4. Apply firewall → a diff vs the last-applied baseline
curl -sX POST "$BASE/upo/apply" "${H[@]}" -d '{ "target":"firewall" }'
# → { "target":"firewall", "added":["deny corp→prod"],
# "removed":[], "unchanged_count": 12 }Enroll by public key only — private material is rejected with 400. The control plane emits the netmap and a wg-config whose PrivateKey line is a comment, never an assignable value.
# Create a tenant mesh (MTU validated 1280–1420 → MSS = MTU − 40)
curl -sX POST "$BASE/mesh" "${H[@]}" \
-d '{ "name":"corp-overlay", "mtu":1420 }' # → { "id":"mesh-1", "mss":1380 }
# Enroll a peer by PUBLIC KEY ONLY (private_key → 400)
curl -sX POST "$BASE/mesh/mesh-1/peers" "${H[@]}" \
-d '{ "name":"laptop", "public_key":"kA", "region":"eu-central" }'
# Pull the zero-knowledge wg-quick config
curl -s "$BASE/mesh/mesh-1/peers/peer-1/wg-config" "${H[@]}"
# [Interface]
# # PrivateKey: supplied by the node — control plane is zero-knowledge
# Address = 100.100.1.1/32 ListenPort = 51820 MTU = 1420Endpoints
Method · path from services/26's openapi.json. The complete catalog for every group is on the docs page.
/api/v1/sase/ztna/policiesCreate a ZTNA access policy (default-deny)/api/v1/sase/ztna/policiesList ZTNA access policies/api/v1/sase/ztna/grantEvaluate a ZTNA request and record the session verdict/api/v1/upo/policyAuthor (create/replace) the tenant's unified policy; bumps version/api/v1/upo/policy/validateValidate the current unified policy (fail-closed)/api/v1/upo/compileCompile the policy to target rulesets (ztna|sdwan|firewall)/api/v1/upo/applyApply a compiled target; returns the diff vs the last-applied baseline/api/v1/upo/applied/{target}Get the last-applied compiled config for a target/api/v1/meshCreate a sovereign mesh overlay (SDP control plane)/api/v1/mesh/{id}/peersZero-knowledge peer enrollment (public key only; private material rejected)/api/v1/mesh/{id}/peers/{device}/netmapGenerate the peer's WireGuard netmap (datapath instruction set)/api/v1/mesh/{id}/peers/{device}/wg-configExport a zero-knowledge wg-quick config (no private key)/api/v1/mesh/{id}/peers/{device}/coordNative coordination poll (delta-driven Headscale map-poll replacement)/api/v1/mesh/{id}/peers/{device}/rekeySeamless mesh-wide re-key: rotate a peer's WireGuard public key/api/v1/mesh/{id}/peers/{device}/connectivityCompute a NAT-traversal plan (direct or DERP relay fallback)/api/v1/mesh/{id}/deltasPull topology deltas since a cursor/api/v1/sdwan/tunnelsCreate an SD-WAN overlay tunnel/api/v1/sdwan/steerCompute an app-aware steering decision for a tunnel/api/v1/tailnet/devicesEnroll a device into the tenant tailnet (approval required)/api/v1/tailnet/aclSet the tailnet ACL/policy (ACLs + posture rules)/api/v1/sase/dlp/profilesSet a DLP inspection profile/api/v1/emulation/labs/{lab}/validateValidate a proposed change against the emulated topologyArchitecture placement
SS-26 is reached only through the SS-07 edge (which validates the SS-01 JWT); east-west is mTLS. State lives as SS-02 claims, tunnel keys come from SS-05 Vault (ADR-0056), and every state change emits a Vault-Transit-signed SS-06 audit-chain entry (ADR-0014). Tenancy is first-class and hierarchical (ADR-0019/0059); cross-tenant access returns zero rows by construction.
Keep exploring
Authoritative DNS, GeoDNS steering, health-checked answers and a DNSSEC ceremony — the resolution layer under the mesh.
Open deep-dive →Detections-as-code, guard-railed containment, threat intel, and the Zeek mesh chaos-rig auditor.
Open deep-dive →The Envoy edge in front of the whole fabric: TLS, JWT, WAF, rate-limits, routes and weighted canaries.
Open deep-dive →Metrics, logs, traces, SLOs with burn-rate routing, synthetic probes and the signed audit index for the whole fabric.
Open deep-dive →