Quick overview
Run a quarterly access review campaign: send each manager per-entitlement attestation links, log every decision in an audit log, chase overdue attestations, then close out the campaign with a deprovision list for revoked access.
How it works
- Runs on a quarterly schedule (or manual start) to launch an access review campaign.
- Reads existing review tasks from Google Sheets to decide whether to resume an already-open campaign or create a new one.
- For a new campaign, loads entitlements from Google Sheets, writes one open review task per unique entitlement, and emails each manager a Gmail attestation with per-entitlement Approve/Revoke webhook links.
- Runs daily to reload review tasks and audit history from Google Sheets, then sends Gmail reminders to managers and escalations to the compliance address based on task age, logging each chase event.
- Receives manager decision clicks via an n8n webhook, rejects invalid or bot-prefetched requests, and logs invalid attempts to the Google Sheets audit log.
- For valid decisions, verifies the entitlement is still open, matches the manager, and is within the 90-day window, then updates the Google Sheets task row and appends a decision event to the audit log.
- When all tasks in a campaign are decided, writes revoked items to a Google Sheets deprovisioning list, creates a Google Docs evidence document, emails a closeout summary via Gmail, and logs the campaign-closed event.
Setup
- Create a Google Sheets workbook with tabs for Entitlements, ReviewTasks, AuditLog, and DeprovisionActions, and update the sheet ID and tab names in the Workflow Configuration.
- Add Google Sheets, Gmail, and Google Docs credentials in n8n, and set a Google Drive folder ID where the evidence document should be saved.
- Set the compliance email address, reminder/escalation day thresholds, and the public webhook base URL in Workflow Configuration.
- Copy your n8n webhook base URL to match your instance hostname so the decision links resolve correctly (path: /webhook/access-review-decision).
- Populate the Entitlements tab with required fields (at least user_email, system, role, manager_email) to avoid skipped rows on launch.