Permission management is one of those infrastructure problems that sneaks up on you. It starts innocently enough—a colleague needs access to a document, a client requires visibility into a project, a partner gets invited to a workspace. At the time, it makes perfect sense. But months later, when someone leaves the company or switches teams, nobody remembers what they still have access to.
The Access Creep Problem
Modern development workflows involve an explosion of systems: GitHub repos, AWS accounts, Slack channels, Notion workspaces, CI/CD pipelines, database dashboards, and on and on. Every time someone needs temporary access, we grant it. When the need passes, we forget to revoke it. That former contractor still has read access to your production S3 buckets. The intern from two years ago can still comment on your private repos. Your audit logs are a graveyard of permissions that should have been cleaned up. The problem compounds when you factor in the sheer number of systems modern teams use. A typical engineering organization might have 50+ tools with their own permission models, and each one represents a potential access vector that nobody is actively tracking. GitHub alone can accumulate hundreds of inactive members with repository access, former employees still on your AWS account with IAM roles they no longer need, and SSO providers holding sessions for users who haven't logged in but never got deprovisioned.
Why This Matters for Builders
If you're running infrastructure, this isn't just an academic security concern—it's operational risk sitting in plain sight. Forgotten permissions create blast radius during incidents: compromised accounts have more access than they need, making lateral movement easier. They also complicate compliance audits and can violate least-privilege principles that your security team is trying to enforce. When a breach happens, every unnecessary permission is an additional vector for attackers to move through your systems. A compromised laptop with read-only S3 access is inconvenient; the same laptop with write access to both S3 and your CI/CD pipeline is a full-blown incident. Auditors don't care that you meant to clean up those permissions—they see active credentials for contractors who finished work six months ago and customer data in shared drives accessible to accounts created during onboarding.
Practical Steps to Tame Permission Sprawl
The fix isn't a single tool—it's discipline baked into your workflows. Start by auditing what exists: run access reviews quarterly, export permissions from your key systems (GitHub, AWS IAM, GCP IAM, your SSO provider), and cross-reference who has left the company recently. Then implement just-in-time access patterns where possible—temporary elevated permissions that auto-expire rather than persistent grants. For temporary access, tools like AWS STS and IAM Roles Anywhere can generate time-limited credentials on demand. Teleport, StrongDM, and similar privileged access management platforms offer session recording alongside just-in-time provisioning. Even simpler: GitHub's organization roles allow you to set repository access to 'read' by default and elevate only when needed. AWS Access Advisor shows which IAM roles haven't been used in the past 30 days—start by revoking those.
Key Takeaways
- Audit existing permissions regularly, not just when onboarding new team members
- Use temporary/just-in-time access for sensitive resources instead of permanent grants
- Document the 'why' behind every permission so future you knows what can be safely revoked
- Build permission reviews into your offboarding and role-change processes
The Bottom Line
Permission management is a solved problem in theory, but most teams haven't implemented it in practice. Stop treating access grants as fire-and-forget operations—treat them like database migrations that need cleanup scripts. Your future self (and your security team) will thank you.