Contractor Access Expiration
Zero orphaned contractor accounts post-end date
Contractors get access on day one and keep it until somebody remembers. The engagement ends in June; the Okta account, the GitHub org membership, the AWS role, the Notion workspace all stay live into September because nobody owns the deprovisioning. Auditors find it, security finds it, occasionally an ex-contractor accidentally reveals they still have access. Expiration dates go into HRIS at hire; the enforcement never happens.
An hour-by-hour walkthrough.
Step by step.
- 01
Poll HRIS + external-worker directory daily
Read every contractor / vendor / consultant record with engagement end date within 14 days. Include already-expired records still holding active access anywhere as a safety net.
Workday · Rippling · BambooHR · Vendor management system - 02
Inventory every access surface per contractor
Okta apps + roles, GitHub org membership, AWS IAM bindings, Google Workspace, Slack, Notion, Jira, third-party SaaS on the entitlement map. Cross-check identity plane vs. individual apps for drift.
Okta · GitHub · AWS · Google · Slack · SaaS registry - 03
Notify manager with extend-or-confirm decision
14 days out: DM the sponsoring manager with the inventory and a one-click choice. Extensions require justification + capped at 90 days without escalation; confirm end-date queues the deprovision.
Slack · Teams · Web UI · Approval flow - 04
Execute the deprovision at end-of-day
On end date at 23:59 local: Okta suspend (cascades SSO), GitHub org remove, AWS role unbind, Google account suspend with file-ownership transfer per policy, Slack deactivate. Verify each write.
Okta · GitHub · AWS · Google · Slack · Backup service - 05
Post-deprovision sweep + record
7 days after end date, sweep every non-SSO SaaS for residual access — some vendors don't propagate SSO revocation cleanly. File full access-revocation record with per-system status for audit + weekly security digest.
SaaS registry · Audit log · Security digest
What you connect to make this run.
Workday · Rippling · Vendor management
readContractor engagement dates + sponsoring manager + business justification. Some companies keep contractors in a separate vendor-management tool from employees — Ivy reads both, unified.
Okta · Google Workspace · Microsoft Entra
read+writeIdentity plane. Suspend the account and let SSO cascade. Read app-level assignments to verify the cascade reached every downstream service.
GitHub · AWS IAM · Jira · Notion · Slack
read+writeDirect API calls per surface. GitHub org membership + repo collaborator, AWS role bindings + long-lived access keys, Jira org roles, Notion guest access, Slack channel + workspace membership.
Backup service · File transfer
writeFor Google Workspace + Notion + Dropbox, contractor-owned files are transferred to the sponsoring manager per policy before account deletion. Captured in the revocation record.
Before and after, honestly.
Playbooks that pair with this one.
Employee Offboarding
Same deprovision mechanism for employees; contractor flow is the same skeleton with different data sources.
User Access Reviews (UAR)
Quarterly review catches whatever slipped past this daily flow.
License Reclamation
Reclaimed licenses from expired contractors feed the pool this playbook manages.
Answers about this playbook.
What if the contractor's end date isn't known at hire time?
HRIS gets a default (30 or 90 days per policy). If the engagement is open-ended, the sponsoring manager confirms every 90 days via the same nudge flow. No open-ended access without regular reconfirmation.
How does it handle contractors converting to employees?
HR marks the conversion in HRIS; Ivy cancels the pending deprovision and transitions the account to employee-standard entitlements. Access-history record is preserved for audit continuity.
What about contractors with break-glass access to production?
Elevated access requires per-request JIT (see security/just-in-time-jit-access), not standing access. If a contractor holds standing prod access, Ivy flags it in the weekly security digest as a control-gap regardless of engagement dates.
Can managers auto-extend without escalation?
Up to 90 days from the current end date. Beyond that requires manager-of-manager sign-off plus a written justification; policy prevents indefinite extensions by inattention.
What if a SaaS vendor doesn't support API-based revocation?
Ivy files a manual-revoke ticket to the SaaS owner with the specific action needed and tracks acknowledgement. Never claims coverage of a system it can't verify — the audit record shows manual steps explicitly.
See it run on your data.
Free plan, no credit card. Connect the systems this playbook needs and run it against a past event first.