swarm-authelia: admit only the collector anywhere on the metrics store's name
No access rule covered the push route on `metrics.<swarm>`, so a request there fell to `default_policy = one_factor`: any logged-in session cookie for the swarm could write samples into VictoriaMetrics. The name now gets two rules with no `resources`: the collector's client at `one_factor`, then `deny`. Only the push route and `/metrics` on that vhost send an authelia subrequest (the read API, Grafana's datasource included, is served with no check), and the collector is the one caller of both, so a domain-wide pair covers them with no path or query regex to slip past. It replaces the per-path `/metrics` pair the published target would otherwise derive for that name. Both rules sit ahead of the apex and store-UI rules, and authelia matches `domain` exactly, so they shadow no other name. Authelia 4.39.20, read from source: a rule with no `domain` wildcard matches with `strings.EqualFold` (access_control_domain.go), an empty `resources` or `subject` list matches everything (access_control_rule.go), and the first matching rule wins (authorizer.go). Fixes #5218
This commit is contained in:
parent
338a767a61
commit
223cca2b56
4 changed files with 108 additions and 39 deletions
|
|
@ -159,12 +159,14 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
# The subrequest for both gated locations above. It carries the
|
||||
# requested URL, and authelia decides per URL, so the scrape needs no
|
||||
# subrequest of its own. Same target and header set as the sibling log
|
||||
# store's, which took them from `swarm-ui.nix` — `X-Original-URL` and
|
||||
# `X-Original-Method` are what authelia's auth-request implementation
|
||||
# reads, and the address it compares the token's audience against.
|
||||
# The subrequest for both gated locations above. Authelia admits the
|
||||
# collector's client anywhere on this name and refuses every other
|
||||
# subject (`metricsStoreRules` in ./swarm-authelia.nix), so the scrape
|
||||
# needs no subrequest of its own. Same target and header set as the
|
||||
# sibling log store's, which took them from `swarm-ui.nix` —
|
||||
# `X-Original-URL` and `X-Original-Method` are what authelia's
|
||||
# auth-request implementation reads, and the address it compares the
|
||||
# token's audience against.
|
||||
"= /__metrics_push_authz" = {
|
||||
proxyPass = "https://${hyperhiveCfg.swarm.authelia.domain}/api/authz/auth-request";
|
||||
# nixpkgs appends its OWN `Host $host` after extraConfig, which
|
||||
|
|
|
|||
Loading…
Reference in a new issue