Security in AetherGrid is part of the design. Each control below is documented in a public decision record, and the source is open, so your engineers can verify every one of them.
Access control
Every route requires an API key. Keys are scoped, so a key can do only what it was issued to do, and issuance and revocation are controlled by scope and by ownership. Each agent in a fleet uses its own key, and every key is rate limited. Interactive API docs are served only when you enable them.
Tenant isolation
Customers share the platform and never share data. Isolation is enforced in the application and in the database, and the tenant comes from the credential, never from the request. It covers API keys, nodes, jobs, workers, leases and events.
Execution ownership
Each job has one owner, held through a renewable lease. Lease release, renewal and outcome reports are fenced by lease identity, and reconciliation re-checks the lease at the moment it acts, so a stale worker cannot overwrite the current owner.
Hardened containers
The application container runs read-only with no added capabilities. Credentials stay out of the repository, the hardening checks run in CI, and they are proven able to fail, so a regression is caught before release.
Upgrades you can rehearse
Schema changes ship as versioned migrations, and the application checks the schema version when it starts. Each release is rehearsed against a database from the previous release, and the upgraded schema is compared with a fresh one.
Observability and audit trail
Every job keeps its event history. Requests and background loops write structured logs, errors are tracked, and liveness is separate from readiness, so operators can see what happened and why.