Distributed Systems & Enterprise ResiliencePlaybook3 min readUpdated September 2026

Building a Role Matrix for a Distributed System

Access control in a distributed system usually starts as a handful of ad hoc checks scattered across services, and it stays that way until an audit, or an incident, forces someone to write it all down in one place.

This is a walkthrough for building that document, a role matrix, before you're forced to build it under pressure.

Vendors Covered in this Article

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

List every role before you list a single permission

Start with who actually needs access, not what they might need someday. Pull the list of humans and services touching your system and group them by the job they do: engineer on call, support staff resolving tickets, the billing service reading customer records, the reporting job that runs nightly.

Resist the urge to create a role for every individual person. A handful of well-defined roles that map to actual jobs is easier to audit than fifty one-off permission sets built up over two years of individual requests.

Map each role to the narrowest permission set that works

For each role, write down exactly what it needs to read, write, and where. The support role probably needs read access to customer records and write access to a ticket system, not write access to billing. The nightly reporting job needs read access to specific tables, not admin rights on the whole database.

Where a role seems to need broad access, dig into why. Usually it's because a narrower permission wasn't available yet, not because the job genuinely requires that much reach.

Service accounts need the same discipline as people

It's easy to focus a role matrix on human users and wave through service-to-service access with a shared API key that can do anything. That's usually the bigger risk, since a compromised service account often has broader, longer-lived access than any single employee.

Give each service its own credential scoped to exactly what it calls, not a shared key reused across five services because provisioning a new one felt like extra work at the time.

A worked example: mapping roles for a growing engineering team

Say a twelve-person engineering team is splitting into three feature teams, each owning its own services. Before the split, most engineers had broad access because the team was small enough that it didn't seem to matter.

The matrix for the new structure gives each team full access to its own services, read-only access to shared infrastructure they depend on, and no access at all to the other teams' production databases unless there's a specific, logged reason. On-call engineers get temporary elevated access during their rotation, not permanently.

Where role matrices go stale

  • Access granted for a one-time project that never gets revoked once the project ends
  • A role's permissions expanding gradually over time as small exceptions pile up
  • New hires copied from an existing employee's access instead of assigned from the matrix
  • Contractors and former employees left with valid credentials well past their last day

Any one of these turns a clean matrix into an inaccurate one within a few months if nobody's checking.

Review the matrix on a schedule, not just when something breaks

A quarterly access review, checking every role against who actually still needs it, catches drift before it becomes a real exposure. This is exactly the kind of recurring evidence that platforms like Vanta are built to automate, turning a manual spreadsheet review into a scheduled, logged process.

Whether you automate it or not, the review has to actually happen. A policy that says quarterly reviews occur, with no calendar reminder and no owner, is a policy that gets skipped the first busy quarter.

Build a break-glass path instead of leaving a back door open

Every access model eventually meets a 2 a.m. incident where the on-call engineer needs access they don't normally have, right now, with no time for a ticket. Without a designed exception, the usual outcome is a standing admin credential kept around just in case, which defeats the rest of the matrix.

A break-glass process solves this properly: a short-lived credential, granted through a specific request that's logged and time-boxed, expiring on its own after a few hours whether or not anyone remembers to revoke it. The access still happens, but it happens through a path that leaves a record instead of through a permanent exception nobody reviews. Treat every use of it as an input to the next access review, since a role that needs break-glass access often shouldn't be in the matrix the way it's currently defined.

Executive Capability Standard

What Good Looks Like

Good access control means every role maps to the narrowest permission set that lets it do its job, service accounts are scoped individually, and the matrix gets reviewed on a schedule instead of only after an incident.

Building The Capability (5-Stage Skill Ladder)

1. Learn:List every human and service account with access to your production systems and group them into the roles they actually represent.
2. Do Manually:Walk the matrix by hand once, comparing each role's granted permissions against what that role has actually used in the last quarter.
3. Delegate:Give a senior engineer ownership of the access-review calendar, with authority to revoke unused access without needing a meeting first.
4. Automate:Wire role assignment into your identity provider so new hires and offboarding update access automatically instead of by ticket.
5. Buy:Bring in a platform to handle continuous access-review evidence, or a security consultant to design the matrix if your current access is too tangled to map by hand.

How to Get Started

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

Vanta

Vanta fits once you want the quarterly access review to run itself and produce evidence automatically instead of living in a spreadsheet someone has to remember to update.

Visit Vanta→

Frequently Asked Questions

How many roles should a mid-sized engineering team have?

Usually somewhere between five and fifteen, covering the distinct jobs people and services actually do. If you're approaching one role per person, the matrix has stopped doing its job of simplifying access and become just as hard to audit as no matrix at all.

Should founders and the CTO have unrestricted access to everything?

It's common early on, but worth narrowing as the team grows. Broad standing access from the most senior people is often the path an attacker would actually want, and it sets a precedent that makes the rest of the matrix harder to enforce.

What's the fastest way to find over-privileged accounts right now?

Pull a list of every account with admin or write access to production and check each one against whether that person or service actually used that level of access in the last 90 days. Anything unused that long is a strong candidate for narrowing.

Does a small team really need a formal break-glass process?

Even a two-line runbook, who can grant emergency access and how it gets revoked, beats the default of everyone quietly keeping standing admin rights just in case. It's the difference between an exception you can point to later and one nobody remembers granting.

About the numbers

This guide doesn't quote a sourced benchmark. Figures in it are estimates or general guidance, so check them against your own numbers.

Related Guides