#보안 강화 가이드
버전: 0.33.0 최종 업데이트: 2026-03-15 적용 대상: ranvier-core, ranvier-http, ranvier-compliance, ranvier-inspector 카테고리: 가이드
#1. 개요
이 가이드는 OWASP Top 10 (2021) 및 Ranvier 고유 보안 패턴을 중심으로 프로덕션 Ranvier 배포의 보안 강화를 다룹니다.
#2. OWASP Top 10 준수
#A01: 취약한 접근 제어
Ranvier 패턴: Bus Capability 적용은 무단 리소스 접근을 방지합니다.
use ranvier_core::prelude::*;
// Bus capabilities는 Transition이 접근할 수 있는 리소스를 제한합니다.
// 명시적으로 선언된 capability만 런타임에 사용 가능합니다.
fn configure_bus(bus: &mut Bus) {
bus.with_capability::<DatabasePool>();
// UserSecrets는 추가되지 않음 — Transition이 접근할 수 없음
}체크리스트:
- ✅ Bus Capabilities를 사용하여 회로별 리소스 접근 제한
- ✅ 인증된 엔드포인트에
ranvier-authJWT 검증 사용 - ✅
ranvier-guardCORS로 교차 출처 접근 제한 - ✅ 미들웨어 레이어를 통한 라우트 수준 인가 적용
#A02: 암호화 실패
체크리스트:
- ✅ 프로덕션에서 TLS 1.3+ 적용 (리버스 프록시 또는
rustls로 구성) - ✅ 민감한 데이터를 절대 로깅하지 않음 —
ranvier-observe수정 정책 사용 - ✅ 시크릿을 코드가 아닌 환경 변수에 저장
- ✅ 강력한 JWT 서명 알고리즘 사용 (RS256 또는 ES256, 공유 환경에서 HS256 지양)
#A03: 인젝션
체크리스트:
- ✅
ranvier-db에서 매개변수화된 쿼리 사용 (기본적으로 준비된 구문) - ✅ 사용자 입력으로 SQL을 절대 구성하지 않음
- ✅ 디렉토리 순회를 방지하기 위해 파일 경로 검증 및 위생 처리
- ✅ 타입화된 추출기 (
Json<T>,Query<T>) 사용 — 잘못된 입력을 거부
#A04: 안전하지 않은 설계
Ranvier의 장점: Schematic + Transition 패턴은 명시적 의사결정 흐름을 강제하여 설계상 안전하지 않은 패턴의 도입을 어렵게 만듭니다.
체크리스트:
- ✅ Schematic 검증을 사용하여 비즈니스 로직 무결성 확인
- ✅ 각 Axon 회로에 대한 위협 모델 문서화
- ✅ 처리되지 않은 오류 경로에 대한 Transition Outcome 검토
#A05: 보안 설정 오류
최대 보안 헤더를 위해 SecurityHeadersPolicy::strict() 적용:
use ranvier_guard::prelude::*;
let security = SecurityHeadersLayer::new(SecurityHeadersPolicy::strict());
// 포함: HSTS, CSP default-src 'self', COEP, COOP, CORP,
// Permissions-Policy, X-XSS-Protection, Referrer-Policy커스텀 CSP:
use ranvier_guard::{CspBuilder, SecurityHeadersPolicy, SecurityHeadersLayer};
let csp = CspBuilder::new()
.default_src(&["'self'"])
.script_src(&["'self'", "https://cdn.example.com"])
.style_src(&["'self'", "'unsafe-inline'"])
.img_src(&["'self'", "data:", "https:"])
.connect_src(&["'self'", "https://api.example.com"])
.frame_ancestors(&["'none'"]);
let policy = SecurityHeadersPolicy::default().csp(csp);
let layer = SecurityHeadersLayer::new(policy);체크리스트:
- ✅
SecurityHeadersPolicy::strict()를 기본 수준으로 사용 - ✅ 프로덕션에서 상세 오류 메시지 제거
- ✅ 프로덕션 빌드에서 디버그 엔드포인트 비활성화
- ✅ 배포 전 기본 구성 검토
#A06: 취약하고 오래된 컴포넌트
# 정기적으로 실행:
cargo audit # 알려진 취약점 확인
cargo update # 의존성 업데이트
cargo outdated # 오래된 의존성 찾기체크리스트:
- ✅ CI 파이프라인에서
cargo audit실행 - ✅ 자동 의존성 업데이트를 위해 Dependabot 또는 Renovate 활성화
- ✅
Cargo.lock에 의존성 버전 고정
#A07: 식별 및 인증 실패
체크리스트:
- ✅ JWT 기반 인증에
ranvier-auth사용 - ✅ 브루트포스 방지를 위해 로그인 엔드포인트에
RateLimitLayer적용 - ✅ 반복 실패 후 계정 잠금 구현 (애플리케이션 수준)
- ✅ 안전한 세션 저장소 사용 (프로덕션 클러스터에서 인메모리 사용 금지)
#A08: 소프트웨어 및 데이터 무결성 실패
체크리스트:
- ✅
Cargo.lock을 통해 크레이트 체크섬 검증 - ✅ 공급망 보안을 위해
cargo vet사용 - ✅ 릴리스 서명 (GPG 또는 Sigstore)
- ✅ CI/CD 파이프라인 무결성 검증
#A09: 보안 로깅 및 모니터링 실패
Ranvier 패턴: 구조화된 OTel 호환 로깅에 ranvier-observe를 사용합니다.
체크리스트:
- ✅ 소스 IP와 함께 인증 실패 로깅
- ✅ 시도된 리소스와 함께 인가 거부 로깅
- ✅ OTel exporter를 사용하여 SIEM에 보안 이벤트 전송
- ✅
RateLimitLayer활성화 — 제한 위반 시 로그 발행
#A10: 서버 측 요청 위조 (SSRF)
체크리스트:
- ✅ 아웃바운드 요청 전 모든 URL 검증
- ✅ 허용된 외부 도메인에 대한 허용 목록 사용
- ✅ 내부 네트워크 범위에 대한 요청 차단 (10.x, 172.16.x, 192.168.x, 169.254.x)
- ✅ 사용자가 제어하는 URL을 HTTP 클라이언트에 직접 전달하지 않음
#3. DDoS 보호 구성
use ranvier_guard::prelude::*;
// 속도 제한: 클라이언트 IP당 분당 100개 요청
let rate_limit = RateLimitLayer::new(
RateLimitPolicy::per_minute(100)
);
// 연결 제한: IP당 최대 50개 동시 요청
let conn_limit = ConnectionLimitLayer::new(50);
// 요청 크기 제한: 헤더 8KB, URL 2KB
let size_limit = RequestSizeLimitLayer::new()
.max_header_bytes(8 * 1024)
.max_url_bytes(2 * 1024);#4. 프로덕션 배포 체크리스트
#필수
- TLS 1.3 활성화 (리버스 프록시 또는 rustls를 통해)
-
SecurityHeadersPolicy::strict()적용 - 모든 공개 엔드포인트에
RateLimitLayer구성 -
ConnectionLimitLayer구성 -
RequestSizeLimitLayer구성 -
CorsGuardLayer구성 (프로덕션에서permissive()사용 금지) -
cargo audit가 취약점 없이 통과 - 시크릿에 환경 변수 사용 (하드코딩된 자격증명 금지)
- 디버그/inspector 엔드포인트 비활성화 또는 보호
#권장
- 프론트엔드에 맞는 커스텀
CspBuilder구성 - 보안 이벤트 알림이 포함된 OTel 로깅 활성화
- 의존성 업데이트 자동화 (Dependabot/Renovate)
- 로드 밸런서 헬스 체크 구성
- 백업 및 재해 복구 계획 문서화
#5. 참고 자료
- OWASP Top 10 (2021)
- Ranvier 보안 정책
- 프로덕션 준비 체크리스트
- 배포 가이드
- OTel 운영 플레이북