Unique data keys
Every protected record receives its own random symmetric key.
Data Convoy treats object paths, destructive actions, and worker credentials as load-bearing security concerns. The result is a layered model built from explicit mechanisms—not a security adjective.
Path-bearing metadata is encrypted at rest with a unique XChaCha20-Poly1305 data key for each record. That data key is sealed to the team’s public key. Key-pair rotation can therefore re-seal small data keys without exposing or rewriting the underlying metadata plaintext.
Every protected record receives its own random symmetric key.
Data keys are sealed to a per-team public key; the private key is stored only in wrapped form.
The application handles paths transiently when users browse or explicitly view records, but does not persist path-bearing fields in cleartext.
The key-encryption key lives in AWS Secrets Manager, while KEK-wrapped team private keys live in the application database. A database dump alone cannot decrypt metadata; access to the KEK alone has no wrapped keys to open.
Workers use AWS STS role assumption in the customer environment to reach S3. Data Convoy does not require standing AWS access keys to customer data in its application tier. Worker bearer tokens are stored as SHA-256 hashes and shown in plaintext only when issued.
Dry-run and copy-only operations are separated from production deletion and restore retrieval. Bucket repointing is separated from ordinary team editing. The server recomputes the needed permission from what a job actually does, so hiding a UI control is never the enforcement boundary.
Privileged mutations, denied attempts, worker claims and completion, sign-in, and selected sensitive reads are written to an append-only audit table. Retention jobs export old records as NDJSON to the team’s own log bucket before deleting the database copy.