Appearance
Runbook: Twingate Device Compliance Enforcement
Purpose
Twingate is the primary remote-access layer for Cirius Group. Today it allows any authenticated user with a valid corporate account to connect; the client device's security posture is not evaluated. Device compliance enforcement turns Twingate into a zero-trust gate — a resource request is granted only if the user is authenticated and the device meets compliance criteria (Intune enrollment, OS patch level, encryption, anti-malware, etc.).
This runbook walks through the configuration, the staged rollout (report-only then enforce), and the dependencies on FIDO2 hardware distribution.
Related story: FIDO2-016. Related:
runbooks/intune-usb-storage-block.mdrunbooks/intune-mam-mobile.mdentra/fido2-auth-method.tf.examplesecurity/arctic-wolf-mdr-scope-gap.md
How Twingate Device Compliance Works
Twingate's Device Security feature evaluates posture signals at connection time and per resource request. Sources of posture:
- Twingate native signals: OS version, client version, disk encryption, anti-malware running, screen lock
- Third-party posture via integration: Intune (primary for Cirius), CrowdStrike, Jamf, and others
- Trust scoring: Posture signals are combined into a "Trust Level" (High / Medium / Low), and resource policies require a minimum Trust Level before access is granted
Cirius will use Intune as the primary posture source because Intune is already the device-management system of record for managed Windows devices and iOS/Android via MAM. Twingate reads Intune compliance via the Intune Graph API integration.
Prerequisites
Before turning enforcement on, all of the following must be true:
- Intune enrollment — every staff-used device that needs to reach corporate resources is enrolled (managed Windows) or under MAM (personal phones). See
intune-usb-storage-block.mdandintune-mam-mobile.md. - Intune compliance policies exist defining what "compliant" means per platform — OS patch floor, encryption required, anti-malware running, passcode required, no jailbreak/root.
- FIDO2 hardware distributed to the three domain admins (Rory, Kevin, Greg) and any other privileged users — because the Conditional Access policies that lift sign-in assurance to FIDO2 are a partner to this rollout. See
entra/fido2-auth-method.tf.example. - Twingate–Entra SSO is live (it already is) — Twingate authenticates users against Entra before device posture is even evaluated.
- Twingate–Intune integration is configured in the Twingate admin portal: Settings → Device Security → Integrations → Microsoft Intune → connect the tenant app registration with
DeviceManagementConfiguration. Read.AllGraph permission. - Break-glass paths documented so the 18 break-glass accounts retain a way to reach resources if the Twingate / Intune chain fails. Per CLAUDE.md, break-glass accounts are never suppressed and must continue to work via their designated path.
Posture Signals to Require
Windows (managed / Intune-enrolled)
- Intune compliance state = Compliant
- BitLocker encryption active on the system drive
- Defender for Endpoint agent running and reporting
- Cortex XDR agent running and reporting
- OS build within the patch floor (Windows 10 ≥ 22H2 or Windows 11 ≥ 23H2, adjusted rolling)
- Screen lock timeout ≤ 15 minutes (enforced via Intune)
macOS (future — none today)
Documented for future-proofing; no policy effect until macOS devices are in scope.
iOS / Android (MAM)
- Intune app protection policy applied (MAM)
- OS version within the floor (see
intune-mam-mobile.md) - Not jailbroken / rooted
- Device attestation available (DeviceCheck on iOS, Play Integrity on Android)
Unmanaged personal computer (edge case)
- Default: block
- Exception: read-only webmail / Teams web via a browser session behind a CA policy that already gates on compliant device or MFA + MDM + session controls. Twingate's role here is a hard deny — if users need that edge case, we direct them through the web path, not through Twingate.
Twingate Resource Policies
Organize resources into tiers and apply trust requirements per tier.
| Tier | Resources | Minimum Trust Level |
|---|---|---|
| Tier 0 — privileged | Jump hosts, domain controller management, Palo Alto Panorama, Veeam management, Intune / Entra admin portals (when accessed via Twingate) | High + FIDO2 auth at sign-in |
| Tier 1 — sensitive | PHI-adjacent workloads (Medicare workflow host, SQL DB replicas accessed for admin), Key Vault access, Terraform state storage | High |
| Tier 2 — standard | Internal file shares, Teams / SharePoint admin routes, general business applications | Medium |
| Tier 3 — support | Printer management, low-sensitivity internal tooling | Medium (Low accepted during report-only) |
"High" Trust Level requires all Windows posture signals above plus Intune Compliant state. "Medium" allows slightly relaxed patch floors (current minus one minor OS release) but still requires Compliant + Encryption + AV running.
Path in Twingate admin
For each resource: Resources → <resource> → Security → Minimum trust level → <tier>. Apply the mapping above.
Group-based assignment: use the existing PrivilegedUsers, AllStaff, and ContractorAccess Entra groups mapped into Twingate as user groups; resource policies combine group membership with trust level.
Rollout Plan — Report-Only First, Then Enforce
Phase 1 — Report-only (Weeks 0–4)
Purpose: collect data on who would be blocked and why, without blocking anyone. This is the learning phase.
- [ ] Configure posture signal definitions in Twingate for all platforms
- [ ] Configure resource Trust Level requirements per the tier table above
- [ ] Set the global enforcement mode to "Report-only" for the evaluation period
- [ ] Enable Twingate audit logging export to the central LAW (
cirius-logging-law-central— see CLAUDE.md Log Analytics section) - [ ] Weekly review: which devices would be blocked, which users are affected, and why
- [ ] Fix the systemic issues first (a missing Intune compliance policy, an out-of-date OS on a fleet of devices, an exception group that needs to exist for a specific workflow)
Phase 2 — Enforce on Tier 0 only (Weeks 4–6)
- [ ] Flip enforcement on only for Tier 0 resources
- [ ] Requires Rory / Kevin / Greg have FIDO2 distributed and enrolled by this point
- [ ] Monitor closely — block on privileged resources is a sharper blade than Tier 2 and will surface any remaining blind spots quickly
Phase 3 — Enforce on Tier 1 (Weeks 6–8)
- [ ] Flip enforcement for Tier 1 resources
- [ ] Expect a short burst of help tickets; resolve by either bringing the device into compliance or approving a time-bound exception
Phase 4 — Enforce broadly (Week 8+)
- [ ] Flip enforcement for Tier 2 and Tier 3
- [ ] Full zero-trust posture in effect
Rollback
- At any point during staged enforcement, a per-tier rollback is a single setting flip back to Report-only
- Global rollback to Report-only is also a single setting — takes effect on next session for connected clients; new connections immediately reflect the change
Exception Handling
Exceptions are time-bound and device-specific, never user-wholesale.
- Request via SecOps story in COMP project titled
Twingate compliance exception — <device> — <reason> - Include: user, device ID, what posture signal is failing, why the device cannot meet it in the normal timeframe, expiry date (default 14 days)
- Reviewed by Rory (technical) and Adriana (compliance)
- If approved, Rory adds the device to a Twingate-side exception group permitted to connect at a lower trust level for the specified resources for the specified window
- At expiry, membership is removed; user re-requests if still needed
All exceptions appear in the Twingate audit log and remain visible in the SecOps story history.
Logging and Monitoring
- Twingate connection logs and posture evaluations are exported to
cirius-logging-law-centralvia the Twingate log exporter / event hook - An agent in the security monitoring fleet (see CLAUDE.md agents listing,
agents/network/or create underagents/twingate/) watches for:- Repeated compliance failures for the same user in a short window (possible compromised credentials)
- New devices first appearing with Low trust — alert to review
- Break-glass accounts connecting via Twingate — always CRITICAL alert, never suppressed (consistent with the break-glass rule in CLAUDE.md)
- Monthly review in
runbooks/monthly-security-review.md— section on remote access — confirms trust distribution across the fleet remains at ≥ 95% High for privileged users and ≥ 90% Medium or better for all staff
Dependencies on FIDO2 Hardware Distribution
Tier 0 enforcement is gated on FIDO2 keys being distributed and enrolled for Rory, Kevin, and Greg. Do not flip Tier 0 into enforce mode until:
- YubiKey 5-series hardware is in hand for all three (purchasing + shipping needs to land before the Phase 2 target date)
- FIDO2 auth method policy is enabled in Entra (see
entra/fido2-auth-method.tf.example) - Each has completed a first sign-in with FIDO2 and confirmed the key works
- Conditional Access policy requiring phish-resistant MFA for admin roles is enabled in enforce mode
If any of these dependencies slip, hold Phase 2 — do not compensate by relaxing the Tier 0 requirement.
Compliance Mapping
- HIPAA 164.312(a)(1) — access control (device posture as access prerequisite)
- HIPAA 164.308(a)(4)(ii)(B) — access authorization procedures
- HIPAA 164.312(d) — person or entity authentication (authenticated user + trusted device together)
- SOC2 CC6.1 — logical access controls
- SOC2 CC6.6 — trusted access credentials and device posture
- SOC2 CC7.2 — monitoring remote access for anomalies
- HITRUST 01.j Access Control for Portable Media / Mobile Devices
Auditor evidence:
- Twingate resource policy configuration (screenshots)
- Intune compliance policies (screenshots / exports)
- Sample Twingate audit log entries showing compliance evaluation
- Exception log from SecOps for the audit period
Known Gotchas
- Twingate Client update lag: Some clients report posture signals after a delay when the client has just upgraded. Keep the Twingate client update cadence in users' minds (monthly review flag) so stale clients do not cause false compliance failures.
- Intune reporting lag: Intune compliance state can lag real device state by up to several hours on first enrollment. Post-enrollment, plan for ~1 hour lag during normal operation.
- MacOS personal devices: Currently out of scope. Block by default via Twingate until macOS management is introduced — do not create a permissive gap hoping users will self-manage.
- Split-tunneling: Twingate uses split-tunnel by default. This does not affect compliance enforcement (posture is evaluated at resource request time regardless of tunnel shape), but it does change the threat model for lateral movement; document this in the network architecture diagram.
- Break-glass account paths: Break-glass accounts must have an alternate path when Twingate is down or the Intune integration is unhealthy; do not collapse their path onto Twingate-only access.