The uncomfortable fact at the centre of this system is that a substantial fraction of the services a small business uses will not tell you who has access, and the ones that will require an admin credential to ask. Both are manageable and neither should be glossed over.
Key takeaways
Three tiers: an API, an export somebody drops in, and a manual list.
Each service’s credential is read-only where the service supports it, and separate always.
A manual entry is marked unverified, dated, and counted in the coverage figure.
Coverage is reported as a percentage of spend, not of services.
Every collection is a dated snapshot, never an overwrite.
Three tiers
Fig 1. The three ways a user list arrives and the tier that travels with it. Keeping the distinction visible is what stops the review claiming more assurance than it has.
Storage
Database
Networking
Analytics
Front-end & mobile
The export tier
Between a full API and nothing there is a large middle: services whose admin panel has a download-users button but no programmatic access. Those are worth treating as verified rather than manual, because the list is machine-generated and complete — it just needs a person to press a button.
The practical handling is a monthly reminder to whoever owns that service, with a folder to drop the CSV into and a note of how old the current one is. An export that is four months old is reported as such, which is honest and also tends to produce a fresh one.
The credential problem
Fig 2. How one service’s list is collected. The credential scope is worth recording per service, because an access review tool holding several admin credentials is itself an access concern.
Database
App integration
Security & identity
Management
Analytics
Outside AWS
The irony is worth naming: a system built to review access frequently needs elevated access to several services in order to do it. That is unavoidable for the services that offer no read-only scope, and the honest response is to record which services those are and to keep each credential in its own secret with its own rotation, rather than one credential that can read everything.
It is also a reason the system has no write path anywhere. A tool holding admin credentials to eleven services and able to modify access would be a genuinely attractive target; one that can only list is much less so.
Coverage, honestly
Fig 3. How coverage is reported. Both percentages are true and they differ substantially, which is why the report carries the less flattering one first.
Storage
Machine learning
Analytics
Front-end & mobile
Outside AWS
Those two numbers usually differ a lot, because the services with good APIs tend to be the larger, more expensive ones and the manual ones tend to be small tools. Reporting only the spend figure would flatter; reporting only the service count would understate how much of the important estate is covered.
Reporting both, with the service count first, is the version that keeps somebody honest about the three services nobody can verify.