You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -101,8 +101,8 @@ OPAL is available both as **python packages** with a built-in CLI as well as pre
101
101
102
102
### <a name="why-use-opal"></a> Why use OPAL
103
103
- OPAL is the easiest way to keep your solution's authorization layer up-to-date in realtime.
104
-
- OPAL aggregates policy and data from across the field and integrates them seamlessly into the authorization layer.
105
-
- OPAL is microservices and cloud-native (see [key concepts](#key-concepts) below)
104
+
- OPAL aggregates policy and data from across the field and integrates them seamlessly into the authorization layer.
105
+
- OPAL is microservices and cloud-native (see [key concepts](#key-concepts) below)
106
106
107
107
### Why OPA + OPAL == 💪 💜
108
108
OPA (Open Policy Agent) is great! It decouples policy from code in a highly-performant and elegant way. But the challege of keeping policy agents up-to-date is hard - especially in applications - where each user interaction or API call may affect access-control decisions.
@@ -112,15 +112,15 @@ OPAL runs in the background, supercharging policy-agents, keeping them in sync w
112
112
- A Policy Engine:
113
113
- OPAL uses a policy-engine, but isn't one itself
114
114
- Check out <a href="https://www.openpolicyagent.org/" target="_blank">Open-Policy-Agent</a>, and <a href="https://www.osohq.com/" target="_blank">OSO</a>
115
-
116
-
- Large scale Global FGA:
115
+
116
+
- Large scale Global FGA:
117
117
- Currently OPAL is not meant for managing ridiculous (>100GB) amounts of data within one layer. Though it can complement a CDN to achieve a similar result - [see below](#large-scale-fga).
118
118
- Check out <a href="https://research.google/pubs/pub48190/" target="_blank">Google-Zanzibar</a>
119
-
120
-
- Fullstack authorization:
119
+
120
+
- Fullstack authorization:
121
121
- OPAL and OPA essentially provide microservices for authorization
122
-
- Developers still need to add control interfaces on top (e.g. user-management, api-key-management, audit, impersonation, invites) both as APIs and UIs
123
-
- Check out <a href="https://authorizon.com" target="_blank">**auth**orizon</a>
122
+
- Developers still need to add control interfaces on top (e.g. user-management, api-key-management, audit, impersonation, invites) both as APIs and UIs
123
+
- Check out <a href="https://permit.io" target="_blank">Permit.io</a>
124
124
125
125
126
126
## <a name="architecture"></a>📡 Architecture
@@ -130,7 +130,7 @@ OPAL runs in the background, supercharging policy-agents, keeping them in sync w
130
130
131
131
See a [more detailed diagram](https://i.ibb.co/kGc9nDd/main.png)
132
132
- ### OPAL consists of two key components that work together:
133
-
1. OPAL Server
133
+
1. OPAL Server
134
134
- Creates a Pub/Sub channel clients subscribe to
135
135
- Tracks a git repository (via webhook / polling) for updates to policy (or static data)
136
136
- Additional versioned repositories can be supported (e.g. S3, SVN)
@@ -140,9 +140,9 @@ See a [more detailed diagram](https://i.ibb.co/kGc9nDd/main.png)
140
140
141
141
2. OPAL Client
142
142
- Deployed alongside a policy-agent, and keeping it up to date
143
-
- Subscribes to Pub/Sub updates, based on topics for data and policy
143
+
- Subscribes to Pub/Sub updates, based on topics for data and policy
144
144
- Downloads data-source configurations from server
145
-
- Fetches data from multiple sources (e.g. DBs, APIs, 3rd party services)
145
+
- Fetches data from multiple sources (e.g. DBs, APIs, 3rd party services)
146
146
- Downloads policy from server
147
147
- Keeps policy agents up to date
148
148
@@ -184,19 +184,19 @@ See a [more detailed diagram](https://i.ibb.co/kGc9nDd/main.png)
184
184
OPAL is built on the shoulders of open-source giants, including:
185
185
- [Open Policy Agent](https://www.openpolicyagent.org/)- the default policy agent managed by OPAL.
186
186
- [FastAPI](https://github.com/tiangolo/fastapi) - the ASGI API framework used by OPAL-servers and OPAL-clients.
187
-
- [FastAPI Websocket PubSub](https://github.com/authorizon/fastapi_websocket_pubsub) - powering the live realtime update channels
187
+
- [FastAPI Websocket PubSub](https://github.com/permitio/fastapi_websocket_pubsub) - powering the live realtime update channels
188
188
- [Broadcaster](https://pypi.org/project/broadcaster/) allowing syncing server instances through a backend backbone (e.g. Redis, Kafka)
189
189
190
190
## <a name="design"></a> 🎨 Design choices
191
191
192
192
- ### Networking
193
-
- OPAL creates a highly efficient communications channel using [websocket Pub/Sub connections](https://github.com/authorizon/fastapi_websocket_pubsub) to subscribe to both data and policy updates. This allows OPAL clients (and the services they support) to be deployed anywhere - in your VPC, at the edge, on-premises, etc.
193
+
- OPAL creates a highly efficient communications channel using [websocket Pub/Sub connections](https://github.com/permitio/fastapi_websocket_pubsub) to subscribe to both data and policy updates. This allows OPAL clients (and the services they support) to be deployed anywhere - in your VPC, at the edge, on-premises, etc.
194
194
- By using **outgoing** websocket connections to establish the Pub/Sub channel most routing/firewall concerns are circumnavigated.
195
195
- Using Websocket connections allows network connections to stay idle most of the time, saving CPU cycles for both clients and servers (especially when comparing to polling-based methods).
196
196
197
197
- ### Implementation with Python
198
198
- OPAL is written completely in Python3 using asyncio, FastAPI and Pydantic.
199
-
OPAL was initially created as a component of [**auth**orizon.com](https://www.authorizon.com), and we've chosen Python for development speed, ease of use and extensibility (e.g. fetcher providers).
199
+
OPAL was initially created as a component of [Permit.io](https://permit.io), and we've chosen Python for development speed, ease of use and extensibility (e.g. fetcher providers).
200
200
- Python3 with coroutines (Asyncio) and FastAPI has presented [significant improvements for Python server performance](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=composite&a=2&f=zik0zj-qmx0qn-zhwum7-zijx1b-z8kflr-zik0zj-zik0zj-zijunz-zik0zj-zik0zj-zik0zj-1kv). While still not on par with Go or Rust - the results match and in some cases even surpass Node.js.
201
201
202
202
- ### Performance
@@ -214,7 +214,7 @@ OPAL is built on the shoulders of open-source giants, including:
214
214
- OPAL was built initially with OPA in mind, and OPA is mostly a first-class citizen in OPAL. That said OPAL can support various and multiple policy agents, even in parallel - allowing developers to choose the best policy agent for their needs.
215
215
216
216
- ### <a name="large-scale-fga"></a> FGA, large scale / global authorization (e.g. Google Zanzibar)
217
-
- OPAL is built for fine grained authorizon (FGA), allowing developers to aggregate all and any data they need and restructure it for the authorization layer.
217
+
- OPAL is built for fine grained authorization (FGA), allowing developers to aggregate all and any data they need and restructure it for the authorization layer.
218
218
- OPAL achieves this by making sure each policy-agent is loaded with only the data it needs via topic subscriptions (i.e: data focus and separation).
219
219
- Examples of data separation: the back-office service doesn't need to know about customer users, a tenant specific service doesn't need the user list of other tenants, ...
220
220
- That said OPAL is still limited by OPA's [resource utilization capacity](https://www.openpolicyagent.org/docs/latest/policy-performance/#resource-utilization).
@@ -228,22 +228,22 @@ OPAL is built on the shoulders of open-source giants, including:
228
228
- If you'd like to use OPAL or some of its underlying modules for other update cases - please contact us (See below), we'd love to help you do that.
229
229
230
230
- ### Administration capabilities and UI
231
-
- We've already built policy editors, back-office, frontend-embeddable interfaces, and more as part of [**auth**orizon.com](https://www.authorizon.com).
232
-
- We have plans to migrate more parts of [**auth**orizon.com](https://www.authorizon.com) to be open-source; please let us know what you'd like to see next.
231
+
- We've already built policy editors, back-office, frontend-embeddable interfaces, and more as part of [Permit.io](https://permit.io).
232
+
- We have plans to migrate more parts of [Permit.io](https://permit.io) to be open-source; please let us know what you'd like to see next.
233
233
# <a name="community"></a>
234
234
235
-
## Joining the community
236
-
- We are eager to hear from you 😃
237
-
- Raise questions and ask for features to be added to the road-map in our [Github discussions](https://github.com/authorizon/opal/discussions)
238
-
- Report issues in [Github issues](https://github.com/authorizon/opal/issues)
235
+
## Joining the community
236
+
- We are eager to hear from you 😃
237
+
- Raise questions and ask for features to be added to the road-map in our [Github discussions](https://github.com/permitio/opal/discussions)
238
+
- Report issues in [Github issues](https://github.com/permitio/opal/issues)
239
239
- Chat with us in our [Slack community](https://join.slack.com/t/opal-access/shared_invite/zt-nz6yjgnp-RlP9rtOPwO0n0aH_vLbmBQ)
240
240
241
241
## Contacting us (the authors)
242
242
- We love talking about authorization, open-source, realtime communication, and tech in general.
243
-
- Feel free to reach out to us on our [GitHub discussions](https://github.com/authorizon/opal/discussions) or directly over [email](mailto:or@authorizon.com).
243
+
- Feel free to reach out to us on our [GitHub discussions](https://github.com/permitio/opal/discussions) or directly over [email](mailto:or@permit.io).
244
244
## Contributing to OPAL
245
245
- Pull requests are welcome! (please make sure to include *passing* tests and docs)
246
-
- Prior to submitting a PR - open an issue on GitHub, or make sure your PR addresses an existing issue well.
246
+
- Prior to submitting a PR - open an issue on GitHub, or make sure your PR addresses an existing issue well.
0 commit comments