Skip to content

grafana.lassul.us: styx's Grafana with id.lassul.us login - #146

Merged
lassulus merged 3 commits into
masterfrom
grafana-public
Oct 25, 2026
Merged

lassulus merged 3 commits into
masterfrom
grafana-public

Conversation

@lassulus

Copy link
Copy Markdown
Owner
  • configs.monitoring: grafana: role path survives ini unquoting
  • configs.monitoring: log in to styx's Grafana via id.lassul.us
  • configs.monitoring: proxy grafana.lassul.us to styx's Grafana

Public Grafana at https://grafana.lassul.us (styx), login via id.lassul.us. Deployed on neoprism and styx; login tested.

Hermes added 3 commits October 25, 2026 00:49
neoprism serves grafana.lassul.us over TLS and proxies it over retiolum to
the Grafana on styx (port 3000 is already open on retiolum there), with
websockets for Grafana Live. The Zitadel project grafana is declarative:
only [email protected] gets a user grant and can log in. Its web app is a
public client with PKCE, so there is no secret to ship; the client id goes
to styx through a prompted var.

The Gatus check runs on every monitoring server, so it also changes
coaxmetal's gatus.yaml.
styx's Grafana becomes public at grafana.lassul.us, so anonymous viewing
and the password form go away and Grafana's generic_oauth logs users in
against Zitadel. Users are created on first login and keyed by the token's
sub claim (Grafana's user_auth): generic_oauth always takes the auth id from
sub, Grafana 13 has no id_attribute_path to change that. Email lookup stays
off so a matching address cannot take over an existing account. Zitadel
only lets the users listed on the project through, so everyone who gets in
is made Grafana Admin.

The client id comes from the grafana-oidc var as an environment file,
optional so Grafana starts before the var exists. The local admin stays
for API access and grafana cli. cookie_secure because sessions now only
live on the https origin.
Grafana reads config.ini with go-ini (gopkg.in/ini.v1 v1.67.2), whose
readValue strips quotes that surround an entire value (parser.go:300-302,
hasSurroundedQuote at parser.go:231). role_attribute_path='GrafanaAdmin'
thus became the JMESPath identifier GrafanaAdmin, which evaluates to null,
so OIDC logins fell back to Viewer. sub && 'GrafanaAdmin' does not start
and end with a quote and yields GrafanaAdmin for every user, since every
userinfo has a sub (Zitadel restricts who can log in).
@lassulus
lassulus enabled auto-merge (rebase) October 25, 2026 00:17
@lassulus
lassulus merged commit 20f5bb5 into master Oct 25, 2026
10 checks passed
@lassulus
lassulus deleted the grafana-public branch October 25, 2026 00:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant