보안 정책 (Security Policy)
Veacon 보안 정책
본 문서는 Veacon 의 보안 원칙과 현재 구현 상태를 공개적으로 요약합니다. 본 정책은 개인정보처리방침 제10조 (안전성 확보 조치) 및 DPA 부속서 2 (TOMs) 와 동기화되어 있습니다. 세부 감사 보고서나 외부 침투 테스트 결과가 필요한 Enterprise 고객은 hello@veacon.io 로 요청해주십시오.
1. 인프라 및 암호화
1-1. 통신 암호화 (in transit)
- 모든 API 및 웹 통신은 TLS 1.3 이상 으로 암호화됩니다.
- HTTP 는 자동으로 HTTPS 로 리다이렉트되며, HSTS (HTTP Strict Transport Security) 헤더가 적용됩니다.
- 보안 헤더:
Content-Security-Policy,X-Content-Type-Options: nosniff,Referrer-Policy: strict-origin-when-cross-origin,Permissions-Policy가 응답에 부여됩니다.
1-2. 저장 데이터 암호화 (at rest)
- 데이터베이스 (Supabase Postgres) 는 Supabase / AWS RDS 의 표준 저장 암호화 (AES-256) 및 디스크 수준 암호화로 보호됩니다.
- 백업도 동일 수준으로 암호화됩니다 (Supabase managed).
- API Key 는 평문 저장 금지 — SHA-256 (BYTEA) 해시만 보관됩니다. 발급 직후 1회만 이용자에게 전체 평문이 노출되며, 이후 마스킹된 prefix 만 표시됩니다.
- 환경 변수·시크릿은 Vercel Environment Variables (Sensitive 플래그) 및 GitHub Actions Secrets 에 저장되며, 평문 노출되지 않습니다.
1-3. 데이터 처리 리전
| 구성요소 | 본사 소재지 | 데이터 처리 리전 |
|---|---|---|
| Vercel (서버리스 + 정적 호스팅) | 미국 | 글로벌 edge (한국 사용자는 ICN edge), 함수는 사용자 가까운 region |
| Supabase Postgres (주 데이터베이스) | 미국 | 한국 (AWS ap-northeast-2, Seoul) |
| Upstash Redis (rate limit · JWT 캐시) | 미국 | 일본 (AWS ap-northeast-1, Tokyo) |
| Sentry (에러 추적) | 미국 | 미국 |
| Stripe (결제) | 미국 | 글로벌 |
| Resend (트랜잭션 메일) | 미국 | 일본 (AWS SES Tokyo 경유) |
핵심 운영 데이터 (Supabase) 는 한국 리전 에서 처리됩니다. 국외 이전 상세는 개인정보처리방침 제6조·제9조 및 DPA 제9조·부속서 4 를 참조하십시오.
2. 인증 및 권한 관리
2-1. 이용자 인증 (B2B API)
X-API-Key헤더 또는veacon_session쿠키 (Syncle SSO 경로) 로 인증.- 세션 쿠키는
HttpOnly·Secure·SameSite=Lax플래그로 설정되어 XSS·CSRF 에 강건. 상세: 쿠키 정책. - JWT 검증은 Syncle Supabase 에 위임 (ADR-007) 하며, 양성 캐시 TTL =
min(60초, jwt.exp − now)로 만료 시점 초과 캐싱을 차단합니다.
2-2. 내부 시스템 접근
- 최소 권한 원칙 (Principle of Least Privilege) 적용
- 프로덕션 시스템 관리자 작업은 MFA 강제 (Vercel, Supabase, GitHub, Stripe Dashboard 등 모든 admin 콘솔)
- 프로덕션 DB 직접 접근은 허가받은 소수 인원만 가능하며, Supabase audit log 에 기록됩니다.
- service_role key 는 서버사이드에서만 사용되며, 브라우저·SDK 에 노출되지 않습니다.
2-3. 시크릿 관리
- 모든 API 키·DB 자격증명은 Vercel Environment Variables (Sensitive 플래그) 에 저장.
- GitHub Actions 의 cron / 배치 작업은 GitHub Secrets 를 통해 접근.
- 로컬 개발은
.env.local(gitignored) 에서만 처리되며, 저장소에 commit 되지 않습니다. - 시크릿 회전 정책: 침해 의심·이직·연 1회 정기 회전.
3. 애플리케이션 보안
3-1. 쿼터 집행
- 모든 B2B 요청은 플랜별 월 호출 한도 (
monthly_call_quota) 를 엄격히 집행합니다. - 쿼터 초과 시 HTTP 402 QUOTA_EXCEEDED 응답과 함께 다음 월 1일 자동 리셋 시각을 반환.
X-Quota-Limit·X-Quota-Used·X-Quota-Resets-At헤더로 실시간 잔량 안내.
3-2. Rate Limit
- 플랜별 분당 호출 제한 (
rate_limit_per_min) 을 Upstash Redis 의 sliding window 알고리즘으로 전역 공유 집행. - 초과 시 HTTP 429 및
Retry-After헤더 반환.
3-3. CORS
- Veacon 소유 origin (
https://veacon.io,https://www.veacon.io,https://app.veacon.io,https://docs.veacon.io) 과 환경변수로 정의된 preview 정규식만 허용. Access-Control-Allow-Credentials: true는 검증된 origin 에 한해 부여.- 과거의
*.vercel.app와일드카드는 2026-04-22 부로 제거되었으며, 임의 Vercel 배포가 credentials 포함 요청을 보낼 수 없습니다.
3-4. 의존성 및 코드 보안
- Dependency 스캔: GitHub Dependabot 자동 PR +
npm auditCI 게이트. - 타입 안전성: 모든 PR 에
tsc --noEmit통과 의무화. - 시크릿 스캔: GitHub secret scanning + push protection 활성.
- 외부 라이브러리 평가: 신규 dependency 추가 시 라이선스·유지보수성·취약점 이력 검토.
4. 데이터 프라이버시
4-1. k-anonymity
- 모든 집계 데이터는 k ≥ 3 의 익명성 임계값을 통과해야만 반환됩니다 (MVP 기준).
- 정식 운영 시 k ≥ 5 로 상향 예정.
- 데이터베이스 제약 (
CHECK constraint) 으로 강제되어, 애플리케이션 버그로도 우회 불가 (db/migrations/20260421000001_intel_schema.sql).
4-2. 원시 데이터 격리
- 원천 데이터 제공처 (Syncle, RTMS, R-ONE 등) 의 원시 매물·예약 데이터는 Veacon 에 그대로 복제되지 않으며, 익명화·집계된 결과만 저장됩니다.
- ETL 과정에서 개인 식별 정보 (PII) 는 제거 또는 해시 처리됩니다.
4-3. 이메일 처리 (정확화)
- SSO 인증 식별자 (
external_users.email_hash): 이메일의 SHA-256 해시만 저장, 복원 불가. - 연락용 이메일 (
intel.api_consumers.contact_email): 평문 저장. 트랜잭션 발송 (영수증·보안 알림), 청구 의무 이행, 팀 초대를 위해 필수. - 두 값은 서로 다른 테이블에 보관되며, 마케팅 목적 수집은 별도 옵트인 후에만 이루어집니다 (현재 미수집).
4-4. 데이터 분류
| 분류 | 예시 | 보호 수준 |
|---|---|---|
| Public | 공개 API 응답 (/api/public/*), 마케팅 페이지 | 무제한 |
| Internal | 운영 로그·메타데이터·집계 통계 | 직원 접근만, 감사 로그 |
| Confidential | 이용자 이메일 (평문), 결제 정보, API Key 해시 | 최소 권한, 암호화, 감사 로그 |
5. 감사 로그 (Audit Trail)
- API 호출 로그 (
intel.api_call_logs): 모든 API 호출이 불변 (immutable) 기록.UPDATE·DELETE는 PostgresRULE ... DO INSTEAD NOTHING으로 차단 (migration:133-136). 보존 기간 최대 12개월. - Key 라이프사이클 로그 (
intel.api_key_audit_log): 발급·회전·폐기 이벤트 기록. SOC 2 감사 추적용 보관 — 최대 24개월 (감사 의무 기간 고려). - 시스템 접근 기록 (Supabase audit log 및 Vercel access log): 최소 6개월 보존 (정보통신망법 시행령 제15조의2 근거).
6. 사고 대응 (Incident Response)
6-1. 침해 통지
- B2B 위탁사 (Controller) 대상: 침해 인지 후 부당한 지체 없이, 늦어도 48시간 이내 이메일로 통지. 상세 절차 및 통지 정보는 DPA 제7조 참조.
- 정보주체 통지: PIPA 제34조 (1,000명 이상 침해 시 72시간 KISA 신고 + 정보주체 통지) 및 GDPR Art. 33-34 절차에 따라 처리. 상세: 개인정보처리방침 제17조.
6-2. 운영 상태 공개
- Status page (
https://status.veacon.io) — 활성화 P1 단계 후. 현재 상태 및 과거 incident 공개. - 중대 사고 발생 시 영향받은 Enterprise 고객에게 post-mortem 보고서 를 14일 이내 제공.
6-3. 사업 연속성·복구 (BCP/DR)
- 백업: Supabase managed 일일 자동 백업 + Point-in-Time Recovery (PITR) — 7일 보존.
- RPO (Recovery Point Objective): ≤ 1시간 (PITR continuous).
- RTO (Recovery Time Objective): ≤ 24시간 (managed DB restore + Vercel zero-downtime deploy).
- 장애 시나리오 훈련: 분기 1회 내부 복구 시뮬레이션 (P10 로드맵부터 공식화).
7. 취약점 공개 (Vulnerability Disclosure)
7-1. 책임 있는 공개 (Responsible Disclosure)
Veacon 에서 보안 취약점을 발견하신 경우 아래 원칙을 따라주십시오.
- 연락처: hello@veacon.io — 제목에
[Security]prefix 를 반드시 포함해주십시오 (별도 PSIRT inbox 분기 처리) - 요청 사항: 취약점 상세, 재현 방법, 영향 범위, 제보자 연락처
- 공개 전 협조 기간: 90일 (coordinated disclosure)
- 응답 SLA:
- 최초 응답: 24시간 이내
- Severity 분류 통지: 영업일 3일 이내
- 중대 (Critical / High) 취약점 조치: 7일 이내
- Medium / Low: 30 / 90일 이내
7-2. Safe Harbor
다음 조건을 모두 충족하는 선의의 연구 활동에 대해 회사는 법적 조치를 취하지 않습니다.
- 회사 및 다른 이용자의 데이터에 접근하지 않을 것 (또는 최소한의 증명용 접근 후 즉시 중단·삭제)
- 서비스 가용성을 해치지 않을 것 (DDoS · 대량 자동 스캔 · 무차별 brute force 금지)
- 공개는 회사의 조치 완료 후 또는 90일 경과 후에 수행할 것
- 제3자 (이용자·재수탁사) 데이터를 추가 유포·판매하지 않을 것
7-3. Bug Bounty
현재 monetary reward 프로그램은 운영하지 않습니다. 다만, 검증된 신고에 대해서는 사전 동의 시 보안 페이지 (/security) 에 Acknowledgements 항목으로 공개 사례하며, 향후 정식 bug bounty 로 확장할 예정입니다 (P10 이후).
8. 인사 보안 (Personnel Security)
- 고용 전 검증: 신원 확인 및 reference check
- 비밀유지: 모든 임직원 · 계약자 사전 NDA 체결. 이용자 정보 접근 권한자는 별도 비밀유지 서약 (DPA 제13조).
- 권한 회수: 퇴사·계약 종료 후 24시간 이내 모든 시스템 접근 권한 회수 + 시크릿 회전.
- 보안 교육: 신규 입사 시 OWASP Top 10 · 개인정보 처리 · 사고 대응 절차 교육. 연 1회 갱신 교육.
9. 변경 관리 (Change Management)
- Code Review 의무: 모든 production 변경은 PR 단위 review 후 main 머지. solo 푸시 금지.
- CI 게이트: typecheck · 테스트 · 빌드 · dependency 스캔 통과 후에만 배포.
- 시크릿 변경: 환경변수 변경은 founder 승인 후 Vercel Dashboard 에서 처리.
- 마이그레이션: DB schema 변경은 별도
db/migrations/*.sql파일로 commit 되며, idempotent 패턴 (CREATE ... IF NOT EXISTS) 강제. - 로드맵·ADR: 중대 결정은
docs/adr/ADR-XXX.md로 기록.
10. 컴플라이언스 로드맵
| 항목 | 상태 | 시점 |
|---|---|---|
| 개인정보 보호법 (PIPA) 준수 | 운영 중 | — |
| 정보통신망법 시행령 제15조의2 (접근 로그 6개월) | 운영 중 | — |
| k-anonymity ≥ 3 강제 | 운영 중 (MVP) | — |
| k-anonymity ≥ 5 강제 | 예정 | 정식 운영 시점 |
| 외부 침투 테스트 (연 1회) | 예정 | 2027 년부터 |
| SOC 2 Type II · ISO 27001 | 로드맵 | P10 단계 (정식 시점 별도 공지) |
| Bug Bounty 정식 운영 | 로드맵 | P10 이후 |
본 로드맵은 DPA 제8조 (감사) 및 부속서 2 (TOMs) 와 동기화됩니다. 시점이 변동되는 경우 본 페이지 갱신 후 Enterprise 고객에게 통지합니다.
11. 제3자 서비스 (재수탁사)
Veacon 이 의존하는 주요 제3자 서비스는 모두 공인된 보안 표준을 갖추고 있습니다. 처리 정보·국외이전 상세는 개인정보처리방침 제5조 및 DPA 부속서 3 참조.
| 서비스 | 인증·표준 | 역할 |
|---|---|---|
| Supabase | SOC 2 Type II, HIPAA-ready | 데이터베이스·인증 (한국 ICN 리전) |
| Vercel | SOC 2 Type II, GDPR 적격 | 서버리스 런타임·정적 호스팅, cookieless 분석 |
| Upstash | SOC 2 Type II | Rate Limit · JWT 캐시 (Tokyo 리전) |
| Stripe | PCI-DSS Level 1, SOC 2 Type II | 결제 처리 |
| Resend | SOC 2 Type II | 트랜잭션 메일 |
| Sentry (Functional Software) | SOC 2 Type II, ISO 27001 | 에러·예외 추적 (US) |
12. 관련 정책
- 개인정보처리방침 — 정보주체 대상 처리 안내
- 데이터 처리 위탁 (DPA) — B2B 고객사 대상 계약, 부속서 2 (TOMs)
- 쿠키 정책 — 인증·기술 쿠키 상세
- 이용약관 — 서비스 이용 조건
13. 문의
- 보안 취약점 신고: hello@veacon.io (제목에
[Security]포함) - Enterprise 감사 요청 · 심화 보고서: hello@veacon.io
- 개인정보 관련 문의: hello@veacon.io (개인정보처리방침 제12조 — 박진희 / 0507-1367-0463)
시행일: 2026-05-16 · 버전: v1.1.0 다음 검토 예정일: 2026-11-16 (6개월 주기)
