Skip to content

Commit 0137ffc

Browse files
committed
Improve auth-related docs
Signed-off-by: Karakatiza666 <bulakh.96@gmail.com>
1 parent de6c8fa commit 0137ffc

File tree

2 files changed

+247
-167
lines changed

2 files changed

+247
-167
lines changed

docs.feldera.com/docs/get-started/enterprise/authentication/index.mdx

Lines changed: 204 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@ Feldera API supports two authentication types:
1414

1515
## Authorization model
1616

17-
In Feldera, a tenant is a scope of shared access to platform data that can be assigned to one or more users.
18-
The users of one tenant cannot access the data in another tenant.
19-
Interaction with Feldera is only performed with a tenant assigned, so authorization to the platform implies assigning tenant to the user.
17+
**Feldera Tenant** is a scope of access to Feldera pipelines for their management and configuration. The same tenant can be assigned to multiple users for shared access. The ingress and egress business data flow, which is configured through connectors, has it's own connector-dependent authentication and is not subject to tenant-based authorization.
18+
19+
Interaction with Feldera is always authorized through a tenant, so access to the platform implies assigning tenant to the user.
2020
For OIDC authentication, the tenant is derived from claims in the OIDC Access token.
2121
For API key authentication, the key is associated with the tenant through which the key was generated.
22+
We support multiple authorization use-cases through strategies to assign tenant to Feldera API and clients' users.
2223

23-
As an orthogonal feature, the authorized_groups startup parameter can be used to limit access to the users who are a member of at least one of the groups in this list. The membership is determined based on the `groups` claim of an OIDC Access token.
24+
As an orthogonal feature, the authorized-groups startup parameter can be used to limit access to the users who are a member of at least one of the groups in this list. The membership is determined based on the `groups` claim of an OIDC Access token.
25+
Users must belong to at least one of the specified groups to access Feldera. If `--authorized-groups` is not specified or empty, no group restrictions apply.
2426

2527
## Tenant Assignment Strategies
2628

@@ -34,65 +36,164 @@ Each authenticated user gets their own private tenant based on the `sub` claim o
3436

3537
Users from the same organization share a tenant, derived from the issuer hostname of the authentication token. Does not require authentication provider configuration. Configured with --issuer-tenant startup flag.
3638

37-
### User Group Tenancy
39+
### Managed Tenancy
40+
41+
Multiple teams can use the same Feldera instance with complete tenant isolation. Each team's users should be assigned to corresponding tenant(s) with the proper configuration of a dynamic tenant claim in the OIDC Access token. The managed tenant claims are always respected if issued.
42+
43+
The supported, mutually exclusive claims are:
3844

39-
Multiple teams can use the same Feldera instance with complete tenant isolation. Each team's users should be assigned to a corresponding tenant with the proper configuration of a dynamic tenant claim. Requires configuring a custom claim in OIDC Access token. It is always enabled
45+
- `tenant` - authorizes the user to access a single tenant
46+
- `tenants` - authorizes the user to access any of the tenants in a list.
47+
`tenants` can contain either a list, or a string of comma-separated tenant names.
48+
49+
The user can only interact with the API through a single tenant at a time. When using `tenants` claim, in Web Console the user can switch between the tenants they are authorized for.
50+
For HTTP API use, the current tenant name is specified in the `Feldera-Tenant` header.
4051

4152
## Tenant Assignment use cases
4253

43-
Configure tenant assignment behavior using a combination of the following strategies:
54+
Listed below are example configurations for common authorization use-cases achieved through a combination of tenant assignment strategy and whitelisted group access.
4455

4556
### Development environment - no authentication
4657

58+
**Helm Configuration:**
59+
```yaml
60+
auth:
61+
enabled: false
62+
```
63+
64+
Direct pipeline-manager configuration:
65+
4766
```bash
48-
# Default settings - each user gets individual tenant
4967
pipeline-manager ... --auth-provider=none
5068
```
5169

52-
### Individual tenancy
70+
### Individual access
71+
72+
Every user gets their individual tenant based on their `sub` claim.
73+
74+
**Helm Configuration:**
75+
```yaml
76+
auth:
77+
enabled: true
78+
provider: "generic-oidc"
79+
clientId: "0oa1a2b3c4d5e6f7g8h9"
80+
issuer: "https://dev-12345.okta.com/oauth2/default"
5381

54-
Every user gets their individual tenant
82+
authorization:
83+
individualTenant: true
84+
issuerTenant: false
85+
authAudience: "feldera-api"
86+
```
87+
88+
Direct pipeline-manager configuration:
5589
56-
**Feldera Configuration:**
5790
```bash
58-
pipeline-manager ... --auth-provider=<provider> --individual-tenant=true
91+
pipeline-manager ... --auth-provider=generic-oidc --individual-tenant=true
5992
```
6093

61-
### Organization tenancy
94+
### Organization-wide shared access
6295

63-
Lets all users in your organization share the same tenant based on the organization domain.
96+
All users in your organization share the same tenant based on the organization domain.
6497

6598
The tenant name is extracted from OIDC issuer domain:
6699
- `https://acme-corp.okta.com/oauth2/default``acme-corp.okta.com` tenant
67100

68-
**Feldera Configuration:**
101+
**Helm Configuration:**
102+
```yaml
103+
auth:
104+
enabled: true
105+
provider: "generic-oidc"
106+
clientId: "0oa1a2b3c4d5e6f7g8h9"
107+
issuer: "https://acme-corp.okta.com/oauth2/default"
108+
109+
authorization:
110+
individualTenant: false
111+
issuerTenant: true
112+
authAudience: "feldera-api"
113+
```
114+
115+
Direct pipeline-manager configuration:
116+
69117
```bash
70-
pipeline-manager ... --auth-provider=<provider> --issuer-tenant=true --individual-tenant=false
118+
pipeline-manager ... --auth-provider=generic-oidc --issuer-tenant=true --individual-tenant=false
71119
```
72120

73-
Example tenant names:
74-
- `https://acme-corp.okta.com/oauth2/default``acme-corp` tenant
75-
- `https://company.auth.us-west-2.amazoncognito.com``company` tenant
121+
### Group-based whitelist with organization-wide shared access
122+
123+
Users must belong to at least one of the specified groups to access Feldera. All authorized users share the organization tenant.
124+
125+
**Helm Configuration:**
126+
```yaml
127+
auth:
128+
enabled: true
129+
provider: "generic-oidc"
130+
clientId: "0oa1a2b3c4d5e6f7g8h9"
131+
issuer: "https://company.okta.com/oauth2/default"
132+
133+
authorization:
134+
individualTenant: false
135+
issuerTenant: true
136+
authorizedGroups:
137+
- "feldera-engineering"
138+
- "feldera-qa"
139+
authAudience: "feldera-api"
140+
```
76141
77-
### Whitelisted organization tenancy
142+
Direct pipeline-manager configuration:
78143
79-
**Feldera Configuration:**
80144
```bash
81-
pipeline-manager ... --auth-provider=<provider> --authorized_groups=feldera_qa,feldera_rnd --issuer-tenant=true --individual-tenant=false
145+
pipeline-manager ... --auth-provider=generic-oidc --authorized-groups=feldera_engineering,feldera_qa --issuer-tenant=true --individual-tenant=false
82146
```
83147

84-
### User group tenancy
148+
### Shared access within a user group (managed tenancy)
149+
150+
Tenant assignment via `tenant` or `tenants` claims in JWT configured in your OIDC provider.
151+
152+
**Helm Configuration:**
153+
```yaml
154+
auth:
155+
enabled: true
156+
provider: "generic-oidc"
157+
clientId: "0oa1a2b3c4d5e6f7g8h9"
158+
issuer: "https://company.okta.com/oauth2/default"
159+
160+
authorization:
161+
individualTenant: false
162+
issuerTenant: false
163+
authAudience: "feldera-api"
164+
```
165+
166+
Direct pipeline-manager configuration:
85167
86-
**Feldera Configuration:**
87168
```bash
88-
pipeline-manager ... --auth-provider=<provider> --individual-tenant=false
169+
pipeline-manager ... --auth-provider=generic-oidc --individual-tenant=false
89170
```
90171

91-
### User group tenancy with individual users
172+
### Individual access to whitelisted user groups
173+
174+
Each user gets their individual tenant, but only users belonging to specified groups can access Feldera.
175+
176+
**Helm Configuration:**
177+
```yaml
178+
auth:
179+
enabled: true
180+
provider: "generic-oidc"
181+
clientId: "0oa1a2b3c4d5e6f7g8h9"
182+
issuer: "https://company.okta.com/oauth2/default"
183+
184+
authorization:
185+
individualTenant: true
186+
issuerTenant: false
187+
authorizedGroups:
188+
- "feldera-engineering"
189+
- "feldera-qa"
190+
authAudience: "feldera-api"
191+
```
192+
193+
Direct pipeline-manager configuration:
92194
93-
**Feldera Configuration:**
94195
```bash
95-
pipeline-manager ... --auth-provider=<provider> --individual-tenant=true
196+
pipeline-manager ... --auth-provider=generic-oidc --individual-tenant=true --authorized-groups=feldera_engineering,feldera_qa
96197
```
97198

98199
## Tenant Resolution Priority
@@ -105,6 +206,81 @@ Feldera resolves tenant assignment using the following priority order:
105206

106207
If no valid tenant is found and `--individual-tenant=false` the user will be denied authorization.
107208

209+
## Configuration options
210+
211+
### Mapping Pipeline Manager Options to Helm Chart Values
212+
213+
Feldera's authentication and authorization are configured through pipeline-manager command-line options. When deploying via Helm, these options map to values in your `values.yaml` file.
214+
215+
#### Complete Configuration Template
216+
217+
Below is a comprehensive template showing all available authentication and authorization options:
218+
219+
```yaml
220+
# Authentication provider configuration
221+
auth:
222+
enabled: true # Enable/disable authentication
223+
provider: "generic-oidc" # Options: "none", "aws-cognito", "generic-oidc"
224+
clientId: "your-client-id" # Maps to: FELDERA_AUTH_CLIENT_ID
225+
issuer: "https://your-domain/oauth2/default" # Maps to: FELDERA_AUTH_ISSUER
226+
227+
# AWS Cognito specific (only when provider: "aws-cognito")
228+
cognitoLoginUrl: "" # Maps to: AWS_COGNITO_LOGIN_URL
229+
cognitoLogoutUrl: "" # Maps to: AWS_COGNITO_LOGOUT_URL
230+
231+
# Authorization and tenant assignment configuration
232+
authorization:
233+
# Individual tenant mode - each user gets their own tenant (default: true)
234+
# Maps to: --individual-tenant
235+
individualTenant: true
236+
237+
# Issuer-based tenant - derive tenant from auth issuer domain (default: false)
238+
# Maps to: --issuer-tenant
239+
issuerTenant: false
240+
241+
# Group-based access control - restrict access to specific groups
242+
# Maps to: --authorized-groups
243+
# Users must have at least one of these groups in their 'groups' claim
244+
authorizedGroups:
245+
- "feldera-users"
246+
- "data-engineers"
247+
248+
# OIDC audience claim validation (default: "feldera-api")
249+
# Maps to: --auth-audience
250+
authAudience: "feldera-api"
251+
252+
# Advanced: Pass additional pipeline-manager arguments directly
253+
pipelineManager:
254+
extraArgs:
255+
- "--some-additional-flag=value"
256+
```
257+
258+
### Environment Variables Reference
259+
260+
If you need to configure pipeline-manager directly (without Helm), use these environment variables:
261+
262+
#### Required Variables
263+
264+
```bash
265+
# OIDC provider configuration
266+
FELDERA_AUTH_ISSUER=https://<your-domain>/oauth2/<custom-auth-server-id>
267+
FELDERA_AUTH_CLIENT_ID=<your-client-id>
268+
```
269+
270+
#### Optional Variables
271+
272+
```bash
273+
# Authorization configuration
274+
FELDERA_AUTH_INDIVIDUAL_TENANT=true # default: true
275+
FELDERA_AUTH_ISSUER_TENANT=false # default: false
276+
FELDERA_AUTH_AUTHORIZED_GROUPS=group1,group2 # comma-separated list
277+
FELDERA_AUTH_AUDIENCE=feldera-api # default: feldera-api
278+
279+
# AWS Cognito specific
280+
AWS_COGNITO_LOGIN_URL=https://...
281+
AWS_COGNITO_LOGOUT_URL=https://...
282+
```
283+
108284
## Provider-Specific Setup
109285

110286
Feldera supports the following authentication providers:

0 commit comments

Comments
 (0)