swarm-logs-auth: rate-limit verification and cache positive verdicts
Any request on logs.<swarm> carrying a well-formed swarm-agent bearer made swarm-logs-auth do a bao cert login and KV read before it could refuse, with no cap on the rate. nginx now applies limit_req (zone swarm_logs_agent_auth, keyed by client address, 5r/s burst 20 nodelay by default) on the internal location that forwards to swarm-logs-auth, answering 403 when over, since auth_request passes through only 401/403 and swarm-logs retries a 401. The authelia path and the query location carry no limit. swarm-logs-auth remembers bearers it has granted, keyed by SHA-256 of the bearer, for --verdict-ttl seconds (deploy.victorialogs.authVerdictTtl, 60 by default), holding at most 4096 and evicting the oldest. Denials are never remembered. A replaced or deleted queue secret therefore keeps working at the log store for up to the TTL after its last check. Closes #5190
This commit is contained in:
parent
3be6096c26
commit
8be4030d03
9 changed files with 367 additions and 51 deletions
|
|
@ -31,6 +31,10 @@ At the gateway, nginx hands a bearer of that shape to `swarm-logs-auth`, which
|
|||
compares it with the stored secret (`swarm-agent-verify`, the check the queue's
|
||||
auth callout also uses). A 401 makes `swarm-logs` read the secret again and
|
||||
retry once, which covers a secret re-minted between the read and the check.
|
||||
`swarm-logs-auth` grants a secret it has verified for 60 s by default without asking
|
||||
the store again, so a replaced secret also keeps working for up to that long.
|
||||
A 403 is the gateway's per-address rate limit on these checks; it is not
|
||||
retried.
|
||||
|
||||
🩸 The secret is never logged or rendered into an error.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue