Identity, Access & Tenant Trust
vault
Application-layer envelope encryption for customer secrets — AES-256-GCM, per-tenant DEK, KMS-wrapped. Audit-logged read/decrypt, zero plaintext at rest.
secrets12 secrets · 3 tenants
rotation policyOpenAI API Key
sk-•••••••••••8847acme-prodkms/9f2arotated 3 days ago
Creem Webhook Secret
whsec_•••••••••••1c4dacme-prodkms/9f2arotated 12 days ago
Database Password
pg://•••••••••••a31flumen-devkms/4b7erotated 27 days ago
PlaintextDEKKEK (KMS)
AES-256-GCM · per-tenant DEK · KMS-wrapped
In code
vault.ts
1import { getVault } from "@nebutra/vault";
2
3const vault = await getVault();
4
5// Envelope encryption — AWS KMS unwraps the DEK per-record.
6const encrypted = await vault.encrypt(secretKey, {
7 tenantId: org.id,
8 metadata: { name: "OpenAI API Key", type: "api_key" },
9});
10
11const plaintext = await vault.decrypt(encrypted);More in nebutra.com
- auditHash-chained, SHA-256 append-only audit log for actor/tenant actions. SOC 2-grade tamper detection, streaming export, and replay-safe queries.
- authBetter Auth on Postgres — organization membership, device-flow login, MFA-enforced, session HMAC-signed. One identity layer, no vendor in the loop.
- captchaBot challenge with Cloudflare Turnstile / hCaptcha / reCAPTCHA behind one verify() call. Server-side scoring, per-route enable, no third-party tracker on the client.
- identityShared actor primitive — usr_/svc_/api_ ID space, role/membership lookup, tenant attachment. The single identity object every iam package reads.
- oauthYour own OIDC identity provider — "Sign in with Nebutra" for third-party apps. Authorization code + PKCE, refresh-token rotation, consent, clients stored in Postgres.
- permissionsRBAC + ABAC engine — CASL for in-process checks. defineAbility() server, <Can /> in React.