C. 인프라 보안
시행일: 2026년 3월 12일
요약: ProgramGarden은 Google Kubernetes Engine(GKE) 기반의 컨테이너 인프라를 통해 사용자별 격리된 실행 환경을 제공합니다. 모든 워크플로우는 독립된 Pod에서 실행되며, 코드 실행 샌드박스, 네트워크 정책, 컨테이너 생명주기 관리를 통해 안전한 서비스 환경을 유지합니다.
1. GKE Pod 격리 (사용자별 독립 환경)
1. 사용자별 독립 Pod
ProgramGarden은 각 사용자의 워크플로우를 독립된 Kubernetes Pod에서 실행합니다. 하나의 사용자가 다른 사용자의 실행 환경에 접근하거나 영향을 미칠 수 없도록 물리적으로 격리됩니다.
2. Pod 라이프사이클 관리
user-manager 서비스가 사용자 Pod의 전체 라이프사이클을 관리합니다:
- 생성: 워크플로우 실행 요청 시 사용자 전용 Pod를 동적으로 생성
- 종료: 워크플로우 완료 또는 사용자 요청 시 Pod 정상 종료
- 강제 종료: 구독 만료, 환불, 약관 위반 등의 사유 발생 시 Pod 즉시 강제 종료
- 자동 정리: 비활성 상태가 지속되는 Pod는 리소스 효율화를 위해 자동으로 정리
3. 리소스 제한
각 Pod에는 CPU, 메모리 등의 리소스 제한(Resource Limits)이 설정되어 있어, 하나의 Pod가 과도한 리소스를 점유하여 다른 사용자에게 영향을 미치는 것을 방지합니다.
2. 네트워크 정책
1. proxy-router를 통한 요청 라우팅
외부에서 GKE 클러스터 내부의 사용자 Pod로 직접 접근하는 것은 불가능합니다. 모든 요청은 proxy-router 서비스를 경유하여 인증 및 권한 검증을 거친 후 적절한 Pod로 라우팅됩니다.
2. VPC 내부 통신
GKE 클러스터의 모든 서비스는 Google Cloud VPC(Virtual Private Cloud) 내부에서 운영됩니다. 서비스 간 통신은 VPC 내부 네트워크를 통해 이루어지며, 외부 인터넷에 직접 노출되지 않습니다.
3. 서비스 간 인증
내부 서비스 간 통신에는 Google OIDC ID Token 기반 인증이 적용됩니다. 승인된 서비스만이 내부 API에 접근할 수 있으며, 토큰이 없거나 유효하지 않은 요청은 자동으로 거부됩니다.
3. 코드 실행 격리 (Sandbox)
1. sandbox_for_ai
AI 서비스에서 사용자의 Python 코드를 실행해야 하는 경우, 격리된 샌드박스 환경(sandbox_for_ai)에서 실행됩니다. 이 샌드박스는:
- 시스템 자원에 대한 접근이 제한됩니다.
- 네트워크 접근이 통제됩니다.
- 실행 시간 및 메모리 사용량에 제한이 설정됩니다.
- 실행 완료 후 환경이 초기화됩니다.
2. 악성 코드 방지
업로드되거나 생성된 코드가 시스템에 해를 끼치지 않도록, 위험한 시스템 호출 및 라이브러리 사용이 제한됩니다. 암호화폐 채굴, DDoS 공격, 파일 시스템 조작 등의 악용 시도는 탐지 및 차단됩니다.
4. 로컬 실행 보안 (Personal Local Server)
1. localhost 바인딩
사용자 로컬 머신에서 실행되는 Personal Local Server는 127.0.0.1(localhost)에만 바인딩됩니다. 외부 네트워크에서의 접근이 원천적으로 차단되며, 동일 머신 내에서만 통신이 가능합니다.
2. 인증 토큰 검증
로컬 서버에 대한 모든 요청은 Firebase Auth ID Token으로 인증됩니다. 유효하지 않은 토큰이 포함된 요청은 즉시 거부되며, 토큰은 Google의 공개 키를 통해 검증됩니다.
3. 사용자 책임
로컬 실행 환경의 보안(운영체제 업데이트, 방화벽 설정, 악성코드 방지 등)은 사용자의 책임입니다. 로컬 환경에서 발생하는 보안 사고에 대해 회사는 책임을 지지 않습니다.
5. 컨테이너 이미지 보안
1. 이미지 관리
GKE에서 사용하는 컨테이너 이미지는 Google Artifact Registry에서 관리되며, 승인된 이미지만 클러스터에 배포할 수 있습니다.
2. 정기 업데이트
보안 패치 및 취약점 수정을 위해 컨테이너 이미지는 정기적으로 업데이트됩니다.