review: allowlist netbird-backup on the ClusterSecretStore + hygiene
ci/woodpecker/pr/ci-scripts-test Pipeline was successful
ci/woodpecker/pr/pr-review Pipeline was successful

- The blocking catch: the openbao ClusterSecretStore's namespace
  conditions did not include the new netbird-backup namespace, so the
  ExternalSecret could never sync even after key provisioning. Added
  (sorted, with consumer comment).
- rm -f /backup/*.part up front — aborted-run leftovers are outside the
  retention glob.
- storageClassName: ceph-block explicit, matching the repo's other
  single-PVC manifests.

Keeping the key on root with restrict,command= rather than a dedicated
VPS user: the forced command is the actual privilege boundary (the key
can only ever produce a dump), and a separate user would need read
access to root-owned live SQLite + config either via group surgery on
/opt/netbird or sudo rules — more moving parts for the same effective
capability.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-26 09:15:31 +02:00
co-authored by Claude Fable 5
parent 37d9eafecf
commit 10489eedd0
3 changed files with 7 additions and 2 deletions
@@ -49,6 +49,9 @@ spec:
# readable, so copy first. Known-hosts is TOFU on first
# run, then pinned on the PVC.
install -m 600 /ssh/ssh-key /tmp/key
# Leftover .part files from aborted earlier runs are
# outside the retention glob — clear them up front.
rm -f /backup/*.part
ts=$(date +%Y-%m-%d)
ssh -i /tmp/key \
-o StrictHostKeyChecking=accept-new \
@@ -4,8 +4,9 @@ metadata:
name: netbird-backup
namespace: netbird-backup
spec:
# ceph-block (cluster default). 14 daily dumps of a small SQLite store
# plus config — 5Gi is generous headroom.
# 14 daily dumps of a small SQLite store plus config — 5Gi is
# generous headroom.
storageClassName: ceph-block
accessModes:
- ReadWriteOnce
resources:
@@ -26,6 +26,7 @@ spec:
- influxdb
- ingress
- monitoring
- netbird-backup # netbird-backup-ssh: the VPS-pull backup key
- paperless
- velero
provider: