01 / system
Access policy API and source of truth
Every provisioning and authorization service had its own idea of who someone was and what they should get, so they drifted apart and nobody could say which one was right. I built the API and system of record for personas and access policies, with a single lifecycle model the others read from instead of keeping private copies. Once there was one answer, joiners, movers and leavers stopped being three separate problems.
IdentityPolicy-as-codeAPI
Read case study →02 / case note
Persona-based access control
Access was granted per person per system, which does not survive a reorg. I worked with system owners across the business to inventory the access levels that actually existed, defined personas over them, and standardized the team attribute in HR data so group membership derived from employment facts rather than from tickets. Changing teams changed access on its own.
Access modelingProvisioningStandards
03 / system
Self-service privileged access requests
Getting elevated access meant knowing who to ask. I built a chat-based workflow, in the tool engineers already had open, that handled scoped requests, approval, grant issuance and automatic expiry under one operating model across every privileged system in scope. Approval stayed human; the parts that were only ever bookkeeping stopped being manual.
JIT accessApprovalsAutomation
Read case study →04 / case note
Scoped secret writes
Secret writes had become the fastest-growing reason people asked for elevated access, which meant handing out broad privilege for a narrow task. The fix was not another approval step: I built a CLI that provisioned scoped write roles from existing ownership data, inside the identity the engineer already had, so there was nothing new to learn and nothing to escalate. Most of that category stopped needing privileged access at all.
SecretsLeast privilegeCLI
05 / case note
Just-in-time database access
Database work drove the other large share of recurring escalation, but session capture, credential rotation and audit logging are solved problems and rebuilding them would have been vanity. I ran the evaluation, the commercial negotiation and the internal deployment for a managed platform instead, then wired it to persona-based roles with write grants that expired on their own. I also wrote the onboarding runbook, so adding the next database did not route through me.
PAMBuild vs buyJIT access
06 / case note
Access certifications
Access reviews were only as good as what system owners remembered to declare, which is the wrong place to source audit evidence. Owners reviewed independently collected effective-access data against the written policy, with drift remediated before sign-off rather than noted beside it. The evidence came from the systems themselves, not from the people being reviewed.
IGAAudit evidenceAccess review
07 / case note
Machine credential inventory
Machine credentials were multiplying faster than human accounts, nobody owned them, and there was not even a list. I wrote the connectors that crawled each source into a single inventory with an owner attributed to every credential, plus the control indicators that scored hygiene and the findings worklist that fell out of them. Visibility first, and it was the input to automated cleanup.
Non-human identityConnectorsControl indicators
08 / case note
Breakglass review automation
Emergency access had drifted into being routine access. I made justifications mandatory and built a workflow that reviewed every session and summarized what the engineer actually did, which was a depth of review nobody was ever going to reach by hand. Then I interviewed the heaviest users, because the useful question was not who used it but which requests were habit that a better path would remove.
Privileged accessAutomationAccess review
09 / case note
AWS least privilege
Standing privileged AWS access had spread until it covered effectively all of engineering, which makes the privilege meaningless and the audit trail worse. I set up a recurring entitlement cleanup that expired access nobody was exercising, bringing the standing population down to a small reviewed group. Making it recurring was the point; a one-off cleanup drifts back within a quarter.
AWSLeast privilegeEntitlements
10 / case note
API authorization cleanup
High-risk internal platform APIs were reachable by far more people than needed them, and nobody had a map of who could call what. I built the authorization inventory that produced that map, which gave a working group what it needed to redesign roles deliberately instead of guessing. Access to the risky endpoints came back to the teams that actually used them.
AuthorizationRole designRisk reduction
11 / case note
Access governance metrics
We could not say how far identity governance had actually got, which makes prioritization guesswork and progress unprovable. I built a coverage funnel that tracked every system through four stages: inventoried, policy defined, connected, and governed. Leadership got a live view instead of an anecdote, and the next investment went where the funnel was narrowest.
MetricsGovernanceReporting