본문으로 건너뛰기

Part 3: Role Concept & Backend Access Control

ItemContent
Document NamePart 3: Role Concept & Backend Access Control
Product NameDTA Wide Sleep Management Platform
Date2026-02-10
ScopePart 3 (Backend)

1. Role Definitions

1.1 Application User Roles

RoleEnglish NamePermission LevelKey Permissions
PatientPatientLevel 1Own data CRUD, questionnaire responses, program execution

1.2 Infrastructure Operator Roles (GCP IAM)

RoleGCP IAM RolePermission Scope
Infrastructure AdministratorOwner, EditorAll GCP resources
DeveloperViewerCloud SQL read/write, logs, deployment
DevOpsCloud Run AdminCloud Run deployment, configuration
Security TeamSecurity AdminIAM, Audit Logs, Security Center

2. Permission Matrix

2.1 Application Level

ResourcePatient
Own sleep logsCRUD
Other users' sleep logs-
Own questionnaire responsesCRUD
Other users' questionnaire responses-
Consultation notesR (own only)
User accountRU (own only)
System settings-
Audit logs-

Permission Codes:

  • C: Create
  • R: Read
  • U: Update
  • D: Delete

2.2 Infrastructure Level (GCP IAM)

GCP ResourceInfrastructure AdminDeveloperDevOpsSecurity Team
Cloud RunCRUDRCRUR
Cloud SQLCRUDRRR
Cloud LoggingCRUDRRCRUD
Secret ManagerCRUD-RCRUD
IAM & AdminCRUDRRCRUD
Cloud KMSCRUD--CRUD

3. Role-Based Access Control (RBAC) Implementation

3.1 NestJS Guards

AppToken JWT Structure (Actual Implementation - app-token.guard.ts):

AppToken uses RS256 asymmetric signing with JWK (JSON Web Key) management approach.

Authentication/Authorization Separation Structure:

// AppToken Payload Structure
interface AppTokenPayload {
appId: string; // App identifier
deviceId: string; // Device identifier
jti: string; // JWT ID (unique identifier)
env: string; // Environment (dev/stage/prod)
exp: number; // Expiration time
iat: number; // Issued time
}

Authentication Guard Chain (Actual Implementation):

GuardFile PathRole
AppTokenGuardguards/app-token.guard.tsAppToken JWT validation (RS256), expiration/revocation handling

Service Account Authentication:

  • Implemented in iam/controllers/
  • Used for inter-service communication

Controller Usage Example:

@Controller('sleep')
@UseGuards(AppTokenGuard)
export class SleepController {
@Get('/logs')
async getSleepLogs(@CurrentUser() user: TokenPayload) {
// AppToken + UserToken dual authentication then access
}
}

3.2 Data-Level Filtering

Own Data Access Only (Patient):

// Query Handler
async execute(query: GetSleepLogsQuery): Promise<SleepLogDto[]> {
const { userId, requesterId, requesterRoles } = query;

// Patient can access own data only
if (requesterRoles.includes('patient') && userId !== requesterId) {
throw new ForbiddenException('Cannot access other user data');
}

return this.repository.findByUserId(userId);
}

5. Access Approval and Review Cycle

5.1 Periodic Access Review

FrequencyTargetReviewerAction
MonthlyAll GCP IAM rolesSecurity teamRemove unnecessary permissions
QuarterlyApplication Admin rolesCTORole reassignment
AnnuallyComplete access control policySecurity + Compliance teamPolicy update

5.2 Permission Revocation

ConditionRevocation TimingResponsible
Employee departureImmediatelyOperations, Development team
Role changeImmediatelyUser involved
Suspicious activityImmediatelySecurity team, user involved

6. Audit Log Event Definitions

6.1 Required Audit Events

EventLog LevelLog InformationRetention Period
Administrator loginWARNINGadminId, IP, timestamp, MFA presence1 year
Role changeERRORtargetUserId, changer, old role, new role1 year
Direct DB accessERRORadminId, DB name, query (params masked)1 year
User account deletionERRORadminId, target userId, reason1 year
Sensitive data bulk exportERRORadminId, record count, data type1 year
Permission denied (403)WARNINGuserId, request path, required permission90 days
System settings changeERRORadminId, setting key, old value, new value1 year

6.2 Audit Log Example

{
"timestamp": "2026-02-10T15:30:00.000Z",
"severity": "ERROR",
"service": "dta-wide-api",
"module": "admin",
"event_type": "user_deleted",
"adminId": "admin-uuid-123",
"admin_email": "adm***@dta-wide.com",
"target_user_id": "user-uuid-456",
"reason": "GDPR deletion request",
"ip_address": "192.168.1.***",
"user_agent": "Mozilla/5.0...",
"approval_ticket": "JIRA-1234",
"message": "[AUDIT] Admin deleted user account"
}

8. Separation of Duties

8.1 Duty Separation Matrix

Duty ADuty BSeparation RequiredReason
Code developmentProduction deploymentPrevent malicious code deployment
DB schema changeDB data modification⚠️Control via approval process
IAM role creationIAM role assignmentPrevent privilege escalation
Backup creationBackup restorationPrevent data tampering
Audit log configurationAudit log deletionPrevent evidence destruction

8.2 Four-Eyes Principle

Application Targets:

  • Production DB schema changes
  • Production deployment (except emergency hotfixes)
  • IAM role changes
  • Security policy modifications

Implementation:

  • Pull Request requires 1 approval (excludes author)
  • Jira ticket issue linking
  • GCP IAM: conditional roles (time limit + approver confirmation)

9. TODO: Anomalous Activity Detection and Response

9.1 Detection Patterns

PatternDetection ConditionAlertAuto Action
Bulk data retrieval100+ records within 1 minuteSecurity team (immediate)Session invalidation
Abnormal access timeAdmin login 00:00~06:00OperationsMFA reconfirmation required
Multiple failed attempts5 consecutive login failuresSecurity teamAccount temporary lock (30 min)
Abnormal geographic accessLogin from non-EU regionSecurity teamAccount verification request
Privilege escalation attemptRole change API call (no permission)Security + CTOAccount immediate lock

9.2 Response Procedure


Evidence and References (Artifacts)

  1. Permission Matrix (Section 2 of this document)
  2. AppTokenGuard Implementation Code - guards/app-token.guard.ts
  3. FlexibleAuthGuard Implementation Code - guards/flexible-auth.guard.ts
  4. GCP IAM Role Definitions - artifacts/iam-roles.json
  5. Approval Process Diagram (Section 4.2 of this document)
  6. Audit Log Sample - logs/admin-audit-log-sample.json
  7. Periodic Review Records - reports/iam-review-2025-q4.pdf
  8. Anomalous Activity Detection Rules - artifacts/anomaly-detection-rules.json
  9. Access Approval Jira Ticket Sample - artifacts/jira-approval-sample.pdf
  10. Administrator Access Logs (30 days) - logs/admin-access-30days.log
RegulationRequirementImplementationEvidence
BSI TR-03161 Part 3Role-based access controlRBAC, Roles GuardPermission Matrix (Section 2)
BSI TR-03161 Part 3Administrator action auditAudit logs, approval processAudit log sample (Section 6)
GDPR Article 32Appropriate access controlRBAC, least privilege, auditThis entire document
ISO 27001 A.9Access controlRBAC, periodic reviewReview procedure (Section 5)