ory / oathkeeper

A cloud native Identity & Access Proxy / API (IAP) and Access Control Decision API that authenticates, authorizes, and mutates incoming HTTP(s) requests. Inspired by the BeyondCorp / Zero Trust white paper. Written in Go.
https://www.ory.sh/?utm_source=github&utm_medium=banner&utm_campaign=hydra
Apache License 2.0
3.26k stars 360 forks source link

Moving forward with ORY Oathkeeper #177

Closed aeneasr closed 5 years ago

aeneasr commented 5 years ago

As ORY Oathkeeper adoption picks up, we've made a couple of observations:

Thus, we think a refactoring of the ORY Oathkeeper vision is up next. There are some goals:

First, we believe that Access Rules are something static. They should be updated when the application changes and they should be reviewed by an at least 4 eye principle. One of the best ways to achieve that is by allowing ORY Oathkeeper to read (and watch) rules from the filesystem. This would allow workflows that run on top of Git and a CI/CD pipeline.

Second, we want to make ORY Oathkeeper as lightweight as possible. Therefore, we will remove the SQL dependency and replace it with the following retrieval strategies:

This would completely eliminate the need for oathkeeper serve api and reduce deployment complexity significantly. Instead, there will be one command oathkeeper serve that runs two ports:

Third, we want to support 3rd party credential stores like Vault, AWS/GCP/Azure KMS for signing tokens and Headers, Cookies, ...

Fourth, what's known as "credentials issuers" will in the future be called "transformers" as they transform the incoming request.

Fifth, we want to support configuration reloading without downtimes. This follows development in ORY Hydra and ORY Hive.

Please let us know what you think about this!

kminehart commented 5 years ago

I like all of this. Especially refactoring away the SQL storage.

This would make it really easy to have a Terraform provider to define Oathkeeper rules (yay gitops)

wesleyfantinel commented 5 years ago

Looking forward for this.

I'am planing to implement Oathkeeper in one Kubernetes cluster running with Hydra, but the fact that it needs a SQL storage for the rules, makes harder to fit into our gitops and CI/CD flows. Configuring the access rules from file system or k8s CRDs would solve this drawback.

Plus, working with Ambassador (which is on top of Envoy) looks like to achieve the authentication process of upcoming requests, we only need a service (https://www.getambassador.io/user-guide/auth-tutorial/#authentication), nothing to do with an reverse proxy.

Anyway, appreciate your efforts. We'll do my best to help.

piotrmsc commented 5 years ago

I like it too! Sounds like a really nice plan! Would be nice also to integrate it "natively" with istio mesh. Perhaps via mixer adapter - basically to get rid of an additional reverse proxy and make use of envoy and istio functionality.

aeneasr commented 5 years ago

What would be required for it to work natively with istio? We/I haven't used Istio really so far so it would be really cool if you could share some insights!

piotrmsc commented 5 years ago

First thought is mixer adapter and its authorization template, however, this has a small drawback because it's a compiled in adapter. So mixer would have to be compiled and would be nice if in the end, it was part of istio official builtin adapters :)

More info about adapters here

aeneasr commented 5 years ago

I haven't worked with istio/envoy/mixer extensively, but I think that I heard that they support an adapter that works with HTTP APIs, which would most likely be compatible with Oathkeeper's Judge API. If not, happy to figure out a way to make it work natively with Istio!