@@ -20,9 +20,9 @@ the parent directory:
2020- ` ../helm/files/blueprints ` as the |product-name| blueprint source.
2121- ` ../.generated ` for local generated keys and certificates.
2222
23- The shared tutorial does not build NeMo images for Compose. It runs
24- ` ${IMAGE_REGISTRY:-my-registry}/nmp-api:${BAKE_TAG:-local} ` for both the NeMo
25- API service and workload jobs submitted by the tutorial.
23+ The shared tutorial does not build NeMo Platform images for Compose. It runs
24+ ` ${IMAGE_REGISTRY:-my-registry}/nmp-api:${BAKE_TAG:-local} ` for both the
25+ NeMo Platform API service and workload jobs submitted by the tutorial.
2626
2727## Services
2828
@@ -39,7 +39,7 @@ The stack contains:
3939- ` authentik-redis ` : Redis for Authentik.
4040- ` authentik-server ` and ` authentik-worker ` : Authentik itself.
4141
42- ` nemo ` is only on the internal network. Host and workload traffic reaches NeMo
42+ ` nemo ` is only on the internal network. Host and workload traffic reaches NeMo Platform
4343through the ` gateway ` service, which also joins the workload network as
4444` nemo-gateway ` .
4545
@@ -56,15 +56,15 @@ share local keys:
5656The workload-token private key is mounted into ` nemo ` at
5757` /var/run/secrets/nemo-platform/workload-token-signing/private-key.pem ` .
5858` platform-compose-authentik.yaml ` points
59- ` auth.token_signing.private_key_file ` at that mounted path. The NeMo auth
60- service uses the private key to sign workload-exchange access tokens and Scoped
61- Access Key JWTs, and Envoy validates those tokens through the NeMo auth service
62- JWKS endpoints.
59+ ` auth.token_signing.private_key_file ` at that mounted path. The NeMo Platform
60+ auth service uses the private key to sign workload-exchange access tokens and
61+ Scoped Access Key JWTs, and Envoy validates those tokens through the
62+ NeMo Platform auth service JWKS endpoints.
6363
6464The gateway TLS files are copied into the ` gateway-tls ` named volume by
6565` gateway-tls-init ` . The ` gateway ` service uses that volume to serve HTTPS, and
6666the ` nemo ` service mounts the same volume read-only so Python HTTP clients
67- inside NeMo trust the demo gateway certificate.
67+ inside NeMo Platform trust the demo gateway certificate.
6868
6969All generated keys and certificates in this example are for local development
7070only.
@@ -91,7 +91,7 @@ The `nemo-setup` service account and app-password in the blueprint exist solely
9191for automated auth-idp contract tests. They are not part of the browser login
9292flow or the workload identity pattern.
9393
94- ## NeMo Compose Configuration
94+ ## NeMo Platform Compose Configuration
9595
9696` platform-compose-authentik.yaml ` configures NeMo Platform for this topology:
9797
@@ -101,8 +101,11 @@ flow or the workload identity pattern.
101101 the ` nemo ` container.
102102- Host-side CLI login uses the port-forward-like public gateway URL
103103 ` https://127.0.0.1:18080 ` .
104- - Workload subject tokens come from Authentik's workload OIDC provider.
105- - Exchanged workload access tokens come from NeMo's ` /apis/auth/token ` endpoint.
104+ - Authentik provides user and controller service-principal authentication. The
105+ Docker managed-job OBO binding is stored in NeMo Platform auth delegation
106+ state, not in Authentik.
107+ - Exchanged workload access tokens come from NeMo Platform's ` /apis/auth/token `
108+ endpoint.
106109
107110The Docker jobs executor mounts the ` gateway-tls ` volume into workload
108111containers and sets ` SSL_CERT_FILE ` and ` REQUESTS_CA_BUNDLE ` so workload code
@@ -112,23 +115,23 @@ trusts the local gateway certificate.
112115
113116Envoy is the public entrypoint for the Compose example. It routes:
114117
115- - NeMo paths such as ` /.well-known/nemo-platform/ ` , ` /apis/ ` , ` /health /` ,
116- ` /status ` , and ` /studio/ ` to ` nemo ` .
118+ - NeMo Platform paths such as ` /.well-known/nemo-platform/ ` , ` /apis/ ` ,
119+ ` /health/ ` , ` / status` , and ` /studio/ ` to ` nemo ` .
117120- ` /health/gateway/ready ` to an Envoy-owned readiness check that verifies both
118- NeMo and Authentik through their upstream clusters.
121+ NeMo Platform and Authentik through their upstream clusters.
119122- Authentik paths to ` authentik-server ` .
120123
121124Before authentication, Envoy removes incoming ` X-NMP-Principal-* ` and
122125` X-NMP-Scopes ` headers so a client cannot spoof identity or scopes. For
123- protected ` /apis/ ` requests, Envoy calls NeMo's
126+ protected ` /apis/ ` requests, Envoy calls NeMo Platform 's
124127` /apis/auth/authenticate ` endpoint with the presented bearer token. The auth
125- service validates Authentik OIDC tokens, NeMo workload-exchange access tokens,
126- and NeMo Scoped Access Keys, then returns trusted ` X-NMP-Principal-* ` and
127- ` X-NMP-Scopes ` headers for Envoy to forward upstream.
128+ service validates Authentik OIDC tokens, NeMo Platform workload-exchange access
129+ tokens, and NeMo Platform Scoped Access Keys, then returns trusted
130+ ` X-NMP-Principal-* ` and ` X-NMP- Scopes` headers for Envoy to forward upstream.
128131
129132The gateway callout is required for dynamic or revocable Scoped Access Keys
130133because Envoy JWKS validation can only prove token signature, issuer, audience,
131- and time claims. It cannot check NeMo's access-key lifecycle state. Compose
134+ and time claims. It cannot check NeMo Platform 's access-key lifecycle state. Compose
132135keeps ` auth.access_keys.enabled=true ` so Scoped Access Keys can be created and
133136validated; Envoy performs the bearer-to-header mapping before the request
134137reaches service middleware.
@@ -142,7 +145,7 @@ job request should not include `NMP_WORKLOAD_IDENTITY_TOKEN_FILE`,
142145` NEMO_WORKLOAD_TOKEN ` , or ` NEMO_WORKLOAD_TOKEN_FILE ` .
143146
144147When a managed Docker workload starts, the backend creates a dedicated workload
145- identity volume, writes an Authentik subject token to:
148+ identity volume and writes a NeMo Platform-owned Docker workload proof token to:
146149
147150``` text
148151/var/run/secrets/nemo-platform/workload/token
@@ -155,9 +158,28 @@ NMP_WORKLOAD_IDENTITY_TOKEN_FILE=/var/run/secrets/nemo-platform/workload/token
155158```
156159
157160The SDK reads that file and sends an RFC 8693 token exchange request to the
158- NeMo auth service through the gateway. The NeMo auth service validates the
159- Authentik subject token, mints a NeMo-signed access token, and returns it to the
160- workload. The workload uses that exchanged token for normal NeMo API calls.
161+ NeMo Platform auth service through the gateway. The Docker backend registered
162+ an internal workload delegation row before the container started. The
163+ NeMo Platform auth service validates the proof token, checks the matching row,
164+ mints a NeMo Platform-signed delegated access token, and returns it to the
165+ workload. The access token uses the captured job submitter as the top-level
166+ subject and the Docker workload as the RFC 8693 ` act.sub ` actor.
167+
168+ Docker supports two proof-provider modes:
169+
170+ - ` jwt ` : for embedded standalone deployments where the Docker jobs controller
171+ has an in-process auth-owned JWT issuer. The proof JWT uses
172+ ` token_use="nemo_docker_workload_subject" ` and ` sub=<delegation-row-name> ` .
173+ - ` opaque ` : for split deployments where the jobs controller calls remote auth
174+ state instead of owning signing keys. The file contains a private opaque proof
175+ token type whose secret is stored only as a hash in the delegation row.
176+
177+ The checked-in Compose example uses the default ` auto ` mode, which selects the
178+ opaque provider unless an embedded auth-owned JWT issuer is available. Docker
179+ job OBO therefore does not require Authentik to issue a workload token and does
180+ not depend on an IdP ` jti ` claim. The Authentik workload-provider password
181+ grant in the manifest is retained for direct provider-token contract tests, not
182+ for the managed Docker job exchange loop.
161183
162184The useful end-to-end validation is the workload job in the shared tutorial:
163185the job uses the exchanged token to call the NeMo Platform API and read the
0 commit comments