swarm-bao: drop the default-policy grant; swarm/public/ is read by name
Writing bao's `default` policy needed a new stanza in the granter's own policy, which only the bootstrap token can upload, so deploying it took a manual root-token step. Nothing needed it: the one reader of the callout xkey's public half is `swarm-bao-nats-callout-xkey`, which logs in as the `swarm-nats-auth` role, and that role's policy already names the path. `swarm-bao-nats-auth-policy` writes that policy as the granter on every deploy, under the granter's existing `sys/policies/acl/swarm-*` grant. Removed: the `swarm-bao-public-read-policy` unit, its marker block, the granter's `sys/policies/acl/default` stanza, the granter-role restart of that unit, the bao.md section and the module-eval cases pinning them.
This commit is contained in:
parent
52c931c3a7
commit
06784e55fa
4 changed files with 31 additions and 224 deletions
|
|
@ -55,9 +55,9 @@ the unit's journal instead.
|
|||
|
||||
### Residual risk
|
||||
|
||||
The granter is root-equivalent. It may write any `swarm-*` policy, and bao's
|
||||
`default` policy, with any content, and attach a policy to a role that accepts
|
||||
any certificate; no bao ACL can constrain what a policy says. What bounds it:
|
||||
The granter is root-equivalent. It may write any `swarm-*` policy with any
|
||||
content, and attach it to a role that accepts any certificate; no bao ACL can
|
||||
constrain what a policy says. What bounds it:
|
||||
|
||||
- `nix/host-modules/swarm-bao.nix` renders every policy it writes, and
|
||||
module-eval pins each principal's grants. **Merging a change to that policy
|
||||
|
|
@ -76,21 +76,6 @@ any certificate; no bao ACL can constrain what a policy says. What bounds it:
|
|||
restarting `swarm-bao-pki` mints a new leaf, but doesn't invalidate the old
|
||||
one.
|
||||
|
||||
### What every token may read
|
||||
|
||||
Anything under `secret/swarm/public/` is readable by every token the store
|
||||
issues. `swarm-bao-public-read-policy` puts that one read into bao's `default`
|
||||
policy, which every token carries, between two marker lines. It reads the
|
||||
policy, replaces only its own block, and writes the result back when it
|
||||
differs, so the store's own stanzas stay as the store wrote them. It never
|
||||
writes a policy it read back empty. The callout xkey's public half lives
|
||||
there ([`secrets.md`](secrets.md#the-queues-callout-xkey)).
|
||||
|
||||
Writing `default` is a grant on the granter's own policy, so on a store
|
||||
whose granter predates it, the unit says so and exits 0 until the bootstrap
|
||||
step re-runs. Until then only principals whose policy names a `swarm/public/`
|
||||
path read it; the queue's responder is one, so the queue doesn't wait on this.
|
||||
|
||||
## Sealing
|
||||
|
||||
`services.hyperhive.deploy.bao.seal`:
|
||||
|
|
|
|||
Loading…
Reference in a new issue