Files
classic-models-agent-flows/deploy/flux-kustomization.yaml
T
Stéphane Tailland 8f1f0245da feat: the offline_access mandate
The standing authority the autonomous runs act under: an offline refresh token
issued by a new classic-models-mandate client for the user who authorised the
agent, stored in Vault, redeemed at trigger time.

The mandate client holds no domain audience. It cannot reach data; it can only
say who authorised whom. Direct access grants on it is a lab shortcut, noted as
such — mandating an agent is a decision a person takes, and a password grant
records no consent where the authorization code flow would.

Verified end to end: refresh gives sub=pm-user azp=classic-models-mandate with
the agent in the audience, the agent exchanges it to azp=itself and
aud=mcp-catalog, and the MCP call answers 200. sub stays the person who
mandated, azp says which agent acted.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-29 17:42:33 +02:00

47 lines
1.6 KiB
YAML

# This estate's n8n: the template from infra-n8n, with our values.
#
# Everything specific lives here rather than in that repo, so the same template
# deploys somebody else's n8n without carrying ours.
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: n8n
namespace: n8n
spec:
interval: 10m
sourceRef:
kind: GitRepository
name: infra-n8n
path: ./k8s
prune: true
wait: true
timeout: 5m
postBuild:
substitute:
NAMESPACE: n8n
N8N_HOSTNAME: n8n.sttlab.local
N8N_IMAGE: docker.n8n.io/n8nio/n8n:2.37.4
POSTGRES_IMAGE: postgres:16.10-alpine
N8N_STORAGE: 2Gi
POSTGRES_STORAGE: 5Gi
TIMEZONE: Europe/Paris
INGRESS_CLASS: nginx
INGRESS_BODY_SIZE: "50m"
TLS_ISSUER_NAME: sttlab-local-ca
TLS_ISSUER_KIND: ClusterIssuer
VAULT_SERVER: https://vault.sttlab.eu
VAULT_MOUNT: secrets
VAULT_SECRET_PATH: n8n/instance
VAULT_STORE_NAME: vault-n8n
VAULT_APPROLE_SECRET: vault-approle-n8n
# The agents' Keycloak client secrets, so a workflow can exchange tokens
# as the agent it represents. Created by agent-secrets.yaml beside this.
EXTRA_ENV_SECRET: n8n-agent-secrets
EXTRA_ENV_SECRET_2: n8n-mandate-secrets
EXTRA_CA_CONFIGMAP: sttlab-ca
# "false" so a workflow can read $env.<AGENT>_CLIENT_SECRET. It means any
# workflow on this instance can read any variable in the pod — acceptable
# while it runs only this estate's agents, and not a moment longer.
BLOCK_ENV_ACCESS: "false"
EXECUTIONS_MAX_AGE_HOURS: "336"