Security
数据库转储不会泄露任何信息。
每位用户的个人数据都会使用按租户区分的密钥进行静态加密,这些密钥永远不会接触数据库。存储凭据泄露或备份被盗,得到的只是密文,而非电子邮件地址、姓名或电话号码。
- OAuth 2.0
- OIDC
- SAML 2.0
- SCIM 2.0
- PKCE (RFC 7636)
- PAR (RFC 9126)
- WebAuthn / FIDO2
- TOTP
- JWT / JWKS
- AES-256-GCM
- HMAC-SHA256
- TLS 1.2+ / 1.3
- RBAC
- DDoS / WAF
- SOC 2 CC6 / CC7
- GDPR erasure
- 01Stolen database or backup
Ciphertext. Per-tenant keys live in Vault, never in the database.
- 02Leaked storage credential
Nothing usable. Shared keys are off; access is Entra identity + RBAC only.
- 03Compromised app pod
No lateral movement, no cloud metadata. Egress is default-deny and every decrypt is logged.
- 04Internet scan of the admin plane
No route. The control plane is not on the public internet.
- 05Traffic interception
TLS end to end, including pod-to-Vault inside the cluster.
Layers, not a wall
Each boundary an attacker crosses only leads to the next one. At the center, the data itself is ciphertext.
Encryption & tenant isolation
Personal data is encrypted at rest with keys the database never sees, and it stays searchable.
- Keys outside the data
- Values encrypt and decrypt through HashiCorp Vault Transit. The application never holds key material and the database never sees a key.
- A key per tenant
- Every tenant gets its own AES-256-GCM key. Encryption is randomized, so identical inputs never produce identical ciphertext.
- Searchable without plaintext
- Keyed-HMAC blind indexes power login-by-email, search-by-name and domain lookups over data that is never stored in the clear. The index keys are HMACs too, so a dump of the index tables reveals nothing.
- Crypto-shredding
- Deleting a tenant destroys its key, making all of that tenant's data permanently unrecoverable. That is GDPR Article 17 erasure by cryptography, with no row-by-row deletion.
- What is protected
- Emails, names, phone numbers, company names and custom attributes are encrypted at rest. Passwords were never stored reversibly. Opaque IDs, roles and timestamps stay clear so the system stays operable.
Key management
The keystore is treated as the crown jewels, because it is.
- Encrypted in the cluster
- Vault's listener runs TLS with a private CA, so Transit traffic is encrypted even on the pod network.
- KMS auto-unseal
- Vault auto-unseals against an Azure Key Vault key. No unseal keys sit on disk or in a runbook.
- HA and backed up
- A three-node Raft cluster with a daily snapshot to an isolated, geo-redundant (GRS) account, roughly a 24h RPO. Snapshots are barrier-encrypted.
- No root in the cluster
- Apps run on scoped, least-privilege per-host tokens. The root token lives in a break-glass vault, not the workload.
- Every operation audited
- A Vault audit device records every cryptographic operation by token and key. Use of a token outside its policy raises an alert.
Network & zero-trust
Every hop is deny-by-default. A workload can reach only what it is declared to need.
- Default-deny both ways
- NetworkPolicies deny pod-to-pod ingress and egress by default. A compromised pod cannot move laterally, reach cloud metadata, or exfiltrate freely.
- Edge and origin lock
- The public surface sits behind Cloudflare for DDoS and WAF, and the origin only accepts traffic from the edge. Direct-to-origin is blocked.
- Private data plane
- Storage, Key Vault and the container registry are reached over private endpoints, and the Kubernetes API is private.
- Admin off the internet
- The platform control plane is reachable only over the private network, never the public internet.
Identity & access
The standards you already require, plus phishing-resistant options for the accounts that matter.
- OAuth2 / OIDC, done right
- Authorization Code with PKCE (RFC 7636) and Pushed Authorization Requests (RFC 9126), so authorization parameters never ride the browser. Tokens are JWTs verified against rotating JWKS.
- Enterprise federation
- SAML 2.0 sign-in and SCIM 2.0 provisioning (RFC 7643/7644), including group-to-role mapping at token issuance.
- MFA and passkeys
- TOTP, WebAuthn / FIDO2 passkeys and fully passwordless sign-in, with refresh-token rotation on every use.
- Hardened admin
- Platform admin is SSO-only through Entra SAML under enforced MFA. There is no admin password to phish.
Operations & assurance
Controls you can audit, not just claims you can read.
- Audit log with alerting
- Security-relevant events are logged and alerted on, aligned to SOC 2 CC7 monitoring.
- Images scanned in CI
- Every container image is scanned for CVEs, and a High or Critical (CVSS) finding blocks the release.
- Rotation and patching
- Static secrets rotate on a documented cadence and dependency security updates land automatically.
- Hardened infrastructure state
- Infrastructure state is geo-redundant, versioned, soft-deletable, private, and reachable by identity only, with no shared keys.
我们所防范的威胁
每家服务商都声称“静态加密”。但这几乎总是指磁盘加密:只要有权读取存储,云端便会自动解密,因此存储密钥泄露或备份被盗,仍会泄露明文。我们不会。密钥保存在 Vault 中,绝不进入数据库,因此数据与开启它的密钥永远不在同一处。复制数据表,你得到的只有密文,若不再次攻入 Vault,它便毫无价值。
关于"什么都拿不到",有一点必须说清楚:这里指的是您用户的个人数据。审计轨迹和短期留存的诊断日志仍会记录发生了什么、何时发生,以确保系统可运维、可追责。日志中出现的每一个身份都是化名或经过掩码的令牌,绝不会是真实姓名、邮箱或 IP 地址。
报告安全漏洞
发现问题?请发送电子邮件至 [email protected]。我们的机器可读联系信息发布在 /.well-known/security.txt。