Skip to main content

Platform Admin Service — Security Model

Status: populated Owner: TBD Last updated: 2026-04-18 Companion: 13 Security · 14 Compliance

1. RBAC matrix

RoleConfig (PLATFORM scope)Config (TENANT scope)Feature flagsHealth aggregateInternal endpoints
SUPER_ADMINFull CRUDFull CRUDFull CRUDReadYes (JWT)
TENANT_ADMINNo accessRead ownEvaluate own tenantNoNo
Platform serviceNoNoEvaluate via /internal/*Read via /internal/*Yes (IP-restricted)

2. Audit events

All config and flag mutations are auditable:

EventActor loggedData logged
Config upsertchangedBy (userId)key, scope, tenantId, oldValue, newValue
Config archivechangedBykey, scope, tenantId
Flag createchangedBykey, defaultEnabled
Flag updatechangedBykey, changed fields
Flag archivechangedBykey
Tenant override setchangedByflag key, tenantId, enabled

History stored in config_history table; events published to audit-service via platform_admin.config.updated.v1.

3. Encryption

DataClassificationEncryption
Platform config valuesInternalPostgreSQL TDE (AES-256 at rest); TLS 1.3 in transit
Feature flag dataInternalPostgreSQL TDE; TLS 1.3
Health check detailsInternalPostgreSQL TDE; TLS 1.3
SMTP credentials (config key email.*)ConfidentialValues stored encrypted with KMS-derived key

4. Internal endpoint security

/internal/admin/* routes:

  • IP-restricted to cluster CIDR (Kubernetes NetworkPolicy).
  • No JWT required — relies on network isolation.
  • Rate-limited: 1000/min/service.

5. Config value security

Config values that contain credentials (SMTP host/password, API keys) must be stored via a separate SecretConfig entity backed by AWS Secrets Manager. The allow-list type schema flags these keys as type: secret; values are not returned in GET responses (returned as ***REDACTED***).

6. GDPR participation

platform-admin-service does not store PII. changedBy references user IDs (not names). On user deactivation, changedBy references remain (audit integrity requires actor traceability; this is lawful basis: legal obligation / audit trail).

7. Threat model notes

ThreatMitigation
Unauthorized config mutationSUPER_ADMIN JWT scope required; audit log; rate limit
Flag manipulation to enable unauthorized featuresSUPER_ADMIN only; audit log; tenant-override requires explicit action
Health endpoint impersonationSource registration requires SUPER_ADMIN or cluster-internal IP
Stale flag cache used to bypass feature controls60 s TTL + event-driven invalidation; archived flag always deny regardless of cache