본문으로 건너뛰기

CORS/TLS

GenD 플랫폼의 CORS(Cross-Origin Resource Sharing) 정책과 TLS 인증서 관리 설정입니다.

개요

GenD API는 FastAPI의 CORSMiddleware를 사용하며, TLS 종단은 Ingress Controller(NGINX) 또는 cert-manager에서 처리합니다. 미들웨어는 LIFO 순서로 AuditMiddleware(outer) -> PrometheusMiddleware -> CORSMiddleware(inner)로 등록됩니다.

CORS 설정

현재 구성

설정설명
GEND_CORS_ORIGINS["*"]허용 오리진
GEND_CORS_ALLOW_CREDENTIALSfalse자격 증명 허용
allow_methods["*"]허용 HTTP 메서드
allow_headers["*"]허용 헤더

프로덕션 권장 설정

# 특정 도메인만 허용
GEND_CORS_ORIGINS='["https://gend.genon.ai","https://gend.local:8443"]'
GEND_CORS_ALLOW_CREDENTIALS=false

allow_credentials=Trueorigins=["*"]는 동시에 사용할 수 없습니다. GenD는 JWT Bearer 토큰 인증을 사용하므로 credentials=False가 올바른 설정입니다.

TLS 구성

로컬 개발 (Kind)

Kind 환경에서는 self-signed 인증서를 사용합니다. Ingress Controller에서 TLS를 종단합니다.

# Kind 클러스터에서 443 -> 8443 매핑
extraPortMappings:
- containerPort: 443
hostPort: 8443
protocol: TCP

프로덕션 (cert-manager)

cert-manager + Let's Encrypt로 자동 인증서 발급 및 갱신을 구성합니다.

# cert-manager 설치
kubectl apply -f infra/cert-manager/

Ingress 리소스에 TLS 어노테이션을 추가합니다:

metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts: ["gend.genon.ai"]
secretName: gend-tls-cert

DMZ Relay 보안

gend-relay(DMZ)는 HMAC-SHA256 서명으로 요청을 검증합니다. query string을 포함한 전체 URL이 서명 대상입니다.

GEND_DMZ_ENABLED=true
GEND_DMZ_HMAC_SECRET=<SHARED_SECRET>
GEND_DMZ_RELAY_HEADER=X-DMZ-Verified

관련 문서