본문으로 건너뛰기

Part 3: 역할 개념 및 백엔드 접근 통제

항목내용
문서명Part 3: 역할 개념 및 백엔드 접근 통제 (Role Concept & Backend Access Control)
제품명DTA Wide Sleep Management Platform
작성일2026-02-10
적용범위Part 3 (백엔드)

1. 역할 정의 (Role Definitions)

1.1 애플리케이션 사용자 역할

역할영문명권한 레벨주요 권한
환자PatientLevel 1본인 데이터 CRUD, 설문 응답, 프로그램 수행

1.2 인프라 운영자 역할 (GCP IAM)

역할GCP IAM 역할권한 범위
인프라 관리자Owner, Editor모든 GCP 리소스
개발자ViewerCloud SQL 읽기/쓰기, 로그, 배포
DevOpsCloud Run AdminCloud Run 배포, 설정
보안팀Security AdminIAM, Audit Logs, Security Center

2. 권한 매트릭스 (Permission Matrix)

2.1 애플리케이션 레벨

리소스Patient
본인 수면 로그CRUD
타인 수면 로그-
본인 설문 응답CRUD
타인 설문 응답-
상담 노트R (본인 것만)
사용자 계정RU (본인만)
시스템 설정-
감사 로그-

권한 코드:

  • C: Create (생성)
  • R: Read (읽기)
  • U: Update (수정)
  • D: Delete (삭제)

2.2 인프라 레벨 (GCP IAM)

GCP 리소스인프라 관리자개발자DevOps보안팀
Cloud RunCRUDRCRUR
Cloud SQLCRUDRRR
Cloud LoggingCRUDRRCRUD
Secret ManagerCRUD-RCRUD
IAM & AdminCRUDRRCRUD
Cloud KMSCRUD--CRUD

3. 역할 기반 접근 통제 (RBAC) 구현

3.1 NestJS Guards

AppToken JWT 구조 (실제 구현 - app-token.guard.ts):

AppToken은 RS256 비대칭 서명 기반으로, JWK(JSON Web Key) 관리 방식을 사용합니다.

인증/인가 분리 구조:

// AppToken Payload 구조
interface AppTokenPayload {
appId: string; // 앱 식별자
deviceId: string; // 디바이스 식별자
jti: string; // JWT ID (고유 식별자)
env: string; // 환경 (dev/stage/prod)
exp: number; // 만료 시간
iat: number; // 발행 시간
}

인증 Guard 체인 (실제 구현):

Guard파일 경로역할
AppTokenGuardguards/app-token.guard.tsAppToken JWT 검증 (RS256), 만료/폐기 처리

Service Account 인증:

  • iam/controllers/ 에서 Service Account 인증/관리 구현
  • 서비스 간 통신에 사용

컨트롤러 사용 예:

@Controller('sleep')
@UseGuards(AppTokenGuard)
export class SleepController {
@Get('/logs')
async getSleepLogs(@CurrentUser() user: TokenPayload) {
// AppToken + UserToken 이중 인증 후 접근
}
}

3.2 데이터 레벨 필터링

본인 데이터만 접근 (Patient):

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

// Patient는 본인 데이터만
if (requesterRoles.includes('patient') && userId !== requesterId) {
throw new ForbiddenException('Cannot access other user data');
}

return this.repository.findByUserId(userId);
}

5. 접근 승인 및 점검 주기

5.1 정기 접근 권한 검토

주기대상검토자조치
월간모든 GCP IAM 역할보안팀불필요한 권한 제거
분기애플리케이션 Admin 역할CTO역할 재할당
연간전체 접근 통제 정책보안팀 + 컴플라이언스팀정책 업데이트

5.2 권한 회수

조건회수 시점담당
퇴사즉시운영팀, 개발팀
역할 변경즉시해당 사용자
의심스러운 활동즉시보안팀, 해당 사용자

6. 감사 로그 이벤트 정의

6.1 필수 감사 이벤트

이벤트로그 레벨기록 정보보관 기간
관리자 로그인WARNINGadminId, IP, timestamp, MFA 여부1년
역할 변경ERRORtargetUserId, 변경자, 구 역할, 신 역할1년
DB 직접 접근ERRORadminId, DB 이름, 쿼리 (파라미터 마스킹)1년
사용자 계정 삭제ERRORadminId, 대상 userId, 사유1년
민감 데이터 대량 ExportERRORadminId, 레코드 수, 데이터 유형1년
권한 거부 (403)WARNINGuserId, 요청 경로, 필요 권한90일
시스템 설정 변경ERRORadminId, 설정 키, 구 값, 신 값1년

6.2 감사 로그 예시

{
"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 직무 분리 매트릭스

직무 A직무 B분리 필요이유
코드 개발프로덕션 배포악의적 코드 배포 방지
DB 스키마 변경DB 데이터 수정⚠️승인 프로세스로 통제
IAM 역할 생성IAM 역할 할당권한 상승 방지
백업 생성백업 복원데이터 변조 방지
감사 로그 설정감사 로그 삭제증거 인멸 방지

8.2 4-Eyes 원칙 (Four-Eyes Principle)

적용 대상:

  • 프로덕션 DB 스키마 변경
  • 프로덕션 배포 (긴급 핫픽스 제외)
  • IAM 역할 변경
  • 보안 정책 수정

구현:

  • Pull Request 필수 1명 승인 (작성자 제외)
  • Jira 티켓 이슈 연동
  • GCP IAM: 조건부 역할 (시간 제한 + 승인자 확인)

9. TODO: 비정상 활동 탐지 및 대응

9.1 탐지 패턴

패턴탐지 조건알림자동 조치
대량 데이터 조회1분 내 100개 이상 레코드보안팀 (즉시)세션 무효화
비정상 시간대 접근00:00~06:00 관리자 로그인운영팀MFA 재확인 요구
다중 실패 시도5회 연속 로그인 실패보안팀계정 임시 잠금 (30분)
비정상 지역 접근EU 외 지역 로그인보안팀계정 확인 요청
권한 상승 시도역할 변경 API 호출 (권한 없음)보안팀 + CTO계정 즉시 잠금

9.2 대응 절차


증빙 및 참조(Artifacts)

  1. 권한 매트릭스 (본 문서 Section 2)
  2. AppTokenGuard 구현 코드 - guards/app-token.guard.ts
  3. FlexibleAuthGuard 구현 코드 - guards/flexible-auth.guard.ts
  4. GCP IAM 역할 정의 - artifacts/iam-roles.json
  5. 승인 프로세스 다이어그램 (본 문서 Section 4.2)
  6. 감사 로그 샘플 - logs/admin-audit-log-sample.json
  7. 정기 검토 기록 - reports/iam-review-2025-q4.pdf
  8. 비정상 활동 탐지 룰 - artifacts/anomaly-detection-rules.json
  9. 접근 승인 Jira 티켓 샘플 - artifacts/jira-approval-sample.pdf
  10. 관리자 접근 로그 (30일치) - logs/admin-access-30days.log
규정요구사항구현증거
BSI TR-03161 Part 3역할 기반 접근 통제RBAC, Roles Guard권한 매트릭스 (Section 2)
BSI TR-03161 Part 3관리자 행위 감사감사 로그, 승인 프로세스감사 로그 샘플 (Section 6)
GDPR Article 32적절한 접근 통제RBAC, 최소 권한, 감사본 문서 전체
ISO 27001 A.9접근 통제RBAC, 정기 검토검토 절차 (Section 5)