LLM Gateway로 사내 AI 사용 통제 강화

by DD
1시간 전
조회수 0

생성형 AI 코딩 도구 사용 증가로 인한 인증·비용·거버넌스·관측성 공백 문제 해결 필요성 대두

사내 OIDC 인증 기반 Virtual Key(VK) 자동 발급 및 모든 LLM 요청 프록시 아키텍처 설계

팀·사용자별 예산 통제, Rate Limit, 모델 접근 제어 기능 구현으로 비용 및 보안 위험 관리

Bedrock 기반 Claude Code 및 OpenAI 모델(GPT-5.5, Codex) 통합 관리 및 토큰 단위 사용량 추적 기능 제공

사내 LLM Gateway의 필요성: Shadow AI와 비용 폭증

생성형 AI 도구의 폭발적인 사용 증가에도 불구하고, 조직의 통제 밖에 있는 Shadow AI 영역이 확대되고 있습니다. Microsoft와 LinkedIn의 2024년 Work Trend Index에 따르면 지식 근로자의 75%가 AI를 사용하며, 이 중 78%는 조직이 제공하지 않은 도구를 사용합니다. 이는 사내 코드 및 데이터 유출 위험을 높입니다. 또한, 토큰 단가 하락으로 인한 사용량 폭증은 월 수천만 달러 규모의 LLM 비용 청구로 이어지지만, 요청 단위의 비용 귀속 수단이 없어 비용 분해 및 통제가 어렵습니다. Gartner는 에이전트형 AI 프로젝트의 40% 이상이 비용 통제 실패로 취소될 것으로 전망하며, EU AI Act 등 규제 강화 추세는 감사 추적 및 모델 인벤토리 같은 거버넌스 산출물을 필수 요건으로 만들고 있습니다. OWASP Top 10 for LLM Applications 역시 무제한 소비(Unbounded Consumption)를 핵심 위험으로 명시하며, 중앙 집중식 통제의 중요성을 강조합니다.

LLM Gateway 아키텍처: 데이터/컨트롤 평면 분리와 서비스 역할

구축된 LLM Gateway는 데이터 평면(Data Plane)컨트롤 평면(Control Plane)으로 명확히 분리됩니다. 데이터 평면의 핵심인 `gateway-proxy`는 FastAPI 기반 ASGI 미들웨어로 구현되어, 인증, 예산, Rate Limit, 모델 다운그레이드, Bedrock 프록시, 비용 이벤트 발행까지 모든 사용자 요청을 처리합니다. 컨트롤 평면의 `admin-api`는 Virtual Key 발급, 사용자/팀/모델/예산 관리, 분석 기능을 담당하며, `admin-ui`는 운영 콘솔을 제공합니다. 백그라운드 워커(`cost-recorder-worker`, `notification-worker`, `scheduler`)는 비용 집계, 예산 알림, VK 정리 등 비동기 작업을 처리하여 데이터 평면의 부담을 줄입니다. 이러한 서비스 분리는 각 컴포넌트의 책임 명확화장애 격리를 통해 시스템 안정성을 높입니다.

인증 및 Virtual Key(VK) 관리: OIDC 기반 안전한 자격증명

사용자는 사내 OIDC(OpenID Connect) 인증을 통해 로그인하며, `admin-api`는 받은 ID 토큰(JWT)을 검증하여 Virtual Key(VK)를 발급합니다. 이 VK는 1시간 유효하며 게이트웨이 전용 자격증명으로 사용됩니다. 사용자는 Bedrock IAM 자격증명을 직접 다룰 필요가 없어 키 유출 및 추적 곤란 문제를 원천적으로 해결합니다. VK는 Redis 캐시에 저장되어 빠른 조회를 지원하며, 비활성화된 계정은 Aurora DB에서 재확인하여 보안성을 강화합니다. `admin-api`의 OIDC 검증기는 표준 OIDC를 준수하여 Cognito, Keycloak 등 다양한 IdP와 연동 가능하며, 팀 매핑은 그룹 클레임(Cognito의 `cognito:groups`)을 활용합니다. 이는 표준화된 인증 흐름을 통해 다양한 IdP 환경에 유연하게 대응할 수 있게 합니다.

비용 통제 및 거버넌스: 예산 정책과 자동 다운그레이드

게이트웨이는 HARD_BLOCK, SOFT_WARNING, THROTTLE 세 가지 예산 정책을 Redis Lua 스크립트로 원자적으로 평가합니다. 특히, TEAM 예산이 USER 예산에 우선하며, TEAM 예산 미설정 시 LLM 호출을 거부하는 'Secure by Default' 원칙을 적용합니다. 예산 임계치 도달 시 요청을 차단하는 대신, 자동 다운그레이드(Auto Downgrade) 기능을 통해 더 저렴한 모델로 격하하여 서비스 연속성을 유지합니다. 이 정책은 Redis와 Aurora에 설정되며, 운영자는 UI에서 다운그레이드 체인을 시각적으로 구성하고 비용 절감 효과를 예측할 수 있습니다. 이는 비용 효율성과 서비스 가용성 사이의 균형을 맞추는 핵심 기능입니다.

정확한 비용 기록 및 복구: 스트리밍 중단 시 토큰 역산

비용 기록은 Redis Stream(`cost:stream`) 발행 후 별도 워커가 소비하는 비동기 방식으로 처리되어, 데이터 평면의 부하를 줄이고 장애 격리를 강화합니다. 특히, LLM 응답 스트리밍 중 클라이언트 연결이 끊어져 `usage.output_tokens`가 0으로 기록되는 경우, 누적된 텍스트를 기반으로 Bedrock CountTokens API를 호출하여 출력 토큰을 역산하고 `estimated=true` 플래그로 표시합니다. 이 스트리밍 중단 복구(KI-08) 메커니즘 덕분에 Bedrock Invocation Log와 DB Usage Log 간 토큰 수 불일치가 0건으로 달성되었으며, 이는 데이터 정확성 및 감사 추적의 신뢰도를 크게 향상시킵니다.

Amazon Bedrock 위에 사내 LLM Gateway 구축하기: Claude Code, Codex를 위한 인증·비용·거버넌스