Security Overview¶
CertifyClouds is designed with security as a core principle. This document details our security architecture, data handling practices, and compliance support.
Executive Summary¶
Key Principle: CertifyClouds stores your operational data in your Azure environment and never sends secret values or key material to CertifyClouds-operated services.
CertifyClouds runs in your Azure environment. Our services receive license validation and, unless you disable Fleet Visibility, bounded aggregate operational counters. Optional customer-configured integrations can transmit selected data directly from your deployment to destinations you approve. The read-only MCP Connector is one such integration and is disabled by default.
Deployment Architecture¶
CertifyClouds deploys as a container in your Azure subscription with all data stored in your own managed database.
┌─────────────────────────────────────────────────────────────┐
│ Your Azure Subscription │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────┐ │
│ │ CertifyClouds │ │ Your Database │ │
│ │ (Container) │────│ │ │
│ │ │ │ - Scan results │ │
│ │ Managed Identity │ │ - Rotation history │ │
│ └──────────┬──────────┘ │ - Alert rules │ │
│ │ │ - Audit logs │ │
│ ▼ └─────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Your Key Vaults │ │
│ │ - Read metadata (Discovery) │ │
│ │ - Rotate secrets (PRO only) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
│ License validation only
▼
┌─────────────────────┐
│ license.certifyclouds│
│ .com │
└─────────────────────┘
Data Handling¶
What CertifyClouds-operated services receive¶
| Data | Access Level | Purpose |
|---|---|---|
| License key | Transmitted to license server | Subscription validation |
| License tier | Returned from license server | Feature gating |
| Version info | Transmitted to update server | Update notifications |
| Aggregate operational counters | Transmitted to the license server unless Fleet Visibility is disabled | Deployment support and fleet health |
What CertifyClouds does not send to its services¶
| Data | Detail |
|---|---|
| Secret values | Discovery reads metadata only: names, expiry dates, configuration. Rotation and Sync handle values transiently in memory; never persisted by CertifyClouds, never sent outside your tenant. |
| Your scan results | Stored in your Azure PostgreSQL database |
| Your Azure credentials | Managed Identity handles auth; no credentials stored in CertifyClouds |
| Your database contents | You own the database |
Optional customer-authorized MCP data flow¶
When an administrator enables the ENTERPRISE MCP Connector, an approved hosted AI client can call the eight read-only Phase 1 tools. Tool results travel over TLS from the customer deployment to that selected provider and can contain asset names and identifiers, expiry metadata, dependency relationships, compliance findings, or scoped audit events.
CertifyClouds-operated services do not receive those results. The selected AI provider handles them under the customer's provider agreement and configuration. MCP never returns bearer tokens, secret values, private keys, certificate material, or value-shaped hints. Disable the connector in Settings -> MCP Connector to close both the transport and its OAuth metadata paths.
Data Storage Location¶
All data is stored in your Azure PostgreSQL Flexible Server:
- Scan results (metadata only)
- Rotation history
- Sync configurations
- Alert rules
- Audit logs
Authentication & Authorization¶
Azure Authentication¶
CertifyClouds supports User-Assigned Managed Identity (recommended) and Service Principal authentication.
How It Works:
- Managed Identity is the preferred path with no long-lived credentials in the container
- Service Principal is supported when MI is unavailable
- Azure RBAC grants specific roles
- Azure AD issues short-lived tokens automatically
Application Authentication¶
CertifyClouds separates browser-session authentication from MCP resource-server authentication.
Protected Endpoints:
| Endpoint Type | Auth Required |
|---|---|
| Browser application APIs | CertifyClouds session JWT |
MCP transport (/api/mcp) | Customer Entra-issued bearer token, when MCP is enabled |
| MCP OAuth protected-resource metadata | Public only while MCP is enabled; contains no customer data |
Health check (/health) | No |
Login (/auth/login) | No |
| License status | No |
Security Controls¶
| Control | Description |
|---|---|
| Login Rate Limiting | Limits login attempts per IP |
| Account Lockout | Locks account after repeated failures with auto-unlock |
| Session Management | Configurable session duration and idle timeout |
| HttpOnly Cookies | Prevents XSS token theft |
| Secure Cookies | HTTPS-only transmission |
All security thresholds are configurable via environment variables.
Encryption¶
Data at Rest¶
| Component | Encryption Method |
|---|---|
| PostgreSQL Database | Azure-managed AES-256 |
| AWS/GCP Credentials | Industry-standard symmetric encryption |
Data in Transit¶
| Connection | Encryption |
|---|---|
| Azure APIs | TLS 1.2+ |
| PostgreSQL | TLS (Azure enforced) |
| License Server | HTTPS/TLS 1.3 |
| AWS/GCP APIs | TLS 1.2+ |
| Approved hosted MCP client | HTTPS with publicly trusted TLS, only when MCP is enabled |
Network Security¶
Default Configuration¶
| Setting | Value |
|---|---|
| Public IP | None (internal-only) |
| VNet Integration | Required |
| Private Endpoints | Supported |
Remote MCP clients are an optional exception to the internal-only application pattern. When MCP is enabled, the deployment's existing gateway must expose only the MCP transport and OAuth protected-resource metadata paths to the approved hosted client. CertifyClouds still validates the Entra token, client, user, scope, tenant, and tool policy on every MCP request.
Outbound Connections¶
| Destination | Purpose | Frequency |
|---|---|---|
license.certifyclouds.com | License validation | On startup + hourly heartbeat |
management.azure.com | Azure Resource Manager | During scans |
*.vault.azure.net | Key Vault data plane | During scans |
graph.microsoft.com | App Registration rotation | Rotation only |
| AWS/GCP APIs | Multi-cloud sync | Sync only |
Hosted MCP traffic is inbound from the selected provider to the existing CertifyClouds HTTPS route. It does not require a separate MCP service or hostname. See the MCP Connector guide for the exact paths and edge-policy requirements.
License Server¶
Data Flow¶
On startup and periodically, CertifyClouds contacts the license server with your license key and app version. The server responds with your entitlements (tier, feature flags, expiry date). No Azure data, secrets, or scan results are ever transmitted.
Offline Operation¶
- License cached locally after validation
- 7-day grace period if server unreachable
- Full functionality during network outages
What We Log¶
On our license server:
- Timestamp of validation
- License key (for rate limiting)
- Success/failure status
- App version (so we can ship targeted update notices)
- When fleet visibility is enabled (default, opt-out in Advanced Settings): aggregate operational counts and timestamps from your install
We do not log:
- Azure resource information (names, IDs, tags)
- Scan results, secret values, certificate material, or any credential data
- Audit log contents
- User-identifying information
Compliance Support¶
CertifyClouds is an evidence aggregator for Azure credential-lifecycle controls - it identifies findings, recommends remediation, and produces auditor-grade evidence packages. It is not a certified compliance product. See the Compliance Disclaimer for the full framing of what we evidence vs what remains a customer responsibility.
How CertifyClouds contributes¶
| Control area | What CertifyClouds provides |
|---|---|
| Cryptographic key + secret lifecycle | Automated rotation, expiry tracking, cryptoperiod conformance findings |
| Audit logging | Every CertifyClouds action logged with timestamp, actor, and hash-chained export |
| Access posture findings | Identifies RBAC + soft-delete + purge-protection + network-access gaps |
| Algorithm strength findings | Flags keys / certificates below FIPS 140-3 / PCI-DSS minimums |
| Encryption in transit | TLS for all backend connections; data at rest encrypted in PostgreSQL |
| Least privilege | Read-only by default; write permissions required only for rotation (PRO + ENTERPRISE) |
Framework evidence mappings¶
CertifyClouds maps its findings to control families in:
- HIPAA Security Rule §164.312
- PCI-DSS v4.0
- SOC 2 Type II
- ISO 27001 / ISO 27002
- NIST 800-53 Rev. 5
- CIS Azure Foundations Benchmark
- Azure Security Benchmark
Security Best Practices¶
Deployment Recommendations¶
- Use Private Endpoints for Key Vault and PostgreSQL
- Enable diagnostic logging on all resources
- Configure alerts for failed access attempts
- Restrict network access using NSG rules
- Use Azure Bastion or VPN for application access
Operational Security¶
- Rotate your SECRET_KEY periodically
- Review audit logs regularly
- Keep CertifyClouds updated
- Remove unused subscriptions
- Disable features not in use
Incident Response¶
If you suspect a security incident:
- Revoke the Managed Identity permissions
- Review audit logs for unauthorized actions
- Rotate any secrets that may have been exposed
- Contact security@certifyclouds.com
Security Contact¶
For security questions or vulnerability reports:
- Email: security@certifyclouds.com
- Response Time: 4 UK business days for standard security inquiries; urgent Enterprise paths are defined in the signed support agreement