You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(panda-chat)!: Authentik service-account bot identity via client_credentials
Replace the seeded-credentials bot identity (credentials.panda.credentialsJson
/ credentialsFile + seed-panda-creds initContainer) with an Authentik service
account: credentials.panda.botUsername / botToken materialize as
PANDA_BOT_USERNAME / PANDA_BOT_TOKEN, and panda-config.yaml now configures
proxy.auth mode client_credentials against the Authentik panda-proxy
application issuer (default panda.issuerUrl switches from Dex to Authentik;
the trailing slash is part of the issuer). panda-server mints access tokens
on demand and keeps them in memory — nothing is written under credentials/.
Both bot values are required when panda.enabled, so a values gap fails at
template time instead of producing a half-authenticated pod.
Requires a hermes-agent-panda image carrying panda with client_credentials
support. Part of chat docs/identity-and-attribution-plan.md (Phase 3).
Copy file name to clipboardExpand all lines: charts/panda-chat/Chart.yaml
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@ name: panda-chat
3
3
description: AI chat for an Ethereum devnet — an Open-WebUI front end backed by a NousResearch Hermes agent wired to the `panda` CLI, giving anyone access to devnet analytics (Xatu/Prometheus/Loki/Dora/Ethnode via panda-proxy), account funding (powfaucet) and join-the-devnet helpers.
4
4
home: https://github.com/ethpandaops/chat
5
5
type: application
6
-
version: 0.1.0
6
+
version: 0.2.0
7
7
# Hermes Agent upstream version baked into the panda-overlay image.
AI chat for an Ethereum devnet — an Open-WebUI front end backed by a NousResearch Hermes agent wired to the `panda` CLI, giving anyone access to devnet analytics (Xatu/Prometheus/Loki/Dora/Ethnode via panda-proxy), account funding (powfaucet) and join-the-devnet helpers.
7
7
@@ -28,8 +28,11 @@ AI chat for an Ethereum devnet — an Open-WebUI front end backed by a NousResea
28
28
29
29
When `panda.enabled` is true the agent pod runs `panda-server` + `dockerd`
30
30
alongside Hermes and is **privileged** (dockerd needs root). The bot identity
31
-
for the proxy is provisioned once (GitHub bot user + `panda auth login`) and
32
-
its credentials are supplied via `credentials.panda.*`.
31
+
for the proxy is an Authentik **service account** (e.g. `panda-chat-svc` with a
32
+
non-expiring app password) supplied via `credentials.panda.botUsername` /
33
+
`credentials.panda.botToken`. panda-server mints proxy access tokens on demand
34
+
with the OAuth2 `client_credentials` grant and keeps them in memory only — no
35
+
seeded credential files, no refresh-token rotation.
33
36
34
37
## Access control
35
38
@@ -64,9 +67,10 @@ SSO** (no password), auto-provisioning the user on first visit.
64
67
65
68
Per-user identity is also propagated to the agent: the Open-WebUI image
66
69
(`ethpandaops/open-webui-cf`) forwards `Cf-Access-Jwt-Assertion` upstream so
67
-
Hermes sees the individual user (per-user auth on downstream resources + Langfuse
68
-
attribution). On devnets the bal-devnets ansible template wires the trusted-header
69
-
config from a single toggle — see `chat.yaml.j2`.
70
+
Hermes can attribute traffic to the individual user (Langfuse `user_id`,
71
+
`X-Panda-On-Behalf-Of`audit header). Authentication to panda-proxy itself is
72
+
always the bot service account. On devnets the bal-devnets ansible template
73
+
wires the trusted-header config from a single toggle — see `chat.yaml.j2`.
| panda.clientId | string | `"panda-proxy"` | OIDC client id at the proxy |
156
+
| panda.clientId | string | `"panda-proxy"` | OAuth client id at the proxy |
153
157
| panda.enabled | bool | `true` | Enable the panda sidecar processes + privileged pod |
154
-
| panda.issuerUrl | string | `"https://dex.primary.production.platform.ethpandaops.io"` | OIDC issuer (Dex) the bot identity authenticates against |
158
+
| panda.issuerUrl | string | `"https://authentik.analytics.production.platform.ethpandaops.io/application/o/panda-proxy/"` | Authentik application issuer the bot service account mints client_credentials tokens against (the trailing slash is part of the issuer — keep it) |
0 commit comments