A compliance platform with no ceiling
Getting to SOC 2 is solved. Staying with one tool as your program grows isn't. Calethia is built so the three things that usually force a migration are all code you own: the checks, the frameworks, and the connectors.
The three extension points
These are the three places a compliance program runs out of room. Each one is labeled with what actually ships today.
Available today
A check is a Python function in your repository. Anything Python can do, a check can do. If you can describe the control, you can write it.
- Python policy definitions with the @policy decorator
- Type hints and IDE autocomplete over typed resources
- Runs continuously, same as every built-in check
- Reviewed in pull requests like any other code
Available today
Policies map onto a framework-neutral common control spine. Adding a framework is mapping work rather than re-tagging every policy you own.
- Frameworks ship today, mapped to one control set
- One CCF tag carries a policy to every framework it satisfies
- See coverage against a framework before committing to the audit
- Define a framework of your own and see coverage immediately
Available today
Multiple providers ship with the platform. For everything else, a plugin interface means you write the connector yourself, so a gap in our coverage never becomes a gap in yours.
- First-party providers available today
- Unblock yourself instead of filing a feature request
- Scoped, read-only access rather than god-mode credentials
- Reach internal and homegrown systems no vendor supports
What a control actually looks like
A Python function in your repository, reviewed in a pull request and versioned with every change. There's no rule builder to learn.
Tag the frameworks you care about
Name the specific controls a check satisfies
from calethia import ResourceTypes, Result, Severity, policy
from calethia.aws import sns
from calethia.frameworks import SOC2
@policy(
id="aws.sns.topic_encryption",
name="SNS Topics Must Have Encryption Enabled",
severity=Severity.MEDIUM,
resource_types=[ResourceTypes.AWS.SNS_TOPIC],
frameworks=[SOC2("CC6.1"), SOC2("CC6.7")],
)
def check_topic_encryption(ctx: sns.Context) -> Result:
"""Ensure SNS topics are encrypted at rest with KMS."""
for topic in ctx.list_topics():
if topic.encryption_enabled and topic.kms_master_key_id:
ctx.pass_(topic.to_resource(), "Encrypted with KMS")
else:
ctx.fail(topic.to_resource(), "No encryption enabled")
return ctx.result()Or tag the control once
One CCF tag reaches every framework that control satisfies
from calethia import ResourceTypes, Result, Severity, policy
from calethia.ccf import CCF
from calethia.github import organization
@policy(
id="github.org.admin_mfa_required",
name="Organization Admins Have MFA Enabled",
severity=Severity.CRITICAL,
resource_types=[ResourceTypes.GitHub.ORGS_MEMBER],
frameworks=[CCF("access-mfa")],
)
def check_admin_mfa(ctx: organization.Context) -> Result:
"""Verify every org admin has 2FA enabled."""
for member in ctx.list_members():
if not member.is_admin:
continue
if member.two_factor_enabled:
ctx.pass_(member.to_resource(), "MFA enabled")
else:
ctx.fail(member.to_resource(), "No MFA")
return ctx.result()That single CCF("access-mfa")tag carries the policy to SOC 2 CC6.1 and CC6.6, CIS AWS 1.5, 1.6 and 1.10, CIS Google 1.1 through 1.4, PCI DSS 8.3.1, 8.3.2 and 8.5.1, NIST CSF PR.AC-7, ISO 27001 A.8.5, and HIPAA 164.312(d), including frameworks you haven't selected yet. That's the difference between adding a framework and rewriting your policy library.
The table stakes, done properly
Extensibility is why you stay. These are why you can start.
Move from point-in-time audits to continuous verification. Know your status today, not at the end of the window.
- Real-time compliance status
- Automated test execution
- Drift detection
- Scheduled compliance runs
Evidence is signed and timestamped, so an auditor can confirm an artifact is genuine without trusting the vendor that produced it.
- Cryptographic signing (RSA-SHA256)
- RFC 3161 trusted timestamps
- Tamper-evident audit trails
- Export-ready reports
The written policies a framework asks for, kept where your team already reads them. Generate a starter set, or link the documents you already maintain, and Calethia reconciles them against live control results.
- Generate SOC 2 policy documents, pre-mapped to the controls they cover
- Link the Google Docs and Confluence pages your team already keeps
- Drift flags where the document and live control results disagree
- Approval is bound to the exact content that was approved
Integrations
Multiple providers ship with the platform today, with more on the way. The connector SDK lets you write your own for anything else.
Cloud
- AWS
- AWS Organizations
- Google Cloud
- Cloudflare
- Pulumi
Identity & Access
- Okta
- Google Workspace
DevOps & Code
- GitHub
- GitLab
Data & Content
- Snowflake
- Confluence
- Bloomfire
- Google Drive
- Gmail
- Resend
How we handle access
We ask for scoped, read-only access rather than god-mode credentials, and we'll pursue formal certifications ourselves when the time is right.
We'll pursue our own SOC 2 Type II when the time is right. See Security for where we actually stand.
Read the code before you buy
A demo here is a screen share of the policy library and the SDK. Ask us to open any check and walk through what it actually asserts.