Why Access Patterns Matter More Than Access Lists
When a team member hands in their notice, the first instinct is usually to pull up the identity provider dashboard and disable their account. That step is necessary, but it is not enough. The real risk is not the account you know about. It is the set of permissions, service accounts, API keys, and shared credentials that have quietly accumulated around that person over months or years. An access pattern audit maps how an individual actually reaches systems, not just what they are authorized to touch. For small-to-mid-size technical teams running cloud infrastructure, this audit is a practical control that reduces the blast radius of a departure, whether voluntary or sudden.
Access patterns describe the habitual routes a person takes to interact with infrastructure: the jump boxes they favor, the IAM roles they assume, the database connection strings stored in their local environment, the SSH keys that were never added to the central vault. Adjacent concepts include privilege creep, credential rotation, and just-in-time access. The audit sits at the intersection of identity hygiene and operational continuity. It answers a simple question: if this person vanished tomorrow, what would break, and what would remain open?
Start with the Person, Not the Policy
Most access reviews begin with a list of group memberships and role assignments. That approach is tidy but incomplete. It tells you what a person should be able to do, not what they actually do. A pattern audit reverses the lens. It starts with the individual and traces every path they have taken into your systems over a defined lookback period, typically 30 to 90 days.
For a small team, this is not a big-data problem. It is a series of manual checks across a handful of surfaces. The goal is to produce a one-page summary that a successor or an on-call colleague could use to understand the departing person’s operational footprint. This document becomes the basis for access revocation, credential rotation, and knowledge transfer.
What to Collect Before the Conversation
Begin the audit before the departure is public. This is not about secrecy; it is about accuracy. Once someone knows they are leaving, their access patterns may shift. They might tidy up, or they might start pulling data they feel entitled to. Either way, the baseline changes. Run the audit during a normal work period to capture genuine usage.
Collect the following artifacts, ideally from logs or configuration files rather than by asking the person directly:
- IAM role and policy usage: Which roles have been assumed in the last 90 days? In AWS, CloudTrail event history can show
sts:AssumeRolecalls. In GCP, audit logs reveal service account impersonation. In Azure, the Activity Log surfaces role assignments. Focus on roles that were actually used, not just assigned. - API key and secret activity: Check the last-used timestamps on cloud provider access keys. An unused key is a revocation candidate. A key that is used daily from a specific IP range tells you something about the person’s workflow.
- SSH and VPN session logs: If you run a bastion host or a VPN concentrator, extract session records. Note the source IPs, the target hosts, and the frequency. A pattern of connecting to a production database server every Tuesday morning is a dependency you need to document.
- Database connection strings and local credentials: This is the hardest layer. Developers often keep
.envfiles, GUI database client configurations, and hard-coded credentials in scripts. You may not be able to audit this without a conversation, but you can prepare a checklist of known services and ask the person to walk through their local setup. - Third-party service access: Monitoring platforms, incident response tools, DNS management consoles, and billing dashboards often sit outside the primary identity provider. Check who has admin or billing access in each of these tools. A departing team member may be the only person with the owner role in your error-tracking SaaS.
Build the One-Page Access Map
Take the raw data and distill it into a structured summary. The format should be simple enough that you can recreate it in a shared document or a wiki page without special tooling. A table with four columns works well: System, Access Method, Last Used, and Successor Action.
For example:
- System: Production Kubernetes cluster (EKS) | Access Method: IAM role
prod-engineerviaaws eks update-kubeconfig| Last Used: 3 days ago | Successor Action: Ensure another engineer has equivalent role; rotate cluster CA if role had admin privileges. - System: Primary RDS instance | Access Method: Local psql client with password stored in
~/.pgpass| Last Used: 1 day ago | Successor Action: Rotate database user password; document read-replica access path for reporting queries. - System: DNS provider (Cloudflare) | Access Method: Account owner email and TOTP seed | Last Used: 14 days ago | Successor Action: Transfer account ownership; reset TOTP; add backup admin.
This map is not a policy document. It is a snapshot of reality. It should be reviewed with the departing person during an exit handoff, then used to drive the actual revocation steps. Keep it in your team’s operational runbook so that the next time someone leaves, you have a template and a baseline expectation of what a clean handoff looks like.

Rotate, Don’t Just Revoke
Revoking an IAM role or deleting a user account is a single action. Rotation is a process. When someone leaves, every credential they could have touched should be considered potentially compromised, even if you trust them completely. This is not about suspicion. It is about reducing the number of secrets that have ever existed in a human-readable form on a workstation that will soon be wiped or repurposed.
Prioritize rotation based on the access map. Start with credentials that were stored locally: database passwords, API keys in shell history, SSH private keys without passphrases. Then move to shared secrets that the person knew but that others still use. If your team shares a single AWS root user password, this is the moment to stop doing that. Create individual IAM users or, better, enforce SSO with short-lived tokens.
For service accounts and machine credentials, the audit often reveals a deeper problem: credentials that are tied to a person rather than a service. If a CI/CD pipeline uses an API key generated from someone’s personal account, that pipeline will break when the account is disabled. The access pattern audit surfaces these dependencies before they become incidents. The fix is to migrate the credential to a dedicated service account with a documented owner that is a role, not a person.
Handling the “Bus Factor” Credentials
Every small team has them: the DNS registrar login, the TLS certificate renewal email, the root account recovery codes. These are often held by the most senior person because they set them up years ago. The access pattern audit is the forcing function to move these into a shared, secure location. A physical safe with a printed recovery sheet works. So does an encrypted password manager with emergency access configured for at least two other people. The method matters less than the guarantee that no single departure can lock the team out of a critical control plane.
This is also the right time to verify that the recovery procedures actually work. A recovery checklist written before you need it is only valuable if the credentials it references are current. During the audit, test one high-priority recovery path end to end. If the checklist says “use the break-glass account to access the billing console,” log in with that account and confirm it still has the necessary permissions.
Document the Dependencies That Aren’t in Code
Infrastructure-as-code repositories capture a lot, but they rarely capture everything. Cron jobs running on a forgotten EC2 instance, a Lambda function that sends weekly reports, a DNS health check that alerts a personal email address—these are the dependencies that surface during an access pattern audit. They are often maintained by a single person who set them up as a temporary fix and never migrated them to the team’s standard tooling.
For each dependency you find, decide whether it should be formalized or decommissioned. If it is critical, add it to the team’s infrastructure-as-code repository and assign an owner. If it is obsolete, delete it during the handoff period so the departing person can confirm nothing breaks. The worst outcome is a mystery cron job that runs for six months after the person leaves and then fails silently because a hard-coded credential expired.

Integrate the Audit into Your Offboarding Rhythm
The access pattern audit is most effective when it becomes a standard step in offboarding, not a one-time panic response. For a team of five to twenty people, the audit takes two to four hours per departure. That is a reasonable investment when weighed against the cost of an unrotated credential causing a security incident or an outage.
Create a lightweight checklist that lives alongside your offboarding procedure. It should include:
- Pull 90-day IAM activity report for the individual.
- Review API key last-used timestamps; flag any active keys.
- Extract SSH and VPN session logs for the lookback period.
- Inventory third-party service roles (monitoring, DNS, billing, incident management).
- Complete the one-page access map.
- Rotate all credentials the person had access to, prioritizing local and shared secrets.
- Test one critical recovery path using the updated credentials.
- Update the team runbook with any new dependencies discovered.
Run a lightweight version of this audit quarterly, even when no one is leaving. Pick one team member at random and map their access patterns. This practice keeps the muscle memory fresh and catches privilege creep before it becomes a departure emergency. It also normalizes the process so that when someone does leave, the audit does not feel like an inquisition. It is just how the team maintains operational hygiene.
What the Audit Reveals About Your Team’s Maturity
Beyond the immediate security value, the access pattern audit is a diagnostic tool. The results tell you something about your team’s operational maturity. If every person has a unique, scoped IAM role and all access goes through a central identity provider, the audit is fast and the findings are clean. If you discover that three people share the same admin password and nobody knows who owns the production database credentials, you have identified a structural gap that will cause pain in other scenarios too—disaster recovery, onboarding, compliance reviews.
Use the audit findings to prioritize improvements. If you found five hard-coded credentials in local .env files, invest in a secrets manager integration for your development workflow. If you found that the team relies on a single person for DNS changes, cross-train someone else and document the process. These are not expensive, multi-quarter projects. They are afternoon fixes that compound over time.
When the Departure Is Unplanned
Not every departure comes with two weeks’ notice. A sudden illness, a layoff, or a contract termination can remove access to the person before the audit is complete. In these cases, the audit becomes a forensic exercise. You work from logs and configuration files without the person’s cooperation. This is harder, but the same framework applies. The difference is that you cannot ask clarifying questions, so you must be more conservative in your revocation and rotation decisions.
If you have been running quarterly spot audits, an unplanned departure is less disruptive. You already have a recent access map for each team member. You know which credentials are shared and which are individual. The forensic audit becomes a delta check rather than a from-scratch investigation. This is the resilience payoff: the work you did when things were calm reduces the chaos when they are not.

FAQ
How is an access pattern audit different from a standard access review?
A standard access review checks what permissions a person has been granted. An access pattern audit checks what permissions they actually use and how they use them. The review looks at group memberships and role assignments. The audit looks at log data, session records, and local configurations. The review is a compliance exercise. The audit is an operational continuity exercise. Both have value, but the audit catches dependencies that a review will miss.
What if we use single sign-on for everything? Do we still need this?
SSO reduces the surface area but does not eliminate it. Even with SSO, team members may have IAM user access keys for programmatic use, local database credentials, or direct logins to third-party services that bypass the identity provider. The audit verifies that SSO is actually enforced everywhere you think it is. It also surfaces the non-SSO access paths that have grown organically, such as a shared password for a legacy internal tool.
How do we audit access patterns for contractors or temporary staff?
Contractors should have time-bound credentials that expire automatically. The audit for a contractor focuses on verifying that the expiration mechanism works and that no long-lived credentials were issued as a workaround. Check that the contractor’s access was scoped to the specific systems they needed and that no cross-account roles or shared credentials were created to speed up their onboarding. If you find shortcuts, close them before the next contractor starts.
What is the biggest mistake teams make during offboarding?
The biggest mistake is treating offboarding as a single disable-account action rather than a credential rotation process. Disabling an account stops interactive logins but does nothing to protect secrets that were already extracted, shared, or hard-coded. Rotation closes the window. The second mistake is not documenting the dependencies discovered during the audit, which means the next person to leave triggers the same fire drill.
Next Steps for Your Team
Pick one team member this week and run a lightweight access pattern audit. Use the four-column format described above. Time yourself. If it takes more than two hours, your tooling or your documentation needs attention. If it surfaces a credential you did not know existed, you have just prevented a future incident. Write down what you found and share it with the team. The goal is not perfection on the first pass. The goal is to build a repeatable practice that makes every departure a little safer and every handoff a little smoother.
When you are ready to formalize the other side of operational continuity, write the recovery checklist before you need it. The access map and the recovery checklist work together: one tells you what to protect when someone leaves, the other tells you how to get back online when something breaks.