swarm-logs: authenticate as the agent with its own queue secret
swarm-logs reads `swarm/agents/<agent>/queue` from the swarm secret store with the agent's own store certificate (the read hive-agent makes for its queue connection) and presents it as `Bearer swarm-agent.<agent>.<secret>`, which the gateway's swarm-logs-auth checks. On a 401 it reads the secret again and retries once, so a secret re-minted between the read and the check does not fail the query. The OIDC mint against the hive's shared `hive-<h>-agent` client is gone from swarm-logs, along with the unused `HIVE_AGENT_OIDC_CA_FILE` anchor. logs.nix now gates on the store address instead of the queue's token endpoint and wraps the binary with the paths queue-identity.nix gives the harness; the host forwards the query URL wherever it forwards a store identity. The shared client is still delivered into containers; removing that is Part of #4459.
This commit is contained in:
parent
1f4736e79b
commit
0f53e9be6c
12 changed files with 260 additions and 331 deletions
|
|
@ -271,29 +271,19 @@ in
|
|||
HIVE_AGENT_OIDC_TOKEN_ENDPOINT = config.services.hyperhive.swarm.statusPublish.tokenEndpoint;
|
||||
}
|
||||
//
|
||||
# Where an agent reads the swarm's logs, forwarded the same way and gated on
|
||||
# the same credential: `swarm-logs` authenticates as the queue's own per-hive
|
||||
# machine client, so an address with no credential behind it would put a
|
||||
# binary on PATH that can only ever answer 401 — which an agent reads as "no
|
||||
# logs", the exact confusion the store's machine route was added to end.
|
||||
# Where an agent reads the swarm's logs. Gated on the store identity below,
|
||||
# because `swarm-logs` authenticates with the agent's own queue secret, read
|
||||
# from the store: an address with nothing to authenticate as would put a
|
||||
# binary on PATH that can only ever answer 401, which an agent reads as "no
|
||||
# logs".
|
||||
#
|
||||
# The **machine** route (`^~ /select/logsql/`), not the browser one at `/`:
|
||||
# that one ends in `error_page 401 =302` and hands a machine caller
|
||||
# authelia's login page as a 200 with an HTML body. See
|
||||
# `swarm-victorialogs.nix`'s location for the whole reasoning.
|
||||
#
|
||||
# ⚠️ The full URL rather than the domain, because the same string is also
|
||||
# the audience the token is minted for — `swarm-otel.nix` states that rule
|
||||
# over its own push targets, and two spellings present as a valid token
|
||||
# refused at the store.
|
||||
lib.optionalAttrs
|
||||
(
|
||||
config.services.hyperhive.deploy.hive-controller.queue.agentNatsUrl != null
|
||||
&& config.services.hyperhive.swarm.statusPublish.tokenEndpoint != null
|
||||
)
|
||||
{
|
||||
HIVE_AGENT_LOGS_QUERY_URL = "https://${config.services.hyperhive.swarm.victorialogs.domain}/select/logsql/query";
|
||||
}
|
||||
lib.optionalAttrs haveBaoClientIdentity {
|
||||
HIVE_AGENT_LOGS_QUERY_URL = "https://${config.services.hyperhive.swarm.victorialogs.domain}/select/logsql/query";
|
||||
}
|
||||
//
|
||||
# Where the swarm's secret store is, and the identity this hive presents to
|
||||
# it (hive-c0re::lifecycle::agent_identity). `swarm_secret_client` reads these
|
||||
|
|
|
|||
Loading…
Reference in a new issue