안전하고 확장 가능한 원격 MCP 서버를 구축하는 방법 | 덴 델리마르스키 | GitHub Blog


안전하고 확장 가능한 원격 MCP 서버 구축 가이드

개요

**Model Context Protocol (MCP)**는 AI 에이전트가 API별 커넥터를 구현하지 않고도 외부 도구와 데이터 소스에 연결할 수 있게 해주는 표준화된 프로토콜입니다. 이 문서는 MCP 서버의 보안과 확장성을 중심으로 한 포괄적인 구축 가이드를 제공합니다.

1. MCP 보안의 중요성

1.1 보안이 중요한 이유

기존 API와의 차이점:

  • 기존 API는 통제된 환경의 알려진 클라이언트들에게 서비스를 제공
  • MCP 서버는 AI 에이전트와 무제한적인 데이터 소스 간의 브리지 역할
  • 민감한 기업 리소스를 포함할 수 있어 보안 침해 시 더 큰 피해 발생

1.2 주요 보안 위협

공통 공격 벡터:

  • Confused Deputy 문제: 정당한 사용자가 서버를 속여 접근하지 말아야 할 리소스에 접근하게 만드는 문제
  • 토큰 패스스루 취약점: 토큰이 잘못된 대상에게 전달되는 문제
  • 세션 하이재킹: 세션을 탈취하여 무단 접근하는 공격

2. MCP 인증 시스템

2.1 OAuth 2.1 기반 인증

MCP 사양의 핵심 보안 기능:

  1. 인증 서버 디스커버리

    • OAuth 2.0 Protected Resource Metadata (PRM) RFC 9728 구현
    • 클라이언트가 보호된 MCP 서버 접근 시 HTTP 401 응답
    • WWW-Authenticate 헤더로 메타데이터 엔드포인트 제공
  2. 동적 클라이언트 등록

    • OAuth 2.0 Dynamic Client Registration Protocol (RFC 7591) 사용
    • AI 에이전트의 동적 연결 시 수동 클라이언트 설정 불필요
  3. 리소스 지시자

    • RFC 8707 Resource Indicators 의무 사용
    • 토큰을 특정 MCP 서버에 바인딩
    • 토큰 재사용 공격 방지 및 명확한 보안 경계 유지

2.2 완전한 인증 플로우

8단계 인증 프로세스:

  1. 디스커버리 단계: MCP 클라이언트가 자격 증명 없이 서버 접근 시도
  2. 서버 응답: HTTP 401 응답과 메타데이터 URL 제공
  3. 메타데이터 검색: 클라이언트가 PRM 가져오기 및 인증 서버 엔드포인트 획득
  4. 클라이언트 등록: 인증 서버에 자동 등록 (지원되는 경우)
  5. 인증 요청: PKCE 및 리소스 매개변수로 OAuth 플로우 시작
  6. 사용자 동의: 인증 서버를 통한 사용자 권한 부여
  7. 토큰 교환: 인증 코드를 액세스 토큰으로 교환
  8. 인증된 요청: 모든 후속 요청에 Bearer 토큰 포함

3. MCP 인증 구현

3.1 핵심 구성 요소

구현 시 고려사항:

  1. PRM 엔드포인트

    • /.well-known/oauth-protected-resource 엔드포인트 구현
    • 지원되는 인증 서버 스코프 광고
    • MCP TypeScript SDK에서 기본 제공
  2. 토큰 검증 미들웨어

    • Bearer 토큰 추출: Authorization 헤더에서
    • 토큰 서명 검증: OAuth 제공자의 JWKS 엔드포인트 사용
    • 토큰 만료 및 대상 클레임 확인
    • 토큰이 특정 MCP 서버용으로 발급되었는지 확인
  3. 오류 처리

    • HTTP 401: 누락/유효하지 않은 토큰
    • HTTP 403: 권한 부족
    • 적절한 WWW-Authenticate 헤더 반환

3.2 실용적인 팁

:light_bulb:: PyJWT와 같은 오픈 소스 솔루션을 활용하여 토큰 검증을 구현하세요.

:warning: 주의사항: 토큰이 귀하의 MCP 서버를 위해 특별히 발급되었는지 확인하는 것이 인프라 보안에 매우 중요합니다.

4. 다중 사용자 시나리오 처리

4.1 멀티테넌시 보안 과제

주요 보안 책임:

  1. 사용자 신원 추출 및 검증

    • 토큰 서명 및 만료 검증 후 사용자 식별자 추출
    • sub 클레임에서 사용자 ID 획득
  2. 인증 정책 적용

    • 사용자 식별자를 내부 사용자 프로필에 매핑
    • 특정 권한 결정
    • 인증된 사용자라고 해서 모든 작업과 데이터에 접근할 수 있는 것은 아님
  3. 올바른 토큰 대상 확인

    • JWT의 aud 클레임 검증
    • 한 MCP 서버용 토큰이 다른 서버 접근에 사용되는 것 방지

4.2 데이터 격리

최소 권한 원칙:

  • 모든 데이터베이스 쿼리, 다운스트림 API 요청, 캐시 조회, 로그 항목을 현재 사용자로 제한
  • 사용자는 업무에 꼭 필요한 데이터와 작업에만 접근 가능
  • 기존의 검증된 라이브러리와 프레임워크 사용 권장

5. AI 게이트웨이를 통한 확장

5.1 AI 게이트웨이의 역할

게이트웨이가 해결하는 문제:

  • AI 에이전트의 급격한 요청으로 인한 트래픽 급증
  • 클라이언트가 다른 속도로 진화할 때 프로토콜 버전 간 변환 필요
  • 여러 서버 인스턴스에서 보안 정책의 일관된 관리

5.2 AI 게이트웨이 구성

핵심 정책 구현:

  1. 속도 제한: 폭주하는 AI 에이전트로부터 리소스 고갈 방지
  2. 요청/응답 변환: 프로토콜 진화를 우아하게 처리
  3. 캐싱: 자주 변경되지 않는 비용이 많이 드는 작업
  4. 서킷 브레이커: 다운스트림 서비스가 어려울 때 빠른 실패

추가 보안 기능:

  • CORS 처리
  • 자동 보안 헤더 주입
  • JWT 토큰 검증

6. 프로덕션 준비 패턴

6.1 향상된 비밀 관리

기본 환경 변수의 문제점:

  • 로테이션 어려움
  • 로그나 빌드 아티팩트로 유출되기 쉬움
  • 공격자에게 정적 타겟 제공

현대적 접근 방식:

  • 전용 비밀 관리 서비스 사용
    • Azure Key Vault
    • AWS Secrets Manager
    • HashiCorp Vault

워크로드 아이덴티티 (무비밀/키리스 방식):

  • 부트스트랩 비밀 문제 완전 제거
  • 클라우드 플랫폼에서 직접 보안 아이덴티티 할당
  • 제한된 특정 권한 부여 (예: “데이터베이스 자격 증명에 대한 읽기 전용 액세스”)

보안 원칙:

  • 최소 권한: 각 MCP 서버 인스턴스는 특정 작업에 절대 필요한 비밀에만 접근
  • 구획화: 단일 침해 인스턴스의 폭발 반경 제한

6.2 관찰 가능성 및 모니터링

구조화된 로깅:

  • 요청 경계 전반의 일관성
  • 고유 상관 관계 ID로 전체 여행 추적
  • 복잡한 요청의 모든 도구 호출 및 외부 API 상호작용 추적

분산 추적:

  • OpenTelemetry 표준 사용
  • 요청이 MCP 서버와 다운스트림 서비스를 통해 흐르는 방식 시각화
  • 성능 병목 지점 정확히 파악

보안 이벤트 로깅:

  • 모든 인증 시도 기록
  • 인증 실패 기록
  • 비정상적인 접근 패턴 기록
  • 진행 중인 공격에 대한 조기 경고 시스템

메트릭 수집 중점 영역:

  • 요청 지연 시간: AI 에이전트의 짧은 주의 시간
  • 오류율: 특히 인증 및 권한 부여
  • 리소스 사용률
  • 간단한 up/down 상태 제공하는 전용 상태 엔드포인트

7. 학습 리소스 및 참고 자료

7.1 공식 문서

  • MCP 인증 사양: OAuth 2.1 구현 세부 사항
  • 보안 모범 사례: 권장 보안 가이드라인

7.2 개발 도구

  • MCP TypeScript SDK: 기본 PRM 엔드포인트 기능 포함
  • PyJWT: 토큰 검증을 위한 오픈 소스 솔루션
  • OpenTelemetry: 분산 추적 표준

7.3 클라우드 서비스

  • Azure Key Vault: Microsoft 비밀 관리 서비스
  • AWS Secrets Manager: Amazon 비밀 관리 서비스
  • HashiCorp Vault: 오픈 소스 비밀 관리 솔루션

8. 핵심 takeaway

8.1 보안 우선 접근법

  • 보안을 나중에 추가하는 것이 아닌 기초로 시작
  • MCP 사양이 기본 보안 원시 요소 제공
  • 현대 클라우드 플랫폼이 확장 인프라 제공

8.2 구현 권장사항

  • 기존의 검증된 OAuth 라이브러리 사용
  • 처음부터 사용자 정의 구현보다는 표준 솔루션 활용
  • 인증, 권한 부여, 배포 아키텍처에 주의

8.3 확장성 고려사항

  • AI 게이트웨이를 통한 중앙집중식 관리
  • 구조화된 로깅 및 모니터링 구현
  • 워크로드 아이덴티티를 통한 고급 비밀 관리

참고: 이 문서는 빠르게 발전하는 MCP 기술을 기반으로 하므로, 최신 사양과 모범 사례를 정기적으로 확인하는 것이 중요합니다.

1개의 좋아요