Access lifecycle audit evidence (SCIM join / move / leave)
SCIM 2.0 provisioning configures the plumbing: the Base URL, the Bearer token, the role mapping, the health check. This page is what sits behind that plumbing when a HIPAA, SOC 2, or ISO 27001 reviewer asks the real question — who had access to message data between March and June, and prove they no longer do. It is the access-lifecycle evidence the HIPAA posture guide Section 1 (minimum necessary access), the SOC 2 controls mapping (CC6.1 logical access), and the ISO 27001 posture guide (A.5.16 / A.8.2) all assume SCIM leaves behind.The tenant-owned framing
Orbit’s access surface follows the same model as the rest of the compliance map (posture overview):- Every control here defaults open or off. A new workspace has no SCIM connection, no group mapping, and no designated PHI audiences. Nothing on this page is mandated, and nothing gates sending by itself. You assemble the posture; the platform enforces what you set.
- Orbit is the conduit and the ledger. It carries your IdP’s provisioning decisions into workspace membership and records every join, move, and leave in the audit ledger — but the role mapping is yours, and the least-privilege judgement is yours.
- The evidence reflects what you did. An unconfigured group mapping exports as an open item; a reviewed mapping exports as a fact. Assemble the posture first; export second.
Section 1 — The audit-question framing
An access-control reviewer — a HIPAA auditor working § 164.308(a)(3) (workforce security) and § 164.502(b) (minimum necessary), a SOC 2 assessor mapping CC6.1, or an ISO 27001 reviewer reading A.5.16 — does not ask for your SCIM configuration. They ask a question shaped like this:Show me every person who had access to patient message data between March 1 and June 30, what role each held, and that each who left no longer has access.Three records answer that question together, and none of them is optional:
The group mapping tells the auditor who was entitled; the SSO session
log tells them who showed up; the PHI access log tells them who
touched PHI. A reviewer who sees only the first and not the other two
has an entitlement list, not an access-control answer. Pull all three
for the same UTC-bounded range so the dates line up across records.
Where the raw ledger lives
For the Orbit side of that trail, the audit log export (GET /api/v1/compliance/audit-export?from=YYYY-MM-DD&to=YYYY-MM-DD)
bundles every audit event on the workspace into a signed download with
a 7-day TTL, and …/:jobId/verify replays the tamper-evident hash chain
so the reviewer can confirm the bundle is complete and unaltered. The
audit ledger is the single source the SCIM, role, and PHI-access rows
all land in — export it once over the reviewer’s range rather than
hand-collecting screenshots.
Section 2 — Least-privilege group mapping by job function
SCIM’sgroupMapping (set under Settings → SCIM or
PATCH /api/v1/settings/scim) maps an IdP group name to an Orbit role
on every sync. The mapping is the privilege vector the
SCIM page warns about: a group named
"Orbit Admins" mapped to owner makes every member of that IdP group
a workspace owner on the next sync. Review the mapping before you enable
provisioning, and treat an unreviewed mapping as a finding in itself.
The five roles SCIM can assign are owner, admin, developer,
billing, and viewer (the defaultRole for users provisioned without
a group mapping). A least-privilege mapping by job function — the
starting point a HIPAA minimum-necessary or SOC 2 CC6.1 review expects
to see — looks like this:
Two rules keep this mapping defensible:
defaultRole: vieweris the safe floor. Users provisioned without a group match land inviewer, so an unscoped IdP user cannot inheritdeveloperoradminby accident. Set it toviewerand leave it unless a reviewed policy says otherwise.owneris not a role you assign by group sync casually. An owner can transfer ownership and delete the workspace. Keep theownermapping to a single IdP group whose membership you review on a cadence — and document that cadence in the evidence binder.
Engineering lands in owner, or where defaultRole is
admin, is the pattern a reviewer flags: it means every synced user
inherits more than their job function requires. If you cannot justify
each row in the table above to a reviewer in one sentence, tighten the
mapping before the audit, not during it.
Section 3 — Deprovisioning guarantees
When someone leaves, the question is not just “did their seat go away” but “can you prove they can no longer sign in, and did any AI agent identity they owned stay live.” A SCIMDELETE /Users/{id} — which Okta
sends on Deactivate Users and Entra ID sends on the deprovisioning
flow — does three things, each of which leaves evidence:
- Revokes the user’s active sessions. The user’s Clerk session tokens are revoked immediately, so a sign-in attempt with a cached token fails. The SOC 2 controls mapping documents this under CC6.1 (session management): sessions are revoked on access changes via the session-revocation path.
- Suspends AI agent identities the user owned. Removing an agent identity suspends it rather than deleting its configuration — so the agent stops running but its audit history and configuration record stay intact for the reviewer. This is the guarantee the SCIM page states: deprovisioning suspends the agent identity rather than deleting it.
- Records the deprovisioning in the audit ledger. The SCIM-driven create, update, and deprovision events are recorded in your organization’s audit log — the same ledger the audit export bundles and chain-verifies.
What the evidence looks like
The audit ledger row for a deprovisioning carries the actor (the IdP identity that initiated the sync), the affected user, the timestamp, and the action. An off-boarding flow that relies on SCIM therefore has a defensible record even when no human clicked a button in the dashboard: the IdP deprovisioning event, the session revocation, and the agent suspension are all timestamped and chained. For a reviewer, the chain is:- The IdP logs the user’s removal from the provisioning group (or their disable in the directory) — your IdP’s audit trail.
- The next SCIM sync sends
DELETEto Orbit — recorded in the Orbit audit ledger. - The session revocation closes active sign-in — the next sign-in attempt fails.
- The agent suspension stops automated runs — the agent identity’s audit row shows the suspension.
Section 4 — The audit chain: IdP events to Orbit audit events
An access-control reviewer reconciles two ledgers: what your IdP recorded and what Orbit recorded. The correspondence is:
For a HIPAA § 164.308(a)(3) (workforce security) review, the reviewer
wants the join and leave rows for the range; for SOC 2 CC6.1, they want
the role-change rows that prove access was modified when job function
changed; for ISO 27001 A.5.16 / A.8.2, they want the privileged-access
(
owner / admin) assignment rows and the off-boarding rows. All three
read from the same Orbit audit ledger — the
audit export over the reviewer’s date range
hands them the same rows, and …/:jobId/verify proves the chain is
intact.
Where each record is pulled from
Section 5 — Worked loop: provision, verify, deprovision, verify
A concrete run a reviewer can follow end to end. It provisions a user from Okta, confirms the role in the PHI access log context, deprovisions them, and confirms revocation.1. Provision from Okta
Add the user to theOrbit Support IdP group in Okta (mapped to
viewer per the table in Section 2). On the next SCIM sync, Okta sends
POST /Users to https://api.orbit.devotel.io/scim/v2/{orgSlug}/Users.
Confirm the sync landed:
authenticationStatus reads authenticating, the
provisioning counts (usersCreated) increment, and the detectedIdp
reads Okta (inferred from the User-Agent). The user is now a viewer.
2. Verify the role in the access record
The user is entitled to read dashboards and contacts but not to write message content. If HIPAA mode is active and the user reads a PHI-bearing message, that read lands in the PHI access log with a reason code:viewer
who never reads PHI produces no PHI access log rows, which is itself the
least-privilege answer: entitlement without access is the goal.
3. Deprovision
Remove the user from allOrbit * groups in Okta (or disable them in
the directory). On the next sync, Okta sends
DELETE /Users/{id}. The deprovisioning revokes the user’s active
sessions, suspends any agent identities they owned, and records the
event in the audit ledger.
4. Verify revocation
Pull the audit export for the range that spans the provision and the deprovision, and chain-verify it:user.created row from step 1, the PHI access
rows from step 2 (if any), and the user.deleted row from step 3.
chain_valid: true with rows_checked matching the exported count
proves the ledger is complete and unaltered for the range. The user’s
next sign-in attempt fails — confirm against your IdP’s session log if
the reviewer wants a third record.
That loop — provision, verify entitlement, deprovision, verify
revocation, export and chain-verify — is the joiner-mover-leaver
evidence a HIPAA, SOC 2, or ISO 27001 reviewer is asking for. Each step
leaves a row in the same audit ledger, and the chain-verify closes the
loop.
What this page does not do
- Orbit does not enforce least privilege for you. The group mapping is your configuration; the platform assigns exactly the role you map. A reviewer’s minimum-necessary judgement is yours, not the platform’s.
- Orbit does not certify your IdP. Which IdP you trust, how its groups are governed, and how its session logs are retained are your calls. Orbit records the Orbit side of the chain; your IdP records its side.
- Nothing here gates sending. SCIM provisioning, role mapping, and the audit ledger are access controls, not message gates. The send-time gates that do exist are the ones you turned on, and each defaults open.
- This is not legal advice. The sequence documents Orbit’s access-lifecycle surfaces; whether it satisfies HIPAA § 164.308(a)(3), SOC 2 CC6.1, or ISO 27001 A.5.16 for your processing is a call for your counsel and ISMS lead.
Related references
- SCIM 2.0 provisioning — the configuration mechanics this page builds on: Base URL, Bearer token, supported resources, role mapping, health checks, Okta and Entra ID setup.
- HIPAA posture guide — Section 1 (minimum necessary access) and the PHI access log row this evidence trail feeds.
- SOC 2 controls mapping — CC6.1 logical access controls, the role hierarchy, and the audit-logging evidence.
- ISO 27001 posture guide — A.5.16 / A.8.2 access control and privileged-access rows.
- Audit log export — the export and chain-verify endpoints the worked loop pulls.
- HIPAA controls — the PHI access log and minimum-necessary role surface.
- Evidence binder — the framework-mapped pack that assembles these rows into SOC 2, ISO 27001, GDPR, or HIPAA chapters.