Skip to content
LearnAccess control list (ACL)

What is an access control list (ACL)?

Also known asACL
Example. Kiteline is a fictional company.
On this page

An access control list (ACL) is a list attached to a resource, such as a file, a bucket or a secrets environment, that names every person, group or system allowed to access it and what each of them may do, so that a request is allowed only if the requester appears on the list with the right permission.

The definition

NIST's glossary, quoting RFC 4949, defines an ACL as "a mechanism that implements access control for a system resource by enumerating the system entities that are permitted to access the resource and stating, either implicitly or explicitly, the access modes granted to each entity" (NIST glossary). Unix file permissions, S3 bucket ACLs and network firewall rules are all variations on the idea.

ACLs and roles

An ACL answers "who can access this?" by looking at the resource. Role-based access control answers "what can this person do?" by looking at their role. Most real systems combine them: the ACL of a resource lists roles or groups rather than individuals, and people get access through membership.

ACLRoles
Stored withthe resourcethe person or group
Good for"who can read production?""what can a developer do?"
Weaknessmany resources, many lists to keep rightroles that grant more than each resource needs

Who enforces the list

In most systems the server reads the ACL and decides. That makes the list only as trustworthy as the server: someone who can change the server's data can add themselves to the list, and nobody downstream will notice. Two things change that:

  • Signing the list. If an administrator signs the ACL with a key the server doesn't have, clients can check it, and a list the server edited fails the check.
  • Binding the list to keys. If being on the list means receiving a decryption key, and not being on it means not having one, the list is enforced by cryptography as well as by the server.

Common mistakes

  • Individual entries everywhere. Lists of named people drift as people move; groups or profiles age better.
  • No review. An ACL nobody reads collects former staff. See access review.
  • Trusting a list you can't verify when the server that serves it may be compromised.

The access list in Crunu

Every Crunu environment has an access list, written in a document called the environment head and signed by an owner or admin. It names each recipient, person, machine or service token, with their role or delivery method, and commits to the current environment key. A list can hold up to 5,000 entries.

Clients and agents check the signature before trusting anything, so the server can't add itself as a recipient, swap the environment key or rename prod to dev without breaking it. Recipients also get the environment key, or a sealed copy of their files, only if they are on the list. Clients remember the newest list they have seen and reject older ones, which is rollback protection; a device that has never seen the newer list can't detect a rollback.

The list has no expiry dates: access stays until someone removes it. How this fits with roles and profiles is in how to share .env files with your team, and the signing details in how encryption works.

Sources

From the blog

  • Migration

    Moving team secrets out of Ansible Vault

    Why teams move secrets out of Ansible Vault, how to export them with ansible-vault, bring them into per-environment storage, and keep playbooks working.

    Offboarding guide

  • Migration

    Migrating from EnvKey: moving your environments

    EnvKey Cloud closed on February 1, 2025, and the open source code hasn't changed since. How to export what's left, flatten it, and keep the encryption model.

    Who can decrypt guide

  • Security

    One key per environment: why dev must not open prod

    Server-side vaults separate dev and prod with permissions the server enforces. Why the boundary is stronger when each environment has its own encryption key.

    Sharing .env files guide