Skip to content

Commit 8fc6e01

Browse files
committed
update
Signed-off-by: Ryan S <267728323+ironcommit@users.noreply.github.com>
1 parent 43c4803 commit 8fc6e01

35 files changed

Lines changed: 754 additions & 1709 deletions

contrib/auth/authentik/README.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,9 @@ refresh is easy to observe. Do not use it as a production default; use a longer
9090
value such as `hours=1` outside the refresh demonstration.
9191

9292
In the Docker Compose runtime, Authentik authenticates users and controller
93-
service principals, but managed Docker job OBO does not depend on Authentik
94-
password-grant workload tokens or an IdP `jti` claim. The Docker backend writes
95-
a NeMo Platform-owned workload proof token into the job token file, the SDK
96-
posts that token to the NeMo Platform auth service, and the gateway trusts the
97-
NeMo Platform auth service JWKS for exchanged workload access tokens. The
98-
Authentik workload-provider password grant remains in the example manifest for
99-
direct provider-token contract tests.
93+
service principals, but managed Docker job OBO uses a NeMo Platform-owned
94+
opaque workload proof token. The Docker backend writes that proof token into the
95+
job token file, the SDK posts it to the NeMo Platform auth service, and the
96+
gateway trusts the NeMo Platform auth service JWKS for exchanged workload access
97+
tokens. Docker OBO does not depend on IdP `jti` claims or IdP-issued workload
98+
subject tokens.

contrib/auth/authentik/compose/implementation-details.md

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ the parent directory:
2020

2121
- `../config/platform-compose-authentik.yaml` as the NeMo Platform config.
2222
- `../gateway/envoy.yaml` as the local gateway config.
23-
- `../helm/files/blueprints` as the |product-name| blueprint source.
23+
- `../helm/files/blueprints` as the NeMo Platform blueprint source.
2424
- `../.generated` for local generated keys and certificates.
2525

2626
The shared tutorial does not build NeMo Platform images for Compose. It runs
@@ -37,7 +37,7 @@ The stack contains:
3737
- `gateway-tls-init`: a small init container that copies local TLS material into
3838
the named `gateway-tls` volume with permissions suitable for Envoy.
3939
- `authentik-blueprint-init`: a one-shot init container that applies the shared
40-
|product-name| blueprint before the gateway starts.
40+
NeMo Platform blueprint before the gateway starts.
4141
- `authentik-postgres`: PostgreSQL for Authentik.
4242
- `authentik-redis`: Redis for Authentik.
4343
- `authentik-server` and `authentik-worker`: Authentik itself.
@@ -168,21 +168,14 @@ mints a NeMo Platform-signed delegated access token, and returns it to the
168168
workload. The access token uses the captured job submitter as the top-level
169169
subject and the Docker workload as the RFC 8693 `act.sub` actor.
170170

171-
Docker supports two proof-provider modes:
172-
173-
- `jwt`: for embedded standalone deployments where the Docker jobs controller
174-
has an in-process auth-owned JWT issuer. The proof JWT uses
175-
`token_use="nemo_docker_workload_subject"` and `sub=<delegation-row-name>`.
176-
- `opaque`: for split deployments where the jobs controller calls remote auth
177-
state instead of owning signing keys. The file contains a private opaque proof
178-
token type whose secret is stored only as a hash in the delegation row.
179-
180-
The checked-in Compose example uses the default `auto` mode, which selects the
181-
opaque provider unless an embedded auth-owned JWT issuer is available. Docker
182-
job OBO therefore does not require Authentik to issue a workload token and does
183-
not depend on an IdP `jti` claim. The Authentik workload-provider password
184-
grant in the manifest is retained for direct provider-token contract tests, not
185-
for the managed Docker job exchange loop.
171+
Docker supports one proof-token mechanism in this flow. The file contains a
172+
private opaque proof token whose secret is stored only as a hash in the
173+
delegation row.
174+
175+
Docker job OBO therefore does not require Authentik to issue a workload token
176+
and does not depend on an IdP `jti` claim. The Authentik workload-provider
177+
configuration in the manifest is retained for direct provider-token contract
178+
tests, not for the managed Docker job exchange loop.
186179

187180
The useful end-to-end validation is the workload job in the shared tutorial:
188181
the job uses the exchanged token to call the NeMo Platform API and read the

contrib/auth/authentik/config/platform-compose-authentik.yaml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,6 @@ jobs:
6464
additional_volume_mounts:
6565
- volume_name: "authentik_gateway_tls"
6666
mount_path: "/etc/nmp/gateway-tls"
67-
workload_identity:
68-
token_endpoint: "https://nemo-gateway:8080/application/o/token/"
69-
username: "svc-nemo"
70-
password_env_var: "AUTHENTIK_WORKLOAD_IDENTITY_PASSWORD"
7167
executor_defaults:
7268
docker:
7369
cleanup_completed_jobs_immediately: false

contrib/auth/authentik/manifest.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ test_runtimes:
7373
- workload_job
7474
- managed_workload_job_obo
7575
- device_flow
76-
- docker_subject_token_refresh
7776
- id: authentik-kubernetes
7877
backend: kubernetes
7978
command: k8s

docs/auth/deployment/configuration.mdx

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -201,27 +201,10 @@ and optional `scope`. `workload_token_endpoint` is optional; when it is unset,
201201
the SDK uses `token_endpoint`. This is useful when host CLI login and workload
202202
containers need different network-reachable IdP URLs.
203203

204-
For Docker-backed job runtimes, the executor may also need a controller-side
205-
subject-token issuer. Configure only Docker-specific fields under the Docker
206-
executor profile:
207-
208-
```yaml
209-
jobs:
210-
executors:
211-
- provider: cpu
212-
profile: workload
213-
backend: docker
214-
config:
215-
workload_identity:
216-
token_endpoint: "https://idp.example.com/oauth/token"
217-
client_id: "nemo-platform-workload"
218-
username: "svc-nemo"
219-
password_env_var: "WORKLOAD_IDENTITY_PASSWORD"
220-
scope: "openid email groups"
221-
```
222-
223-
The password value is read from the controller process environment using
224-
`password_env_var`. The config does not support an inline `password` field.
204+
For Docker-backed job runtimes, `auth.oidc.workload_token_exchange_enabled`
205+
controls workload identity. When enabled, job steps with a delegation auth
206+
context receive a NeMo Platform opaque workload proof token at
207+
`NMP_WORKLOAD_IDENTITY_TOKEN_FILE`.
225208

226209
For Kubernetes-backed job runtimes, the jobs backend can project a Kubernetes
227210
service account token into each workload pod for token exchange. The projected

docs/auth/deployment/credential-propagation.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ Backend ownership:
6363
`authentication.kubernetes.io/pod-uid` reference from TokenReview metadata to
6464
look up the internal delegation row.
6565
- Docker uses a dedicated controller-managed workload identity volume. The
66-
Docker backend writes a proof token bound to an internal delegation row. JWT
67-
proof tokens carry `token_use="nemo_docker_workload_subject"`. Opaque proof
68-
tokens use the private Docker subject-token type and are checked against the
69-
hash stored in the delegation row.
66+
Docker backend writes a NeMo opaque proof token bound to an internal
67+
delegation row. The token uses the private Docker subject-token type and is
68+
checked against the hash stored in the delegation row. Docker does not use
69+
TokenReview or external IdP-issued workload proof tokens.
7070

7171
Users must not provide `NMP_PRINCIPAL`, `NEMO_WORKLOAD_TOKEN`,
7272
`NEMO_WORKLOAD_TOKEN_FILE`, or `NMP_WORKLOAD_IDENTITY_TOKEN_FILE` in managed job

docs/set-up/config-reference.mdx

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -301,28 +301,8 @@ jobs:
301301
networking:
302302
# Docker network for the job container | default: 'host'
303303
job_container_network: host
304-
# Docker workload identity subject-token issuer configuration.
305-
workload_identity:
306-
# Enable Docker workload identity token-file injection. Defaults to auth.oidc.workload_token_exchange_enabled.
307-
enabled:
308-
# OAuth token endpoint used by the Docker demo issuer. Defaults to auth.oidc.token_endpoint.
309-
token_endpoint:
310-
# OAuth client ID used by the Docker demo issuer. Defaults to auth.oidc.workload_client_id or auth.oidc.client_id.
311-
client_id:
312-
# OAuth client secret for the Docker demo issuer.
313-
client_secret:
314-
# Username for the Docker demo issuer password grant.
315-
username:
316-
# Controller environment variable that contains the Docker demo issuer password grant shared secret. | default: 'AUTHENTIK_WORKLOAD_IDENTITY_PASSWORD'
317-
password_env_var: AUTHENTIK_WORKLOAD_IDENTITY_PASSWORD
318-
# OAuth scope for the Docker demo issuer.
319-
scope:
320-
# Docker workload proof-token provider. 'auto' uses an in-process auth-owned JWT issuer when available and otherwise uses an opaque proof token stored by hash in the workload delegation record. | default: 'auto' | values: 'auto' | 'jwt' | 'opaque'
321-
proof_token_provider: auto
322-
# Fallback subject-token lifetime when the Docker demo issuer response omits expires_in.
323-
subject_token_ttl_seconds: 600
324-
# Seconds before subject-token expiry when the Docker refresher issues a replacement token. | default: 60
325-
refresh_margin_seconds: 60
304+
# Docker workload identity configuration.
305+
workload_identity: {}
326306
# Default Kubernetes execution profile configuration
327307
kubernetes_job:
328308
# default: 1800

openapi/ga/individual/platform.openapi.yaml

Lines changed: 3 additions & 64 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openapi/ga/openapi.yaml

Lines changed: 3 additions & 64 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)