
An agency access control matrix maps roles to the minimum permissions they need across client domains, DNS, hosting, CMS, repositories, deployments, databases, backups, email, payments, analytics, monitoring, and support tools. It replaces shared “admin for everything” accounts with named, auditable access and a controlled emergency path.
The client should retain appropriate organisational ownership. The agency receives only the access required by the contracted service, reviews it regularly, and revokes it when roles or contracts change.
Typical roles:
People can hold more than one role, but permissions should still derive from the role and project.
Legend: R read, C change, A approve, E emergency, — no access.
| System | Client owner | Service manager | Developer | Release manager | On-call | Monitor | Vendor |
|---|---|---|---|---|---|---|---|
| Domain registrar | A/C | R | — | — | E by runbook | R expiry only | — |
| DNS/CDN/WAF | A | R | R | C | E/C | R | limited C |
| Hosting/cloud | A | R | R | C | E/C | R metrics | limited |
| CMS content | A/C | R | C non-prod | C prod | E/C | R health | limited |
| Repository | R | R | C branch/PR | A/C release | R/C emergency | — | scoped C |
| CI/CD | R | R | R/run | A/C | E/C | R status | scoped |
| Production database | A | — | R via approved path | migration only | E | health only | — |
| Backups | A | R status | — | R | E restore | R status | provider role |
| Email provider | A/C | R | scoped test | C config | E/C | controlled mailbox | limited |
| Payment platform | A/C | — | test mode | integration config | E read | synthetic test only | limited |
| Analytics/tag manager | A/C | C | R | release-controlled | — | synthetic exclusion | scoped C |
| Monitoring | R | A/C | R | C maintenance | A/C | C | — |
This is a discussion template, not a universal permission prescription. Adapt to platform capabilities and separation-of-duty needs.
The account holder displayed by a vendor may not reflect contractual ownership. Record:
Avoid domains, cloud accounts, or payment systems owned solely by an agency employee.
Prefer:
If a legacy system permits only one shared login:
Store metadata without exposing the secret:
Secret reference: [vault path/record ID]
Client/site: [ID]
Purpose: [value]
System and environment: [value]
Owner: [role]
Consumers: [roles/services]
Privilege: [scope]
Created/last rotated: [date]
Expiry/review: [date]
Revocation method: [runbook]
Dependencies affected by rotation: [list]
Emergency contact: [role]
OWASP recommends lifecycle management for creation, rotation, revocation, expiration, access control, auditing, and break-glass recovery.
request → scope and reason → owner approval
→ time-limited role → authenticated session
→ logged action → review → automatic revocation
For routine maintenance, make the normal safe path easier than bypassing it. Excessively slow access procedures encourage credential sharing.
Use only when delay creates greater risk than temporary elevated privilege.
The runbook should define:
Do not discover during an outage that recovery credentials depend on the failed identity provider or unavailable employee.
Review date: [UTC]
Scope: [clients/systems]
Reviewer: [role]
- [ ] Every active user has a current role and client assignment.
- [ ] Dormant and duplicate accounts are removed.
- [ ] Shared credentials have a documented exception.
- [ ] Former employees/vendors have no active sessions or tokens.
- [ ] Privileged service accounts have owners and rotation/review dates.
- [ ] Recovery contacts belong to the correct organisation.
- [ ] Break-glass access was tested according to policy.
- [ ] Monitoring does not have unnecessary production-change privilege.
- [ ] Offboarded clients are removed from agency systems.
Exceptions:
- [risk, owner, approval, expiry, compensating control]
An agency uses the same WordPress administrator password on 30 client websites because it simplifies support. One contractor device is compromised, so the agency cannot determine which sites were accessed and must rotate all 30 during an incident.
Per-site named accounts, MFA, central offboarding, and independent read-only monitoring would have reduced both blast radius and investigation cost.
.env files indefinitely;Choose explicitly based on the commercial model and jurisdiction, but avoid accidental ownership by individuals. Ensure the client can regain control through a documented process.
On role/client changes and periodically; quarterly is a common operational starting point. High-risk systems may need more frequent or continuous controls.
No. MFA helps protect authentication but does not fix excessive privilege, shared accounts, weak recovery, stale tokens, or missing audit logs.
External black-box monitoring often needs none. Internal health checks may use narrowly scoped credentials. Separate observation from administration whenever practical.
Reviewed: 8 August 2026.
Next: Website handover between agencies and client website inventory.
Pingvera can monitor client websites without broad inbound server access. Use narrowly scoped integrations only for the specific internal evidence the agency and client have approved.
Pingvera watches whether an online business actually works — uptime, checkout, orders, domain, SSL and server — and alerts you in Telegram, email or a webhook before a customer has to tell you.
Start freeRead next: Blameless Postmortem Template for Web Agencies · Website Incident Report Template for Agencies · Client Website Monitoring Policy Template · Pingvera vs WP Umbrella: Which Fits Your Agency? · Run a free site check.