Octelium is a unified zero trust architecture. It can seamlessly provide an effortless zero trust, identity-based, application-layer (L7) aware secret-less access (read more about secret-less access here), via both the private client-based access over WireGuard/QUIC-based tunnels as well as the clientless (i.e. "BeyondCorp") access, to all your SaaS APIs, including REST and gRPC APIs, for all your Users, both humans and workloads, via a unified identity management at scale. These CASB capabilities can provide multiple benefits at any scale:
- All your Users, both humans and workloads, can now have a unified identity management to all your APIs using the same credentials (e.g. SSO identity providers for humans (read more here) and OAuth2 client credentials and standard bearer access tokens for workloads (read more here)).
- Unified identity-based, application-layer (L7) aware, context-aware ABAC-based access control via policy-as-code (read in detail about Policies and access control here) where you can control access way beyond what the SaaS API providers themselves can offer.
- Unified L-7 aware visibility and logging for access to all of your APIs (read more here).
Here is a simple example where you can have an API Service that's protected by a bearer access token. This Service is publicly exposed (read more about the public client-less BeyondCorp mode here) and can be accessed, for example, by workloads that can be written in any programming language via OAuth2 client credential flows (read more here) or even directly by directly issued standard bearer access tokens (read more here):
1kind: Service2metadata:3name: my-api4spec:5mode: HTTP6isPublic: true7dynamicConfig:8configs:9- name: v110upstream:11url: https://api.example.com12http:13auth:14bearer:15fromSecret: example-access-token
You can now apply the creation of the Service as follows (read more here):
octeliumctl apply /PATH/TO/SERVICE.YAML
Octelium also allows you to dynamically route to an upstream based on the identity and the access context via policy-as-code. Here is an example where you have 2 access tokens corresponding to 2 different accounts/tenants and where you can choose one of them depending on the Group to which the User belongs:
1kind: Service2metadata:3name: my-api4spec:5mode: HTTP6isPublic: true7dynamicConfig:8configs:9- name: v110upstream:11url: https://api.example.com12http:13auth:14bearer:15fromSecret: account-1-token16- name: v217upstream:18url: https://api.example.com19http:20auth:21bearer:22fromSecret: account-2-token23rules:24- condition:25match: '"prod" in ctx.user.spec.groups'26configName: v127- condition:28match: '"dev" in ctx.user.spec.groups'29configName: v2
You can also, for example, have a unified endpoint for your API and route to different upstreams (e.g. multiple versions of the same API) depending on the request's path. Here is an example:
1kind: Service2metadata:3name: my-api4spec:5mode: HTTP6isPublic: true7dynamicConfig:8configs:9- name: v110upstream:11url: https://v1.api.example.com12http:13auth:14bearer:15fromSecret: access-token16path:17removePrefix: /v118- name: v219upstream:20url: https://v2.api.example.com21http:22auth:23bearer:24fromSecret: access-token25path:26removePrefix: /v227rules:28- condition:29match: 'ctx.request.http.path.startsWith("/v1")'30configName: v131- condition:32match: 'ctx.request.http.path.startsWith("/v2")'33configName: v2
Octelium's application-layer (L7) awareness seamlessly enables you to control access using CEL and Open Policy Agent (read more here) based on HTTP request paths, methods and the JSON body of the requests. For example, a REST API whose JSON body has the following structure:
1{2"id": "abc123",3"name": "user-2",4"data": {5"books": ["book-1", "book-2"]6},7"isActive": true,8}
Access control of such API can be as follows:
1kind: Service2metadata:3name: my-api4spec:5mode: HTTP6isPublic: true7config:8upstream:9url: https://api.example.com10http:11enableRequestBuffering: true12body:13mode: JSON14maxRequestSize: 10000015authorization:16inlinePolicies:17- spec:18rules:19- effect: ALLOW20condition:21all:22of:23- match: ctx.request.http.method in ["PUT", "POST"]24- match: ctx.request.http.bodyMap.isActive25- match: ctx.request.http.bodyMap.name.startsWith("user")26- match: '"book-1" in ctx.request.http.bodyMap.data.books'
This was a very short guide to show you how to use Octelium to deploy, scale, route and provide dynamic zero trust secure access to your workloads. Here are a few more related features that you might be interested in:
- Routing not just by request paths, but also by header keys and values, request body content including JSON (read more here).
- Request/response header manipulation (read more here).
- Cross-Origin Resource Sharing (CORS) (read more here).
- gRPC mode (read more here).
- Secret-less access to upstreams and injecting bearer, basic, or custom authentication header credentials (read more here).
- Exposing the API publicly for anonymous access (read more here).