Skip to content

sanghakbae/risk-mgmt-system

Repository files navigation

Risk Management System

ISMS 및 ISO27001 통제 항목을 기준으로 체크리스트 관리, 이행 현황 기록, 취약 식별, 위험도 평가, 위험 대응, 잔여 위험 재평가, 보고서 생성을 수행하는 웹 기반 위험관리 시스템입니다.

운영 도메인:

https://rms.sanghak.kr

배포 환경은 메인 브랜치를 기준으로 운영합니다.

Overview

전체 업무 흐름은 다음 순서로 진행됩니다.

Checklist
→ Status 작성
→ Vulnerability 식별
→ Risk Evaluation
→ Risk Treatment
→ Residual Risk
→ Report

각 단계는 선행 단계 완료 여부에 따라 입력이 잠깁니다. 예를 들어 위험도 평가는 취약 식별 단계가 완료된 뒤 입력할 수 있고, 위험 대응은 위험도 산정이 완료된 뒤 입력할 수 있습니다.

Main Features

Dashboard

  • 전체 체크리스트 진행률 요약
  • 도메인별 취약/양호/미입력 현황
  • 상위 위험 도메인 확인

Checklist

  • ISMS 및 ISO27001 통제 항목 관리
  • CSV 업로드 및 기존 데이터 병합
  • likelihoodimpact가 포함된 업로드 데이터는 risk = impact * likelihood 기준으로 자동 재계산

Status

  • 통제 항목별 운영 현황 입력
  • 증적 파일 업로드 및 삭제
  • 이미지 증적 미리보기

Vulnerability

  • 통제 항목별 결과를 양호 또는 취약으로 식별
  • 취약 항목은 Risk Evaluation 단계의 평가 대상이 됩니다.

Risk Evaluation

위험도는 곱셈 방식으로 계산합니다.

Risk = Impact × Likelihood

Likelihood:

1 = Unlikely
2 = Likely
3 = Highly Likely

Impact:

1 = Low
2 = Medium
3 = High

Risk level:

1~3 = Low
4~6 = Medium
7~9 = High

예시:

Likelihood = Likely(2)
Impact = Medium(2)
Risk = 2 × 2 = 4
Risk Level = Medium

기존 DB의 risk 값이 현재 계산식과 다르면 Risk Evaluation 화면에서 재계산 배너가 표시됩니다. Risk 재계산 버튼을 누르면 저장된 risk 컬럼을 impact * likelihood 기준으로 일괄 보정합니다.

Risk Treatment

취약 항목에 대한 대응 전략을 관리합니다.

전략 유형:

수용 (Accept)
감소 (Mitigate)
회피 (Avoid)
전가 (Transfer)

ISMS는 DoA, ISO27001은 ARL 기준을 사용합니다.

ISMS    = DoA (Degree of Assurance)
ISO27001 = ARL (Acceptable Risk Level)

DoA/ARL은 허용 가능한 최대 Risk 값입니다.

Risk <= DoA/ARL → 허용 가능
Risk > DoA/ARL  → 조치 필요

Treatment 화면에서는 Risk <= DoA/ARL인 항목의 처리 전략이 무조건 수용으로 고정됩니다. 사용자가 다른 전략을 저장해 둔 기존 데이터가 있어도 화면과 저장 payload는 수용을 적용합니다.

처리 전략 안내 패널은 접기/펼치기를 지원합니다.

Residual Risk

위험 대응 이후 잔여 위험을 다시 평가합니다.

잔여 위험도도 동일하게 계산합니다.

Residual Risk = Residual Impact × Residual Likelihood

잔여 위험 우선 확인 목록은 DoA/ARL 기준을 초과한 항목을 우선 표시합니다.

Report

  • 취약 항목 기반 보고서 생성
  • 현황, 사유, 증적, 위험도, 대응 내용 확인
  • 인쇄 및 PDF 저장 흐름 지원

Admin

관리자 메뉴는 admin 권한 사용자만 접근할 수 있습니다.

Admin Security:

  • 허용 이메일 설정
  • 세션 만료 시간 설정
  • 감사 로그 보관 기간 설정
  • ISMS DoA / ISO27001 ARL 기준 설정

DoA/ARL 선택 가능 값:

1, 2, 3, 4, 6, 9

Admin Audit Logs:

  • 관리자 작업 이력 조회

Admin Access:

  • 사용자 역할 조회 및 변경
  • 앱 접근 권한 관리

Authentication

인증은 Firebase Authentication과 Google 로그인을 사용합니다.

앱 흐름:

Frontend
→ Firebase Authentication Google 로그인 시작
→ Google 로그인
→ 앱 redirect URL로 복귀
→ Firebase ID token/session으로 Firestore와 Storage 접근

현재 기본 허용 이메일:

totoriverce@gmail.com

Google Cloud Console 설정:

Authorized JavaScript origins:
https://rms.sanghak.kr
http://localhost:5173
http://localhost:5174

Tech Stack

Frontend:

  • React
  • Vite
  • Tailwind CSS
  • Lucide Icons

Backend:

  • Firebase Authentication
  • Cloud Firestore
  • Cloudflare R2

Project Structure

src
├─ api
│  ├─ admin.js
│  └─ checklist.js
├─ components
│  ├─ AdminAccessPanel.jsx
│  ├─ AdminAuditLogsPanel.jsx
│  ├─ AdminSecurityPanel.jsx
│  ├─ ApprovePanel.jsx
│  ├─ ChecklistPanel.jsx
│  ├─ DashboardPanel.jsx
│  ├─ LoginPage.jsx
│  ├─ ResidualPanel.jsx
│  ├─ RiskEvaluatePanel.jsx
│  ├─ RiskTreatmentPanel.jsx
│  ├─ StatusWritePanel.jsx
│  └─ VulnIdentifyPanel.jsx
├─ lib
│  └─ firebaseClient.js
├─ ui
│  └─ Button.jsx
├─ utils
│  ├─ evidence.js
│  └─ riskPolicy.js
├─ App.jsx
└─ main.jsx

Installation

git clone git@github.com:sanghakbae/risk-mgmt-system.git
cd risk-mgmt-system
npm install

Create .env.local:

VITE_FIREBASE_API_KEY=
VITE_FIREBASE_AUTH_DOMAIN=
VITE_FIREBASE_PROJECT_ID=
VITE_FIREBASE_STORAGE_BUCKET=
VITE_FIREBASE_MESSAGING_SENDER_ID=
VITE_FIREBASE_APP_ID=
VITE_FIREBASE_MEASUREMENT_ID=
VITE_ADMIN_EMAILS=
VITE_R2_EVIDENCE_API_URL=
VITE_R2_PUBLIC_BASE_URL=

Run locally:

npm run dev

If port 5173 is already in use, Vite may use another port such as 5174. That origin must also be allowed in Firebase Authentication / Google provider settings for local login.

Build

npm run build

The production build outputs static files to dist.

Deployment

This repository is deployed with GitHub Pages and served from the custom domain root.

Custom domain file:

public/CNAME

Current CNAME:

rms.sanghak.kr

Vite base path is /, which matches https://rms.sanghak.kr.

Security Notes

  • Google login is handled through Firebase Authentication.
  • Evidence files are stored in Cloudflare R2.
  • Browser session storage is used so the app session is cleared when the browser/tab session ends.
  • App-level session timeout is enforced in addition to Firebase token expiry.
  • Admin actions are written to audit logs.
  • Login restriction is locked to totoriverce@gmail.com.

Current Risk Rules

Risk = Impact × Likelihood

1~3 = Low
4~6 = Medium
7~9 = High

ISMS DoA / ISO27001 ARL:
Risk <= 기준값 → 허용 가능
Risk > 기준값  → 조치 필요

License

Internal Project

About

체크리스트 기반 위험평가 시스템

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors