Cert-IX MVP1 β Compliance Baseline Matrix (38 Services)
Date: 2026-02-22
Scope: Minimum launchable compliance baseline on critical flows
Estimated remediation: 2β4 days (validated below)
Table of Contentsβ
- Service Compliance Matrix (38 services)
- Critical Flows & Dependencies
- P0/P1/P2 Gap Summary
- Remediation Plan per Flow
- E2E Testing Strategy by Flow
- Kafka Event Contract Freeze
- Go/No-Go Criteria
- Timeline
1. Service Compliance Matrixβ
| Symbol | Meaning |
|---|
| β
| Implemented and verified |
| β οΈ | Partially implemented / needs hardening |
| β | Missing / not implemented |
| N/A | Not applicable for this service type |
Compliance Dimensionsβ
| # | Dimension | Code |
|---|
| A | AuthN/AuthZ & Access Control | AUTHN |
| B | Audit Logging (who/what/when + traceId) | AUDIT |
| C | Secrets Management (no hardcoded secrets) | SECRETS |
| D | Encryption in Transit (TLS) + at Rest | ENCRYPT |
| E | Input Validation/Sanitization + Rate Limiting | INPUT |
| F | Monitoring/Alerting (health, logs, APM) | MONITOR |
1.1 Admin Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| 1 | admin-backend | P1 | β
JWT+Passport, RBAC via rbac.service, token blacklist (Redis) | β
authAuditLogger middleware, session.service.createAuditLog, DB-persisted | β οΈ Env vars via Joi validation; DB_SSL defaults false | β οΈ Helmet headers; DB_SSL=false default; session cookie secure only in prod | β
Joi validate middleware on all routes | β οΈ Winston logger; no APM agent detected | None | PG (cert_ix_admin), Redis, auth DB, assets DB, messages DB |
| 2 | admin-ui | P1 | β
JWT auth via admin-backend API | N/A (frontend) | β
No secrets in client code | β
HTTPS via Nginx/Kong | β
DOMPurify, client-side validation | β οΈ Elastic APM RUM | Consumer of admin-backend API | admin-backend |
1.2 Authentication & Identity Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| 3 | qr-auth-service | P0 | β
JWT+session, CSRF (Redis-backed), WebAuthn, MFA, device fingerprint, token blacklist, bot detection, IP reputation | β
AuditLogger class with tamper-resistant hashes (SHA-384 chain), DB+Kafka dual write, compliance tags (SOC2/GDPR/PCI) | β οΈ Env vars; CSRF_ENCRYPTION_KEY falls back to crypto.randomBytes (ephemeral) | β οΈ Kafka SSL configurable but ssl: process.env.KAFKA_SSL === 'true'; Redis TLS conditional | β
Joi validation, CAPTCHA integration, email validation, SQL injection patterns, rate limiting (DB-backed, 10 req/15min auth) | β οΈ Structured logging; no APM | Producer: 50+ topics (auth events, CSRF, sessions, security) | PG (cert_ix_auth), Redis, Kafka, captcha-service |
| 4 | qr-auth-ui | P1 | β
Login/register/2FA/WebAuthn UI | N/A (frontend) | β
No secrets in client | β
HTTPS | β
Client-side validation, DOMPurify | β οΈ Elastic APM RUM | N/A | qr-auth-service |
| 5 | otp-service | P0 | β
JWT auth, TOTP support | β
Kafka audit events | β οΈ Env vars via config | β
Kafka TLS, Redis TLS configurable | β
Rate limiting (Redis-backed) | β οΈ Logger only | Producer: OTP events | PG, Redis, Kafka |
| 6 | captcha-service | P1 | β
API key auth for service-to-service | β
Kafka audit events | β οΈ Env vars | β
Kafka TLS, TLS server | β
Challenge validation, rate limiting | β οΈ Logger only | Producer: CAPTCHA events | Redis, Kafka |
1.3 Client Frontend Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| 7 | client-dashboard | P0 | β
AuthContext with JWT, session mgmt, CapabilityGate (tier-based), permission-based nav | N/A (frontend) | β
No secrets; encrypted token storage (CryptoJS) | β
HTTPS, security headers in layout.js | β
DOMPurify on all inputs, client-side Joi | β
Elastic APM RUM | N/A | qr-auth-service, all backend APIs via Kong |
| 8 | client-verifier-ui | P1 | β
Token-based email verification | N/A (frontend) | β
No secrets | β
HTTPS | β
Input validation | β οΈ Elastic APM RUM | N/A | qr-auth-service |
| 9 | payment-ui | P1 | β
Session-based auth from checkout flow | N/A (frontend) | β
No secrets; Stripe.js handles PCI | β
HTTPS, Stripe Elements (PCI DSS) | β
Zod validation | β οΈ Elastic APM RUM | N/A | checkout-orchestration, Stripe |
1.4 Asset Management Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| 10 | asset-management-service | P0 | β οΈ Kafka-based permission validation (with fallback auth); no direct JWT middleware | β οΈ Security events service; audit via Kafka events on CRUD | β οΈ Env vars; encryption service uses env key | β οΈ Kafka TLS configurable; encryption.service.js for data at rest | β οΈ Rate limiting in config; validation in routes | β οΈ Logger only | Producer: asset CRUD events, quota sync; Consumer: permission responses | PG (cert_ix_assets), Redis, Kafka |
| 11 | asset-verification-service | P1 | β
JWT auth middleware (Go) | β οΈ DB logging of verification attempts | β οΈ Env vars; HMAC key in env | β
TLS server (Go), HTTPS endpoints | β
Input validation on verification requests | β οΈ Structured Go logging | Producer: verification events | PG (cert_ix_asset_verification), Redis |
| 12 | assets-sync-service | P1 | β οΈ Kafka SCRAM auth for broker; no HTTP auth (internal) | β No audit logging found | β οΈ Env vars; Kafka SCRAM credentials | β
Kafka TLS via SCRAM config | β οΈ Trust validator for data integrity | β No monitoring | Consumer: asset events; Producer: sync events | PG, Kafka |
1.5 Vulnerability & Scanning Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| 13 | vulnerability-management-service (Go) | P0 | β
JWT auth middleware with tenant isolation | β οΈ Audit in service layer; no dedicated audit table | β οΈ Env vars; config validation | β
TLS server, DB TLS, Kafka TLS | β
Request validation, security middleware (CORS, headers) | β οΈ Structured Go logging | Producer: vuln events; Consumer: scan events, capability responses | PG (cert_ix_vulnerabilities), Redis, Kafka, ES |
| 14 | vulnerability-classifier-service (Go) | P1 | β
JWT auth middleware | β οΈ Redis-based scan tracking | β οΈ Env vars | β
TLS configurable | β οΈ Basic validation | β οΈ Go logging | Consumer: scan results; Producer: classified vulns | PG (cert_ix_vuln_classifier), Redis, Kafka |
| 15 | vulnerability-policy-service (Go) | P1 | β
JWT auth middleware | β οΈ Config-level audit | β οΈ Env vars | β
TLS configurable | β οΈ Model validation | β οΈ Go logging | Consumer: vuln events; Producer: policy decisions | PG (cert_ix_vuln_policy), Redis, Kafka |
| 16 | vulnerability-remediation-service (Go) | P1 | β
JWT auth middleware | β οΈ Config-level audit | β οΈ Env vars | β
TLS configurable | β
Model validation, auth middleware validation | β οΈ Go logging | Consumer: vuln events; Producer: remediation tasks | PG (cert_ix_vuln_remediation), Redis, Kafka |
| 17 | go-tools (9 scanner engines) | P0 | β
JWT auth middleware (pkg/middleware/auth.go) | β
pkg/scanner/audit.go β scan audit trail with retention | β οΈ Env vars via config | β
TLS server, ES TLS | β
Rate limiting (Redis), input validation | β οΈ Go logging | Producer: scan results; Consumer: scan requests | PG (cert_ix_tools_service), Redis, Kafka, ES |
| 18 | scan-api-service (Go) | P0 | β
JWT auth + API key auth (api_key_service) | β
Call log repository for API audit | β οΈ Env vars | β
TLS, Kafka TLS | β
Validation, rate limiting | β οΈ Go logging | Producer: scan dispatch to engines | PG, Redis, Kafka |
| 19 | scan-worker-service (Go) | P1 | β Internal service, no HTTP auth (Kafka consumer only) | β No audit logging | β οΈ Env vars | β οΈ Kafka TLS configurable | β No HTTP input validation (Kafka only) | β No monitoring | Consumer: scan tasks; Producer: scan results | Kafka |
1.6 Compliance & Audit Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| 20 | compliance-guard-service | P1 | β No auth middleware found | β No audit logging | β No secrets management | β No TLS config | β No validation | β No monitoring | N/A | asset-verification-service |
| 21 | compliance-management-service (Go) | P1 | β οΈ Auth references in service layer | β
Activity log in service, Kafka producer | β οΈ Env vars | β
TLS configurable | β
Repository-level validation | β οΈ Go logging | Producer: compliance events | PG, Redis, Kafka |
| 22 | compliance-management-service (Node, unused) | P2 | β Not in use | β Not in use | β Not in use | β Not in use | β Not in use | β Not in use | N/A | N/A |
| 23 | audit-evidence-service | P1 | β οΈ PQC decryption middleware only | β οΈ Audit in middleware | β No secrets management | β No TLS config | β No validation | β No monitoring | N/A | PG |
1.7 Payment Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| 24 | payment-processing-service (Go) | P0 | β
Auth middleware, user existence check | β No audit logging found | β οΈ Env vars; Vault AppRole configured but not integrated in code | β
TLS server, DB TLS, Redis TLS, Kafka TLS | β
Rate limiting middleware, OTP validation | β οΈ Go logging | Producer: payment events; Consumer: OTP events | PG, Redis, Kafka, Stripe |
| 25 | checkout-orchestration-service (Go) | P0 | β οΈ Config-level auth; no JWT middleware on routes | β οΈ Kafka audit events | β οΈ Env vars; Vault configured but not integrated | β
TLS, DB TLS, Kafka TLS, Redis TLS | β
Rate limiting (Redis), checkout validation | β οΈ Go logging | Producer: checkout events; Consumer: plan data | PG, Redis, Kafka |
| 26 | invoice-service (Go) | P1 | β No auth middleware found | β No audit logging | β οΈ Env vars; Vault configured but not integrated | β
TLS server, DB TLS | β No rate limiting, no input validation | β No monitoring | Consumer: payment events; Producer: invoice events | PG, Kafka, R2 (Cloudflare) |
| 27 | account-provisioning-service (Go) | P1 | β οΈ Auth in provisioning service | β No audit logging | β οΈ Env vars; Vault configured but not integrated | β
TLS server, DB TLS | β No rate limiting | β No monitoring | Consumer: subscription events; Producer: provisioning events | PG (cert_ix_subscription), Kafka |
1.8 Agent & Telemetry Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| 28 | agent-gateway-service (Go) | P1 | β
Agent registration auth, JWT | β
Audit in agent service + repository | β οΈ Env vars | β
TLS, Kafka TLS | β
Validation, rate limiting | β οΈ Go logging | Producer: agent events | PG, Redis, Kafka |
| 29 | agent-ingestion-gateway (Go) | P1 | β οΈ Config-level auth | β οΈ Config-level audit | β οΈ Env vars | β
TLS configurable | β οΈ Config-level validation | β οΈ Go logging | Producer: telemetry to Kafka | Kafka, Redis |
| 30 | agent-stream-processor (Go) | P2 | β No auth (internal Kafka consumer) | β οΈ Audit in processors | β οΈ Env vars | β
TLS configurable | β οΈ Config-level validation | β οΈ Go logging | Consumer: telemetry; Producer: processed data | PG, Kafka, Redis |
| 31 | bits (bitcollector + sentinel) | P2 | β οΈ mTLS for agent-to-gateway; sentinel has ES auth | β οΈ Sentinel has ES-based audit | β οΈ Env vars + config YAML | β οΈ TLS configurable for ES connections | β οΈ Basic validation | β No monitoring | Agent β Gateway (HTTP) | agent-gateway, ES |
1.9 Supporting Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| 32 | email-service | P0 | β οΈ Kafka auth for broker; no HTTP auth (internal) | β
Email audit logging, security config | β οΈ Env vars; SendGrid API key in env | β
TLS server, Kafka TLS | β
Rate limiting, email security validation | β οΈ Logger | Consumer: auth events, password reset, free plan, etc. | Kafka, SendGrid, PG |
| 33 | notification-service | P1 | β οΈ PQC decryption middleware only | β οΈ Audit in middleware | β No secrets management | β No TLS config found | β No rate limiting | β No monitoring | Consumer: notification events | Kafka |
| 34 | bobby-service | P2 | β No auth found | β No audit | β No secrets management | β No TLS | β No validation | β No monitoring | N/A | AI/LLM API |
| 35 | nvd-service | P2 | β No auth found | β No audit | β No secrets management | β No TLS | β No validation | β No monitoring | N/A | NVD API |
| 36 | subscription-service (Go) | P0 | β
JWT auth, tenant isolation | β
Usage tracking, audit in services | β οΈ Env vars | β
TLS, DB TLS, Kafka TLS, Redis TLS | β
Validation, rate limiting | β οΈ Go logging | Producer: capability responses, quota events; Consumer: capability requests, free plan, quota sync | PG (cert_ix_subscription), Redis, Kafka |
| 37 | teams-management-service (Go) | P1 | β
JWT auth | β οΈ Model-level audit fields | β οΈ Env vars | β
TLS configurable | β οΈ Model validation | β οΈ Go logging | Producer: team events | PG, Redis, Kafka |
| 38 | quota-sync-service (Go) | P1 | β No auth (internal Kafka consumer) | β No audit logging | β οΈ Env vars | β οΈ Kafka TLS configurable | β No validation (internal) | β No monitoring | Consumer: quota sync events; Producer: subscription quota sync | PG, Kafka |
1.10 Static/Content Servicesβ
| # | Service | Criticality | A:AUTHN | B:AUDIT | C:SECRETS | D:ENCRYPT | E:INPUT | F:MONITOR | Kafka Role | Dependencies |
|---|
| β | docs (Docusaurus) | P2 | N/A (static) | N/A | N/A | β
HTTPS via Nginx | N/A | β οΈ APM RUM | N/A | Nginx |
| β | cert-ix-blog | P2 | β οΈ Admin login for blog mgmt | β No audit | β οΈ Env vars | β
HTTPS | β οΈ Basic validation | β οΈ APM RUM | N/A | MongoDB |
| β | cert-ix-v1-landing-site-v1 | P2 | N/A (static + message API) | β No audit | β οΈ Env vars | β
HTTPS | β οΈ Basic validation | β οΈ APM RUM | N/A | PG (message API) |
2. Critical Flows & Dependenciesβ
Flow 1: User Registration & Login (P0)β
client-dashboard β qr-auth-ui β qr-auth-service β captcha-service
β
PG (cert_ix_auth) + Redis
β
Kafka β email-service (verification email)
Kafka β subscription-service (free plan activation)
Kafka β account-provisioning-service (tenant setup)
Services: qr-auth-service, qr-auth-ui, client-dashboard, captcha-service, email-service, subscription-service, account-provisioning-service
Kafka Topics: cert-ix.auth.user.registered.success, cert-ix.subscription.plan.free.request, cert-ix.subscription.plan.free.activated
Flow 2: Vulnerability Scanning (P0)β
client-dashboard β Kong β scan-api-service β Kafka β go-tools (9 engines)
β
Kafka β vulnerability-management-service
β
Kafka β vulnerability-classifier-service
Kafka β vulnerability-remediation-service
Kafka β vulnerability-policy-service
Services: client-dashboard, scan-api-service, go-tools, vulnerability-management-service, vulnerability-classifier-service
Kafka Topics: cert-ix.scans.{engine}.{priority}, cert-ix.scan-results, cert-ix.scans.events
Flow 3: Asset Management (P0)β
client-dashboard β Kong β asset-management-service β Kafka (permission check)
β
PG (cert_ix_assets) + Redis
β
Kafka β quota-sync-service β subscription-service
Kafka β assets-sync-service
Services: client-dashboard, asset-management-service, quota-sync-service, subscription-service, assets-sync-service
Kafka Topics: cert-ix.asset.created/updated/deleted, cert-ix.quota.sync.assets
Flow 4: Payment & Subscription (P0)β
client-dashboard β payment-ui β checkout-orchestration-service β payment-processing-service β Stripe
β
Kafka β invoice-service
Kafka β account-provisioning-service
Kafka β subscription-service
Services: payment-ui, checkout-orchestration-service, payment-processing-service, invoice-service, account-provisioning-service, subscription-service
Kafka Topics: cert-ix.payment.*, cert-ix.checkout.*, cert-ix.subscription.*
Flow 5: Compliance & Audit (P1)β
client-dashboard β Kong β admin-backend β compliance-management-service (Go)
β audit-evidence-service
β compliance-guard-service β asset-verification-service
Services: admin-backend, compliance-management-service, audit-evidence-service, compliance-guard-service, asset-verification-service
Flow 6: Agent Telemetry (P2)β
bits (bitcollector) β agent-gateway-service β agent-ingestion-gateway β Kafka β agent-stream-processor β PG
Services: bits, agent-gateway-service, agent-ingestion-gateway, agent-stream-processor
3. P0/P1/P2 Gap Summaryβ
P0 β BLOCKING (Must fix before launch)β
| ID | Service | Gap Type | Description | Effort |
|---|
| P0-01 | asset-management-service | AUTHN | No direct JWT middleware β relies on Kafka permission check with fallback that grants access when Kafka is down | 4h |
| P0-02 | asset-management-service | AUDIT | No structured audit trail with traceId/correlationId | 4h |
| P0-03 | checkout-orchestration-service | AUTHN | No JWT middleware on HTTP routes; config-level auth only | 3h |
| P0-04 | payment-processing-service | AUDIT | No audit logging for payment operations (PCI DSS requirement) | 4h |
| P0-05 | email-service | AUTHN | No HTTP auth (internal service) β needs service-to-service auth or network isolation verification | 2h |
| P0-06 | admin-backend | ENCRYPT | DB_SSL defaults to false β must default to true for production | 1h |
| P0-07 | All Go services | SECRETS | All use env vars directly β need to verify no hardcoded secrets in docker-compose or .env committed to git | 2h |
| P0-08 | All services | MONITOR | No centralized health check dashboard; most services have health endpoints but no alerting | 4h |
| P0-09 | scan-worker-service | AUDIT | No audit logging at all β scan execution must be auditable | 3h |
| P0-10 | qr-auth-service | SECRETS | CSRF_ENCRYPTION_KEY falls back to ephemeral crypto.randomBytes β must be persistent env var | 1h |
P1 β IMPORTANT (Should fix for launch, can be day-2 if blocked)β
| ID | Service | Gap Type | Description | Effort |
|---|
| P1-01 | compliance-guard-service | AUTHN | No auth, no audit, no TLS, no validation β entire service needs security baseline | 6h |
| P1-02 | audit-evidence-service | AUTHN | Only PQC middleware; no JWT auth, no validation, no TLS | 4h |
| P1-03 | notification-service | AUTHN | Only PQC middleware; no auth, no TLS, no rate limiting | 4h |
| P1-04 | invoice-service | AUTHN | No auth middleware, no audit, no rate limiting, no input validation | 4h |
| P1-05 | account-provisioning-service | AUDIT | No audit logging for tenant provisioning | 3h |
| P1-06 | assets-sync-service | AUDIT | No audit logging for sync operations | 2h |
| P1-07 | quota-sync-service | AUDIT | No audit logging, no monitoring | 2h |
| P1-08 | admin-backend | INPUT | No rate limiting middleware (only session-level) | 3h |
| P1-09 | All Node.js services | ENCRYPT | Kafka SSL and Redis TLS defaults vary β need uniform true defaults | 3h |
| P1-10 | Vault integration | SECRETS | Vault AppRole configured for payment services but NOT integrated in Go code β still using env vars | 8h |
P2 β POST-MVPβ
| ID | Service | Gap Type | Description | Effort |
|---|
| P2-01 | bobby-service | ALL | No security baseline at all β AI assistant service | 8h |
| P2-02 | nvd-service | ALL | No security baseline β CVE data fetcher | 4h |
| P2-03 | agent-stream-processor | AUTHN | No auth (internal Kafka consumer) | 2h |
| P2-04 | bits | MONITOR | No monitoring/alerting for agent | 2h |
| P2-05 | cert-ix-blog | AUDIT | No audit logging for admin actions | 2h |
| P2-06 | compliance-management-service (Node) | ALL | Unused β should be removed or marked deprecated | 1h |
| P2-07 | All services | MONITOR | APM agent missing from most backend services | 8h |
Flow 1: Registration & Login β Day 1 (8h)β
| Task | Service | Gap ID | Effort | Owner |
|---|
| Fix CSRF_ENCRYPTION_KEY to require env var | qr-auth-service | P0-10 | 1h | β |
| Verify email-service is network-isolated or add service auth | email-service | P0-05 | 2h | β |
| Verify no hardcoded secrets in docker-compose/.env files | All auth flow | P0-07 | 2h | β |
| Add health check alerting for auth flow services | qr-auth, captcha, email | P0-08 | 3h | β |
Smoke test: Register β verify email β login β get JWT β access dashboard β logout
Flow 2: Vulnerability Scanning β Day 1-2 (10h)β
| Task | Service | Gap ID | Effort | Owner |
|---|
| Add audit logging to scan-worker-service | scan-worker-service | P0-09 | 3h | β |
| Verify scan-api-service audit trail completeness | scan-api-service | β | 2h | β |
| Add health check alerting for scan flow | go-tools, scan-api | P0-08 | 2h | β |
| Verify Kafka TLS is enforced for scan topics | All scan services | P1-09 | 3h | β |
Smoke test: Create scan β dispatch to engine β get results β view in dashboard
Flow 3: Asset Management β Day 2 (8h)β
| Task | Service | Gap ID | Effort | Owner |
|---|
| Add JWT middleware to asset-management-service | asset-management-service | P0-01 | 4h | β |
| Add structured audit logging with traceId | asset-management-service | P0-02 | 4h | β |
Smoke test: CRUD asset β verify ownership β quota sync β subscription update
Flow 4: Payment & Subscription β Day 2-3 (11h)β
| Task | Service | Gap ID | Effort | Owner |
|---|
| Add JWT middleware to checkout-orchestration routes | checkout-orchestration | P0-03 | 3h | β |
| Add audit logging to payment-processing-service | payment-processing | P0-04 | 4h | β |
| Fix DB_SSL default to true in admin-backend | admin-backend | P0-06 | 1h | β |
| Add auth + audit to invoice-service | invoice-service | P1-04 | 3h | β |
Smoke test: Select plan β checkout β Stripe payment β invoice generated β subscription active
Flow 5: Compliance & Audit β Day 3 (6h)β
| Task | Service | Gap ID | Effort | Owner |
|---|
| Add security baseline to compliance-guard-service | compliance-guard | P1-01 | 6h | β |
Smoke test: Run compliance check β view results β export evidence
Cross-Cutting β Day 3-4 (8h)