콘텐츠로 이동

7. 보안 설계

dcamp 웹사이트는 스타트업 정보, 회원 개인정보, 심사 데이터 등 민감한 정보를 다루기 때문에 다중 보안 레이어를 적용했습니다. 핵심 원칙은 “일반 사용자와 관리자의 완전한 분리”입니다.

┌─────────────────────────────────────────────────────────────────┐
│ 보안 레이어 구조 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Layer 1: Cloudflare Access (네트워크 보안) │ │
│ │ - 등록된 이메일만 접근 허용 │ │
│ │ - 이메일 인증(MFA) 필수 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Layer 2: Drupal Login (인증) │ │
│ │ - 이메일/비밀번호 인증 │ │
│ │ - 5회 실패 시 계정 잠금 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Layer 3: Session Control (세션 관리) │ │
│ │ - 30분 타임아웃 │ │
│ │ - 동시 접속 차단 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

가장 중요한 보안 설계 원칙입니다. 일반 회원과 관리자 계정을 완전히 분리하여 상호 접근이 불가능합니다.

문제 상황분리 전분리 후
일반 회원 계정 해킹관리 시스템까지 위험관리 시스템은 안전
권한 설정 실수일반 회원에게 관리 권한 부여 가능원천적으로 불가능
퇴사자 계정 관리복잡한 권한 회수 필요관리자 계정만 삭제하면 됨
┌──────────────────────────┐ ┌──────────────────────────┐
│ dcamp.kr │ │ admin.dcamp.kr │
│ (일반 사용자) │ │ (관리자) │
├──────────────────────────┤ ├──────────────────────────┤
│ │ │ │
│ 계정: user.user │ ✗ │ 계정: user.manager │
│ │ ───► │ │
│ - 소셜 로그인 가능 │ │ - 이메일/비밀번호만 │
│ - 자가 회원가입 │ ◄─── │ - 관리자가 계정 생성 │
│ - 프로그램 신청 │ ✗ │ - 시스템 관리 │
│ │ │ │
└──────────────────────────┘ └──────────────────────────┘
▲ ▲
│ │
└────────── 교차 접근 불가 ─────────────┘

관리자 페이지(admin.dcamp.kr)는 3단계 보안을 통과해야 접근할 수 있습니다.

Step 1: Cloudflare Access (네트워크 보안)

섹션 제목: “Step 1: Cloudflare Access (네트워크 보안)”

목적: 등록되지 않은 사용자는 로그인 페이지조차 볼 수 없도록 차단

[사용자] [Cloudflare] [admin.dcamp.kr]
│ │ │
│ 접속 시도 │ │
│ ───────────────────► │ │
│ │ │
│ 이메일 인증 요청 │ │
│ ◄─────────────────── │ │
│ │ │
│ 인증 코드 입력 │ │
│ ───────────────────► │ │
│ │ │
│ │ 인증 통과 시에만 │
│ │ 접근 허용 ───────────► │
  • 사전 등록된 이메일만 접근 가능
  • 이메일로 인증 코드 발송
  • URL을 알아도 미등록자는 접근 불가

목적: 시스템 계정 확인

  • 이메일 + 비밀번호 인증
  • 소셜 로그인 불가 (보안 강화)
  • 5회 실패 시 계정 잠금

목적: 로그인 후에도 지속적인 보안 유지

정책내용
자동 로그아웃30분간 활동 없으면 자동 로그아웃
동시 접속 차단다른 기기에서 로그인 시 기존 세션 종료
세션 암호화세션 정보 암호화 저장

관리자라고 해서 모든 기능에 접근할 수 있는 것이 아닙니다. 담당 업무에 따라 접근 가능한 기능을 제한합니다.

역할대상주요 권한
administrator시스템 관리자모든 기능
planning기획실회원 관리, 전체 프로그램, 콘텐츠
investment투자실배치 프로그램, 포트폴리오
business사업실배치, 오피스아워, 스타트업 관리
growthGrowth팀오피스아워, 그로스코칭
judge심사위원심사 기능만
┌───────────────────────────────────────────────────────────────┐
│ 회원 관리 │
│ 접근 가능: administrator, planning │
│ 접근 불가: 기타 모든 역할 │
└───────────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────┐
│ 배치 프로그램 │
│ 접근 가능: administrator, planning, investment, business │
│ 접근 불가: growth, judge, space │
└───────────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────┐
│ 심사 기능 │
│ 접근 가능: administrator, planning, judge │
│ 접근 불가: 기타 역할 (조회만 가능) │
└───────────────────────────────────────────────────────────────┘

구분접근 방식예시
공개 API누구나 접근공지사항 목록, 스타트업 공개 정보
인증 필요토큰 필수마이페이지, 신청서 제출
관리자 전용관리자 토큰 + 권한회원 목록, 심사 데이터
[프론트엔드] [관리 시스템]
│ │
│ 1. 로그인 요청 │
│ (이메일/비밀번호) │
│ ──────────────────────────► │
│ │
│ 2. Access Token 발급 │
│ (유효기간: 1시간) │
│ ◄────────────────────────── │
│ │
│ 3. API 요청 │
│ Authorization: Bearer xxx │
│ ──────────────────────────► │
│ │
│ 4. 토큰 검증 후 응답 │
│ ◄────────────────────────── │

데이터 유형보호 방식
비밀번호단방향 해시 암호화 (복호화 불가)
개인정보DB 암호화, 접근 로그 기록
파일 저장S3 비공개 버킷, 서명된 URL로 접근
세션 정보암호화 저장, HTTPS 전송
공격 유형방어 방식
DDoSCloudflare 방어
SQL InjectionORM 사용, 파라미터 바인딩
XSS입력값 이스케이프, CSP 헤더
CSRF토큰 기반 검증

영역정책
계정 분리일반 회원 / 관리자 완전 분리
인증3단계 보안 (Cloudflare → 로그인 → 세션)
권한역할 기반 최소 권한 원칙
세션30분 타임아웃, 동시 접속 차단
API토큰 기반 인증, HTTPS 필수
데이터암호화 저장, 접근 로그 기록

← 이전: 6. 커스텀 모듈 | 다음: 8. 부록 →