Skip to content

EdgeWatch 0.20.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 09:33
· 14 commits to main since this release
42f730b

Highlights

Business units. Several internal teams can now share one EdgeWatch deployment and its database. Each unit has its own accounts, jobs, scans, baselines, incidents, notification destinations, custom scanner profiles and public status page, and the application keeps them apart.

  • Every installation becomes the Default unit on upgrade and keeps working as before. Administrators get a new read-only Audit page, and the public page is also served at /public/default.
  • A platform administrator is a separate account created from the host (edgewatch admin platform-setup-token). It creates units, sets their capacity, invites their first administrators and reads the platform audit, and sees units only as counts, never their data.
  • Once a second unit exists, every administrator must use TOTP.
  • New units start with update alerts off, publish their own page at /public/<slug>, and can be capped in scan slots and probe budgets.
  • Disabling a unit pauses it; deleting a disabled unit erases its data with a resumable purge.

See the README section "Business units", and SECURITY.md for the trust boundary: isolation is enforced in the application, and host, container, CLI, database and backup access reach every unit.

Upgrading from v0.19.0

  • Back up ./data first. The first start migrates the database through schemas 51–54, including a one-time rebuild of the users, jobs, scanner profiles and notification destinations tables and a resumable re-keying of the latest-host view. edgewatch health reports progress.
  • The upgrade is one-way: a v0.19.0 binary cannot open the upgraded database. Roll back by restoring the backup.
  • If you tried the business units preview, remove experimental.business_units from config.yaml; EdgeWatch still starts with it and logs a warning.

What's Changed

  • feat(app): schedule scans through a fair per-key slot pool by @crypt0rr in #840
  • feat(store): add tenants and move singletons to the default tenant (schema 51) by @crypt0rr in #841
  • feat(store): rebuild root tables with tenant ownership (schema 52) by @crypt0rr in #842
  • feat(store): attribute scans, events and deliveries to tenants (schema 53) by @crypt0rr in #843
  • feat(store): key the latest host projection by tenant (schema 54) by @crypt0rr in #844
  • test: open fresh databases from a migrated template by @crypt0rr in #846
  • feat(store): add tenant scopes, a table registry and a tenant SQL lint by @crypt0rr in #845
  • refactor(web): pass the tenant store to every tenant handler by @crypt0rr in #847
  • refactor(store): scope scan and host reads by tenant by @crypt0rr in #848
  • refactor(store): scope history and incident methods by tenant by @crypt0rr in #849
  • refactor(store): scope job methods by tenant by @crypt0rr in #850
  • refactor(store): scope scanner profiles by tenant by @crypt0rr in #851
  • refactor(store): scope runtime and baseline methods by tenant by @crypt0rr in #852
  • refactor(store): scope scan cycle reads by tenant by @crypt0rr in #853
  • refactor(store): scope notification destinations and routing by tenant by @crypt0rr in #854
  • refactor(store): scope public status by tenant by @crypt0rr in #855
  • refactor(store): move daemon methods to the system store by @crypt0rr in #856
  • test(store): stop the backup snapshot test timing out under load by @crypt0rr in #857
  • refactor(store): scope accounts and audit by tenant by @crypt0rr in #858
  • refactor(cli): use scoped stores in host commands by @crypt0rr in #859
  • refactor(app): run every tenant's jobs through its own tenant store by @crypt0rr in #860
  • refactor(store): delete the unscoped store wrappers and enforce the tenant lint by @crypt0rr in #861
  • feat(config): add an experimental.business_units flag by @crypt0rr in #863
  • feat(app): cap scan slots and probe budgets per business unit by @crypt0rr in #864
  • feat(auth): add the platform administrator and business unit account rules by @crypt0rr in #865
  • feat(store): add unit and platform audit views by @crypt0rr in #866
  • feat(store): add business unit lifecycle and a resumable purge by @crypt0rr in #867
  • feat(app): fan update alerts out per business unit and scope active scans by @crypt0rr in #868
  • feat: add business units by @crypt0rr in #884
  • fix(ci): read diffs larger than 1 MiB in the diff coverage gate by @crypt0rr in #885

Full Changelog: v0.19.0...v0.20.0