now SIG Auth - Staff Software Engineer at Upbound, working on access control - Explored making Kubernetes access control more granular, found Cedar ⇒ Kubernetes Enhancement: Conditional Authorization (KEP-5681) ⇒ Prototype for implementing Kubernetes ACLs using Cedar - Newly-accepted Cedar maintainer, lots of new stuff to learn @luxas.dev
declarative rules, independent auditing and analysis - Permit and Forbid effects - Attribute-, Role-, and Relation-based Access Control @luxas.dev Sample policy from the article
declarative rules, independent auditing and analysis - Permit and Forbid effects - Attribute-, Role-, and Relation-based Access Control - (Optional) Sound type-checking through a Schema @luxas.dev Sample policy from the article
declarative rules, independent auditing and analysis - Permit and Forbid effects - Attribute-, Role-, and Relation-based Access Control - (Optional) Sound type-checking through a Schema - Sound, complete, and decidable SMT encoding @luxas.dev Sample policy from the article
decision, given: - a set of policies, - an entity store, - a (principal, action, resource) tuple, and - (optional) context data Uses an interpreter, which evaluates every policy AST expr to true, false, or an error. @luxas.dev
decision, given: - a set of policies, - an entity store, - a (principal, action, resource) tuple, and - (optional) context data Uses an interpreter, which evaluates every policy AST expr to true, false, or an error. Formally-proved invariants in Lean include: 1. Explicit allow 2. Forbid trumps permit 3. Order independence 4. Validation soundness 5. Termination @luxas.dev
Schema 2. Entities 3. Policies impl Arbitrary Runs nightly for approx. 12h, fresh data each run (DRT is also used to verify other components, not only the authorizer) Image from the article
Schema 2. Entities 3. Policies impl Arbitrary Minimized test corpus for integration tests in CI Runs nightly for approx. 12h, fresh data each run (DRT is also used to verify other components, not only the authorizer) Image from the article
policy formats have bounded (or no) lossiness - Policy formatting always succeeds, and roundtrips successfully - If got partial and batched authorizer decision ⇒ equals the main authorizer @luxas.dev
policy formats have bounded (or no) lossiness - Policy formatting always succeeds, and roundtrips successfully - If got partial and batched authorizer decision ⇒ equals the main authorizer - The parser never panics, nor emits internal errors @luxas.dev
and thus lots of room for error. Property-based testing helps ensure the conversions are correct. Cedar policy string CST AST EST JSON string PST @luxas.dev
these methods, but also 9 were not detected. The project does not release unless DRT+PBT is passing. Lean+DRT+PBT needed to graduate a feature from experimental. Code changes might need to be reflected in the Lean model. @luxas.dev
these methods, but also 9 were not detected. The project does not release unless DRT+PBT is passing. Lean+DRT+PBT needed to graduate a feature from experimental. Code changes might need to be reflected in the Lean model. Overall, the method has yielded high quality and assurance! @luxas.dev
who answering questions as I built the presentation, and to the Cedar maintainers that actually built all of this 😁 Try out Cedar at github.com/cedar-policy/cedar Cedar’s specification is available at github.com/cedar-policy/cedar-spec Join the community, use it and contribute if you like 😎 @luxas.dev