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_CREDENTIALS | false | 자격 증명 허용 |
allow_methods | ["*"] | 허용 HTTP 메서드 |
allow_headers | ["*"] | 허용 헤더 |
프로덕션 권장 설정
# 특정 도메인만 허용
GEND_CORS_ORIGINS='["https://gend.genon.ai","https://gend.local:8443"]'
GEND_CORS_ALLOW_CREDENTIALS=false
allow_credentials=True와origins=["*"]는 동시에 사용할 수 없습니다. 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