bao: let the UI's admins login write the review classifier's API key
The docs tell the operator to write `secret/swarm/services/review-classifier/anthropic-api-key` by hand in the bao UI, but the UI's OIDC login for authelia's `admins` group lands on `swarm-operator-viewer`, which is list+read on `secret/metadata/*` and nothing under `secret/data/`. bao refuses the write, so an admin can't set the key and every classifier run fails with "no API key". The viewer policy gains `create` and `update` on that one leaf, no `read`: a UI session still never sees a secret value. The leaf is a named binding, shared with the classifier's reader policy. module-eval pins the viewer's two stanzas and that no `data/` grant carries `read`. docs/swarm/secrets.md and services.md describe the write. Closes #5148
This commit is contained in:
parent
a669cd96b6
commit
133d5578d2
4 changed files with 32 additions and 11 deletions
|
|
@ -524,9 +524,12 @@ stream passthrough readers use on that host comes up with the store sealed.
|
|||
|
||||
The OIDC tab logs in through authelia as the client `swarm-bao-ui`
|
||||
(`swarm.bao.ui.oidc.clientId`). An `admins` member gets a token under
|
||||
`swarm-operator-viewer`: `list` and `read` on `secret/metadata/*`. That shows
|
||||
`swarm-operator-viewer`: `list` and `read` on `secret/metadata/*`, and
|
||||
`create` and `update` on
|
||||
`secret/data/swarm/services/review-classifier/anthropic-api-key`. That shows
|
||||
the key tree and each key's versions and timestamps, and no value: the store
|
||||
refuses every `secret/data/` read. Anything more needs a token.
|
||||
refuses every `secret/data/` read. The one write is the review classifier's API
|
||||
key, which the operator fills in by hand. Anything more needs a token.
|
||||
|
||||
| piece | written by |
|
||||
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
|
||||
|
|
|
|||
|
|
@ -243,7 +243,8 @@ identity: the host that runs the store has it, and a services host with the
|
|||
store elsewhere gets the classifier only once it holds a copy of the pair (see
|
||||
below). Set `deploy.review-classifier.enable` directly to override either way.
|
||||
|
||||
The operator writes the Anthropic key by hand, in the secret store's UI at
|
||||
The operator writes the Anthropic key by hand, in the secret store's UI under
|
||||
the OIDC login, at
|
||||
`secret/swarm/services/review-classifier/anthropic-api-key`, field `api_key`.
|
||||
Nothing writes it for you: until it exists the service runs and every run fails
|
||||
with `no API key…`. The service reads the key on every run, so writing or
|
||||
|
|
|
|||
Loading…
Reference in a new issue