Role-based access control like it was meant to be
tailscale.com
tailscale.com
In the filesystem example I can visit any node in thee tree and set an ACL on it, optionally recursively. This gives me a lot of flexibility to slice and dice permissions in a complex potentially-multi-tenant resource model. Tags appear to lead to a flattened view of resources - all resources with tag foo are treated the same, regardless of their location in the model. It would be nice to see the author acknowledge this and expand on their examples to see how they might incorporate relational data models.
For a system that implements RBAC, the objects can represent information containers e.g. files/directories within an operating system, locks on columns/rows/tables within a database management system, tags on resources within an application, exhaustible system resources such as storage or CPU cycles, etc.
The ANSI RBAC spec is here: http://www.list.gmu.edu/journals/tissec/ANSI+INCITS+359-2004...
But yeah, ephemeral/contextual stuff can be really important too, though getting as far as a decent RBAC system does tend to buy you a lot over most statuses quo.
This is especially painful in B2B businesses where your customers have their own set of requirements and access controls (this department can do X, but these 3 people also have access to these other 2 departments etc). The hidden cost of supporting this plus the audit overhead really stacks up [1]
Not being one for building the same system over and over, we are now working on an open-source, self-hosted access control service - https://cerbos.dev
[1] https://cerbos.dev/blog/the-hidden-costs-of-user-authorizati...
> so you can used your favorite IDE
Would love your feedback!
Tailscale’s blog is one of the best I’ve seen (along with Fly). They do an amazing job simplifying technical content
The follow up question I have is: who decides the group members? That becomes the new point of failure. In the examples here it appears to be HR. How can one secure deciding those group members so that say, Joe in HR doesn't install some malware, adds himself to Eng + Executive, and then go wild?
Fun factoid: Even if roles aren't explicitly compiled to ACLs -- which is really an arbitrary implementation artifact, not a design requirement -- a lot of ABAC systems (and their policies) like these can be provably converted on-the-fly. This matters bc (1) it frees up implementations to be things like in-DB RLS policies (so you don't need to leave the DB for authorization decisions, as recent Google-clones and auth startups slow your app down with), and (2) you can send the policies (vs ACL 'binaries') to friendly verifiers like Z3 for fast and easy interactive analysis/querying/auditing/verification. We wrote a paper showing XACML -> BDDs for that ("Margrave") in what now feels like the stone age, and AWS more recently redid it for IAM via Z3.
IMO, getting this into postgres could be a pillar for a really awesome DBaaS/PaaS startup: imagine Django or Rails w built-in scale-to-zero multitenancy & rich collaboration, which are normally a PITA
Changes to those groups happen solely by the PR process.
HR, is only responsible for adding them to the single group which allows single sign on access not does not give any other access.
It's not very inconvenient these days, and those distros include tools that will write policies for you.
Debian and Ubuntu distros use AppArmor.
OpenSUSE MicroOS/Kubic also seem to have SELinux enabled by default, but I believe Leap and Tumbleweed use AppArmor by default.
Other than that, I don't think it's hugely popular. Alpine, Arch, and Slackware have neither enabled by default. NixOS has a working group for SELinux but I'm not sure what state it's in.
We just need 3 entities here: - UserGroup - ResourceGroup - Entitlement (Which is basically a mapping of userGroupId and resourceGroupId along with permissions like Widget.CREATE, Report.DOWNLOAD etc etc)
All the entitlements will be granted at Group level and no nesting of groups.
Has anybody seen any real implementations of this model that are applied on the lowest possible level and still meets performance requirements for whole system?
I'm asking because I have seen few simpler ACL system, which when applied to Full Text Search Systems with power users enabled to define and modify security schemas, brought the system to its knees. I think the problem is that reading search results from any kind of search engine with dynamic read (entry visibility) rules applied on top seems like very hard problem to solve in performant way (while preserving theoretical flexibility).
So if you want to grant access to reports to a role, you would set the ACLs on the reports folder, not on individual reports.
Object-level permissions feels too fine-grained for me in many cases. We probably need this for actual file systems, but those are quite different from something like an enterprise application. The file system has lots of "irrelevant" files for the user that might need specific permissions, and you can't arbitrarily reorganize files without breaking stuff.
This works for a lot of use cases. ACLs aren't zero-sum, so it's fine to layer them. As an example, Dropbox Paper has some interesting security properties.
A Document can have ACLs that are tied to the Document itself. Things like "Only let these specific people read / edit the document" or "Only users within our organization". There are also directories - your private directory isn't browsable by others, but you can have organization-wide directories.
And then finally there are document capabilities. I can share a URL to a Document and, regardless of its directory (even private) that Document can be viewed. The article calls this MAC, which I guess could be correct? I've never heard the terms conflated.
Also, existing file systems are built around DAC so it's hard to really think of exactly how you'd apply object level permissions. Apparmor, a MAC, lets you specify interesting things like 'owner'. SELinux gives you object tagging, RBAC, etc. They have their tradeoffs.
I actually had to write a permission system for a collaborative b2b tool, and the answer for tags was to tied them to a folder.
When you add nested folders, things become easier to maintain. You have rights on folders or files and, and you have tags on folders which can grant rights too
? Tags are associated with a role. Someone in the "Engineering" role can apply a "source-code" tag to a file. There's no such thing as a group, but rather everyone fills a role.
So when you're auditing permissions, you can check to see if the tags have the appropriate permissions, the roles have appropriate tags, and users have appropriate roles.
https://docs.zerotier.com/zerotier/rules/
There's also some things you can do here for security that are unique, like sending copies of select traffic to security monitoring nodes or transparently redirecting traffic.