Skip to main content

Radiology Service — Security Model

Status: populated Owner: TBD Last updated: 2026-04-18 Companion: Service Template · 03 platform-services · 02 DDD


1. Authentication

LayerMechanism
External (Kong)JWT validated against Keycloak JWKS
Service-to-serviceJWT service account
PACS credentialsEncrypted in auth_config column; decrypted at adapter layer only

2. RBAC Matrix

RoleScopesCapabilities
rad:readsvc:radiology:readView studies, reports, worklist
rad:reportersvc:radiology:read + report writeSubmit prelim/final reports
rad:radiologistAll + svc:radiology:signSign and amend reports
rad:adminAll + svc:radiology:adminManage PACS endpoints, tenant config
platform:adminAll scopesPlatform-wide

3. ABAC Rules

RuleEnforcement
Tenant isolationtenant_id from JWT; RLS at DB layer
Patient access for viewer launchABAC policy check via access-policy-service before issuing token
Module entitlementModuleEntitlementGuard validates diag.radiology

4. Viewer Launch Security

  • Viewer tokens are short-lived (default 60 min); signed with HS256 using a rotated secret.
  • Token binds studyId, userId, tenantId, and expiresAt.
  • PACS credentials are never sent to the browser; viewer uses the signed token to authorize via the radiology-service proxy or PACS's own token exchange.

5. Encryption Classes

DataEncryption
PACS endpoint auth_configAES-256 column-level encryption at application layer
Report contentAES-256 at rest (PostgreSQL tablespace)
Event payloadsTLS in transit

6. Audit Events

EventWhen
rad.study.viewedClinician opens study detail
rad.viewer.launchedViewer launch token issued
rad.report.signedReport finalized
rad.report.amendedAmendment submitted
rad.critical.flaggedCritical finding flagged

7. GDPR / Data Residency

Patient imaging metadata stored within Afghanistan MoPH data residency boundary. Pixel data in external PACS; radiology-service does not replicate pixels. Cross-border PACS federation disabled by default.