Skip to content

Multi-Tenancy & Isolation

AnkaSecure provides secure multi-tenant architecture with strict data, resource, and security isolation. This document explains how the platform ensures tenant separation and protects your cryptographic keys and data from unauthorized access.


Multi-Tenancy Model

What is a Tenant?

A tenant represents an independent organization using AnkaSecure. Each tenant has:

  • Isolated keystore: Cryptographic keys segregated per tenant
  • Independent users: User accounts scoped to tenant
  • Separate applications: API keys and OAuth clients per tenant
  • Dedicated quotas: Rate limits and resource allocations

Example: If your company (ACME Corp) uses AnkaSecure, you are a tenant. Your cryptographic keys, users, and API calls are completely isolated from other tenants (Widgets Inc, Contoso, etc.).


Isolation Guarantees

An AnkaSecure provides three layers of isolation:

1. Data Isolation

Keystore Separation: - Each tenant has a dedicated keystore (logical or physical) - Keys from one tenant cannot be accessed by another tenant - Key IDs are tenant-scoped (Tenant A's "my-key" ≠ Tenant B's "my-key")

Cryptographic Operations: - Encryption/decryption operations validate tenant ownership - JWT claims include tenant ID validation - Cross-tenant operations are automatically rejected

Audit Logs: - Each tenant has isolated audit logs - Tenant A cannot view Tenant B's audit trail - Logs include tenant ID for compliance reporting

Verification Example:

# Attempt to access another tenant's key (should fail)
curl -X POST https://api.ankasecure.com/api/v1/crypto/encrypt \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "X-Tenant-ID: tenant-a" \
  -H "Content-Type: application/json" \
  -d '{
    "keyId": "tenant-b-key",  # ← Key from different tenant
    "plaintext": "..."
  }'

# Response: 403 Forbidden
# {
#   "error": "AUTH_003",
#   "message": "Access denied: key belongs to different tenant"
# }


2. Resource Isolation

Rate Limiting: - Per-tenant rate limits (not shared across tenants) - Tenant A's high traffic does not affect Tenant B's quota - Fair resource allocation via multi-tenant queuing

Quotas: - Per-tenant API call limits (operations/day, operations/month) - Per-tenant key generation limits (keys/day) - Per-tenant storage limits (keystore size)

Example Rate Limits (default, configurable):

- API Calls: 1,000,000 per month
- Key Generation: 10,000 keys per month
- Storage: 10 GB keystore per tenant

Verification (via response headers):

X-RateLimit-Limit: 60          # Requests per minute for THIS tenant
X-RateLimit-Remaining: 42      # Remaining quota for THIS tenant
X-RateLimit-Reset: 1735000000  # When THIS tenant's quota resets


3. Security Isolation

Authentication: - JWT tokens are tenant-specific (cannot be reused across tenants) - API keys are tenant-scoped - User accounts belong to single tenant (no cross-tenant users)

Authorization: - Role-Based Access Control (RBAC) per tenant - Tenant admins manage only their tenant (cannot access other tenants) - Platform admins (AnkaTech) have elevated cross-tenant visibility (for support)

Cryptographic Isolation: - Keys generated for Tenant A cannot encrypt/decrypt Tenant B's data - Key rotation for Tenant A does not affect Tenant B - HSM partitions (if used) are tenant-specific


Tenant Lifecycle

1. Tenant Provisioning

SaaS Model: - Tenant provisioned automatically during registration - Initial admin user created - Default keystore initialized

On-Premise Model: - Tenant provisioned by platform admin (AnkaTech services) - Custom configuration (HSM, identity provider, policies)

Tenant Metadata: - Tenant ID (unique identifier, e.g., acme-corp) - Tenant name (display name, e.g., "ACME Corporation") - Status (active, suspended, deleted) - Creation date


2. User Management

Per-Tenant Users: - Users belong to a single tenant - Username uniqueness enforced per tenant (alice@tenant-a ≠ alice@tenant-b) - Roles and permissions scoped to tenant

User Roles (per tenant): - Tenant Admin: Manage tenant configuration, users, applications - Application Admin: Generate API keys, manage applications - User: Perform cryptographic operations (encrypt, sign) - Auditor: Read-only access to audit logs

Role Assignment:

# Assign role to user (via Admin API or CLI)
curl -X PATCH https://api.ankasecure.com/api/admin/users/{userId} \
  -H "Authorization: Bearer TENANT_ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"role": "APPLICATION_ADMIN"}'


3. Application Management

Applications: Programmatic identities for service-to-service authentication

Per-Tenant Applications: - Each tenant can create multiple applications - Each application gets a unique API key - API keys are tenant-scoped (cannot access other tenants)

Application Creation:

# Create application and generate API key
curl -X POST https://api.ankasecure.com/api/admin/applications \
  -H "Authorization: Bearer TENANT_ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production API",
    "description": "Primary production service"
  }'

# Response:
# {
#   "applicationId": "app-123",
#   "apiKey": "ask_1234567890abcdef...",  # ← Tenant-scoped API key
#   "tenantId": "acme-corp"
# }


4. Tenant Suspension & Deletion

Suspension: - Temporarily disable tenant access (non-payment, security incident) - All API calls return 403 Forbidden - Data and keys preserved (can be re-enabled)

Deletion: - Permanent tenant removal - All keys deleted (cannot be recovered) - Audit logs archived (compliance retention) - Tenant ID retired (cannot be reused)


Security Considerations

JWT Validation & Tenant Enforcement

Every API request validates: 1. JWT signature (token authenticity) 2. JWT claims (issuer, audience, expiration, not-before) 3. Tenant ID match: X-Tenant-ID header must match JWT tenantId claim

Example JWT Claims:

{
  "iss": "https://auth.ankasecure.com",
  "aud": "api.ankasecure.com",
  "sub": "[email protected]",
  "tenantId": "acme-corp",  #  Tenant isolation enforced here
  "exp": 1735000000,
  "nbf": 1734996400
}

Security Enforcement:

# Valid request (tenant ID matches JWT)
curl https://api.ankasecure.com/api/v1/crypto/encrypt \
  -H "Authorization: Bearer JWT_WITH_TENANT_A" \
  -H "X-Tenant-ID: tenant-a"  # ✅ Matches JWT claim

# Invalid request (tenant ID mismatch)
curl https://api.ankasecure.com/api/v1/crypto/encrypt \
  -H "Authorization: Bearer JWT_WITH_TENANT_A" \
  -H "X-Tenant-ID: tenant-b"  # ❌ Mismatch rejected

# Response: 403 Forbidden
# {
#   "error": "AUTH_003",
#   "message": "Tenant ID mismatch: JWT tenant (tenant-a) != header (tenant-b)"
# }


Keystore Isolation

Key Lookup Process: 1. Extract tenant ID from JWT claims 2. Retrieve keystore for that specific tenant 3. Look up requested key in tenant keystore 4. Verify key belongs to tenant (double-check) 5. Perform cryptographic operation

Cross-Tenant Protection: - Even if Tenant B knows Tenant A's key ID, access is denied - Key IDs are not globally unique (scoped to tenant) - HSM partitions (if used) are tenant-specific

Example (key generation with automatic tenant scoping):

// SDK automatically includes tenant ID from config
KeyGenerationRequest request = KeyGenerationRequest.builder()
    .algorithm("ML-KEM-768")
    .keyId("customer-data-key")  // ← Scoped to YOUR tenant
    .build();

KeyResponse key = client.generateKey(request);
// Key stored in YOUR tenant's keystore only


Multi-Tenant Best Practices

For Tenant Administrators

DO: - Use unique tenant IDs (avoid generic names like "test", "demo") - Implement role-based access control (RBAC) within your tenant - Rotate API keys regularly (every 90 days) - Monitor audit logs for unauthorized access attempts - Set up alerts for suspicious activity (failed authentications, unusual encryption volumes)

DON'T: - Share API keys across tenants (each tenant should have separate keys) - Use production keys in development environments - Store tenant credentials in public repositories - Assume other tenants' data is inaccessible (verify isolation regularly)


For Application Developers

DO: - Always include X-Tenant-ID header in API requests - Validate tenant ID matches your expected tenant - Use separate API keys for dev, staging, production (different tenants recommended) - Implement retry logic with exponential backoff (respect rate limits)

DON'T: - Hardcode tenant IDs in source code (use environment variables) - Skip tenant ID validation in responses - Retry indefinitely on 403 errors (likely authorization issue)


Compliance & Audit

Tenant Isolation for Compliance

HIPAA (Healthcare): - Each covered entity should be a separate tenant - PHI encryption keys isolated per tenant (prevent data mixing) - Audit logs segregated for BAA compliance

PCI-DSS (Finance): - Each merchant should be a separate tenant - Cardholder data encryption keys isolated per tenant - Log retention per tenant (12 months minimum)

GDPR (EU Privacy): - Each data controller should be a separate tenant - Personal data encrypted with tenant-specific keys - Data subject rights enforced per tenant


Audit Trail Verification

Verify Tenant Isolation (via audit logs):

# Request audit logs for your tenant
curl https://api.ankasecure.com/api/audit/logs \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "X-Tenant-ID: your-tenant-id"

# Response: Only YOUR tenant's operations (no cross-tenant data)

Audit Log Fields:

{
  "timestamp": "2025-12-26T10:15:30Z",
  "correlationId": "a1b2c3d4-e5f6-7890",
  "tenantId": "your-tenant-id",  #  Verify this matches your tenant
  "userId": "[email protected]",
  "operation": "ENCRYPT",
  "keyId": "your-key-123",
  "status": "SUCCESS"
}



Documentation Version: 3.0.0 Last Updated: 2025-12-26