Trust
Security overview
We hold our security posture to the bar a CPA firm and a denominational board ask about — not the bar a small-business SaaS gets away with.
Identity
- MFA enforced by default for every user.
- SAML 2.0 and OIDC SSO on the Firm plan; per-workspace IdP configuration.
- SCIM 2.0 provisioning for Okta, Google Workspace, Microsoft Entra, and any conformant IdP.
- Break-glass workspace-owner account isolated from SSO, MFA-locked.
Access control
- Role-based access control with workspace and per-entity scopes (see product overview).
- Segregation of duties enforced in code: e.g., bill creators cannot approve their own bills.
- Configurable approval thresholds; dual approval for bills above a per-tenant amount.
- Anti-BEC vendor bank-info change controls: 2-of-3 named approvers + 24-hour cool-down.
Data protection
- Encryption in transit: TLS 1.3 minimum, modern cipher suites only.
- Encryption at rest: AES-256, application-layer envelope encryption for sensitive fields (TINs, SSNs, bank account numbers).
- Per-entity database isolation; per-tenant least-privileged Postgres role.
- Card data: never stored, transmitted, or processed by steepl. PCI SAQ A.
- Sensitive fields scrubbed from logs (TIN, SSN, full account number, donor PII bodies).
Cryptography
- Period-close anchors signed in AWS KMS (Frankfurt, FIPS 140-3 Level 3 HSM-backed) and stored in WORM-locked object storage.
- Per-tenant data-encryption keys derived from a KMS-protected KEK via HKDF.
- Signing keys never leave the HSM; signature verification uses the public key embedded in each anchor.
- OIDC federation from Hetzner to AWS — no long-lived AWS credentials live on our compute hosts.
Auditability
- Append-only audit log per tenant; append-only global audit summary in the control plane.
- Posted journal entries are immutable and form a SHA-256 chain; period close emits a signed Merkle root.
- Customer-controllable audit-log export.
- Stand-alone verifier CLI re-derives the chain and verifies anchors — handed to auditors for independent review.
Network and transport
- Caddy at the edge with automatic Let's Encrypt certificates. HSTS preload.
- Postgres bound to the private network only; never publicly reachable.
- SSH key-only, IP-allowlist; fail2ban; no password authentication anywhere.
- Strict CSP, X-Content-Type-Options, Referrer-Policy, Permissions-Policy.
Operations
- Secrets in OpenBao (self-hosted) auto-unsealed via AWS KMS Transit.
- No production secrets in source. Configuration via environment with per-host scope.
- Quarterly access reviews; annual third-party penetration testing once revenue supports.
- Per-tenant restore drills run monthly against random tenants in staging.
Compliance roadmap
- SOC 2 Type I within 6 months of GA; Type II within 12 months. Evidence collection via Vanta from day one.
- PCI SAQ A — we never touch card data.
- GDPR / CCPA — data resident in Germany (Hetzner Falkenstein); deletion + export honored within 30 days.
- HIPAA — not in scope today. Tracked for V2 if benevolence/counseling notes become material.
- ISO 27001 — reviewed for tier 3 (≥1,000 tenants) if denominational customers require.
Vulnerability disclosure
Email security@steepl.co. PGP key available in our security.txt. We acknowledge responsible disclosures on this page once the issue is resolved.
Acknowledgments: none yet. We're early.