이 페이지에서는 MongoDB MCP 서버에 대한 보안 권장사항 설명합니다.
MCP 서버 읽기 전용 모드
MCP 서버 --readOnly
옵션 은 읽기 전용 모드 활성화합니다. --readOnly
는 MCP 서버가 읽기, 연결 및 메타데이터 작업을 수행하는 도구 만 실행 제한합니다.
기본값 으로 읽기 전용 모드 활성화되어 있지 않으며 MCP 서버는 클러스터 쓰기 (write) 작업을 허용합니다. 보안을 강화하려면 MCP 서버 읽기 전용 모드 활성화 하고 읽기 전용 데이터베이스 사용자를 사용하여 클러스터에 연결합니다.
읽기 전용 모드 MCP 서버에서 수행되는 우발적이거나 악의적인 데이터 수정을 방지합니다.
읽기 전용 모드 활성화 하려면 MCP 클라이언트 애플리케이션 JSON 구성 파일 또는 명령줄 에 --readOnly
을(를) 포함하거나 MDB_MCP_READ_ONLY
운영 체제 환경 변수를 true
(으)로 설정하다 . 다음 섹션에서는 각 메서드의 예를 보여줍니다.
JSON 구성 파일 예시
다음 예시 Claude Desktop 클라이언트 애플리케이션 의 MCP 클라이언트 JSON 구성 파일 에 있는 --readOnly
을(를) 보여줍니다.
{ "mcpServers": { "MongoDB": { "type": "stdio", "command": "npx", "args": [ "-y", "mongodb-mcp-server@latest", "--readOnly" ], "env": { "MDB_MCP_CONNECTION_STRING": "mongodb://localhost:27017/myDatabase" } } } }
다른 예시 클라이언트 JSON 구성 파일은 MCP 서버 구성을 참조하세요.
명령줄 예시
다음 예시 Atlas cluster 에 연결하기 위해 Unix 환경 변수에 MCP 서버 연결 문자열 정의합니다.
export MDB_MCP_CONNECTION_STRING="mongodb://localhost:27017/myDatabase"
다음 예시 에서는 이전 환경 변수를 사용하고 추가 명령줄 옵션도 설정합니다.
npx -y mongodb-mcp-server@latest --readOnly
비밀 및 환경 변수
로그인 자격 증명 및 연결 정보와 같은 민감한 구성 설정에는 명령줄 인수 대신 환경 변수를 사용합니다. 예시 들어 API 클라이언트 설정에는 MDB_MCP_API_CLIENT_ID
및 MDB_MCP_API_CLIENT_SECRET
를 사용하고 연결 문자열에는 MDB_MCP_CONNECTION_STRING
를 사용합니다.
환경 변수는 명령줄 인수보다 안전합니다. 명령줄 인수를 추적하고, 캐시하고, 프로세스 목록에 포함하고, 다양한 위치에 기록할 수 있습니다.
다음 예시 MDB_MCP_READ_ONLY
환경 변수를 true
로 설정하고 MDB_MCP_CONNECTION_STRING
환경 변수를 설정합니다.
"MongoDB": { "type": "stdio", "command": "npx", "args": [ "-y", "mongodb-mcp-server@latest", ], "env": { "MDB_MCP_READ_ONLY": "true", "MDB_MCP_CONNECTION_STRING": "mongodb://127.0.0.1:27019/?directConnection=true" } }
환경 변수에 대한 자세한 내용은 운영 체제에서 MCP 서버 환경 변수 정의를 참조하세요.
읽기 전용 데이터베이스 액세스
보안 배포서버 위해 MCP 서버에서 읽기 전용 데이터베이스 액세스 사용합니다.
MCP 서버 연결을 위한 전용 읽기 전용 데이터베이스 사용자를 생성합니다.
데이터베이스
read
역할 사용하거나 데이터베이스 사용자를 위한 사용자 지정 읽기 전용 역할 만듭니다.MCP 서버에 데이터베이스
write
자격 증명 사용하지 마세요.
읽기 전용 데이터베이스 액세스 에 대한 사용 사례:
데이터 분석: 수정 위험 없이 프로덕션 데이터를 쿼리 하고 분석 .
보고: 실시간 데이터에서 보고서를 생성합니다.
모니터링: 데이터베이스 지표 및 성능 지표를 검사합니다.
개발 지원 : 개발자가 쓰기 (write) 액세스 허용하지 않고도 디버깅 목적으로 프로덕션 데이터를 쿼리 할 수 있습니다.
또한 읽기 전용 데이터 액세스 보장하려면 MCP 서버 옵션을 사용합니다. 자세한 내용은 앞부분의 --readOnly
MCP 서버 읽기 전용 모드 섹션을 참조하세요.
프로덕션 환경에서는 읽기 전용 데이터베이스 액세스 권장합니다. 그러나 다음 사용 사례에서는 제한된 쓰기 (write) 액세스 고려하세요.
개발 및 스테이징 환경.
올바른 권한 부여 으로 관리 작업을 수행합니다.
중요하지 않은 데이터가 있는 격리된 테스트 클러스터.
MCP 서버 배포 옵션
MCP 서버는 로컬 또는 원격으로 배포 할 수 있습니다.
로컬 MCP 서버
로컬 MCP 서버에서 MCP 서버와 클라이언트 애플리케이션 동일한 컴퓨터에서 실행 .
로컬 MCP 서버를 사용하면 설치 환경을 제어할 수 있습니다.
구성 및 종속성: MCP 서버 소프트웨어 종속성을 관리 . MCP 서버 매개변수 및 데이터베이스 연결을 정의하려면 로컬 컴퓨터에서 파일을 편집합니다.
자격 증명 보안: API 키 및 연결 문자열에 대한 민감한 정보는 구성 파일 또는 환경 변수에 로컬로 저장됩니다. 자격 증명 보호합니다.
수동 소프트웨어 업데이트: 새 MCP 서버 버전이 출시되면 사용자는 MCP 서버 소프트웨어를 다운로드 하여 설치할 수 있습니다. 이로 인해 사용자가 다른 MCP 서버 버전을 실행 수 있습니다.
MCP 서버를 로컬에 배포해야 하는 경우
다음 시나리오에 대해 로컬 MCP 서버를 배포합니다.
컴퓨터에서 MCP 서버를 시작하려면 쉬운 구성이 필요합니다.
자체 구성 및 업데이트를 관리합니다.
다양한 전송 프로토콜 사용
MCP 전송 프로토콜을 사용하면 클라이언트 애플리케이션 과 MCP 서버 간의 메시지 통신이 활성화 . 로컬 MCP 서버의 경우 다음 전송 프로토콜 중 하나를 사용합니다.
STDIO(표준 입력/출력): 클라이언트 애플리케이션 이 MCP 서버를 하위 프로세스 로 실행하고 운영 체제 표준 파이프(
stdin
및stdout
)를 사용하여 통신합니다. MongoDB 로컬 배포를 위해 STDIO 전송 프로토콜 권장합니다.Streamable HTTP: MCP 서버가
localhost
에서 서버 시작합니다. 클라이언트 영구 세션을 생성하는 Streamable HTTP 요청을 사용하여 MCP 서버와 통신합니다. 고유한 세션 ID 는 상호 작용의 상태 와 컨텍스트를 유지하기 위해 메시지 헤더에 포함됩니다.
경고
Streamable HTTP 사용하면 MCP 서버가 기본값 으로 localhost
(127.0.0.1)
에 바인딩됩니다. 이렇게 하면 MCP 서버가 동일한 컴퓨터에서 시작되는 연결만 허용합니다.
0.0.0.0
에 바인딩하면 MCP 서버가 전체 로컬 네트워크에 노출되어 동일한 네트워크의 다른 장치가 잠재적으로 MCP 서버에 액세스 수 있습니다. 이는 보안 위험이며 데이터베이스 컨텍스트에 대한 무단 액세스 허용할 수 있습니다. MCP 서버를 외부에 노출해야 하는 localhost
경우 MCP 서버에 대한 연결보호에 설명된 보안 인증 구현 .
다양한 전송 프로토콜의 장단점
STDIO는 클라이언트 애플리케이션 과 MCP 서버 간에 직접 링크를 생성합니다. STDIO는 애플리케이션 과 MCP 서버가 서로 밀접하게 연결되어 있기 때문에 하나 애플리케이션 만 MCP 서버와 통신하는 경우에 가장 적합합니다. STDIO를 사용하는 경우 MCP 서버는 클라이언트 애플리케이션 과 동일한 컴퓨터에서 실행 되어야 합니다.
Streamable HTTP 유연하며 컴퓨터의 비공개 서버 처럼 작동합니다. 여러 클라이언트가 MCP 서버에 연결할 수 있습니다. Streamable HTTP 는 테스트하기 쉽습니다. STDIO와 달리 Streamable HTTP 사용하면 MCP 서버를 원격으로 배포 하고 로컬로 배포 할 수도 있습니다.
원격 MCP 서버
원격 MCP 서버 배포서버 에서 MCP 서버는 cloud 의 컴퓨터 또는 온프레미스 서버 에서 실행됩니다.
클라이언트 애플리케이션은 네트워크를 통해 MCP 서버에 연결하고 Streamable HTTP 사용합니다. 이를 통해 여러 사용자, 자동화된 시스템, 애플리케이션 및 AI 에이전트가 액세스할 수 있는 중앙 공유 환경을 제공합니다.
MCP 서버 원격 배포의 경우 다음 사항을 고려하세요.
원격 배포서버 에는 예비 보안 위험이 있으며 보안 구성이 필요합니다.
최소한 cloud 또는 온프레미스에서 네트워크 격리, MCP 서버에 대한 인증 구성하고 시크릿 관리 설정하다 해야 합니다.
스트리밍 가능한 HTTP 위한 보안 모범 사례
원격 MCP 서버 배포서버 에서의 통신은 일반적으로 Streamable HTTP 사용합니다. Streamable HTTP 의 경우 다음 사항을 고려하세요.
연결에 대해 MCP 서버를
localhost
(127.0.0.1
)에 바인딩된 상태로 유지하며, 이는 기본값 입니다.localhost
에 바인딩하려면 관리자가 MCP 서버 앞에 역방향 프록시를 추가해야 합니다. 예시 를 들어 Nginx 역방향 프록시를 사용합니다.MCP 서버는 역방향 프록시를 사용하여 트래픽이 MCP 서버에 도달하기 전에 악의적인 트래픽을 중지합니다.
원격 MCP 서버의 장점
중앙 관리: 보안 정책, 로깅, 버전 관리, 액세스 제어를 한 곳에서 managed 합니다.
자동화 지원: CI/CD 파이프라인, 자동화된 테스트 프레임워크 및 기타 에이전트는 자동화된 워크플로의 클라이언트로 작동할 수 있습니다.
원격 MCP 서버의 단점
추가 hardware: 전용 서버 및 네트워크 인프라가 필요합니다.
복합 보안: 네트워크 보안, 인증, 권한 부여 및 TLS 인증서 관리 필요합니다.
단일 실패 점: 원격 서버 충돌하면 모든 사용자에게 영향을 미칩니다. 중요 환경에 대해서는 고가용성 구현하는 것이 좋습니다.
원격 MCP 서버 보안
모든 MCP 시스템에서 MCP 서버에 대한 인증 MCP 서버가 액세스 제공하는 서비스에 대한 인증 과 별도로 수행됩니다. MongoDB MCP 서버는 MCP 서버가 보호하는 MongoDB 인스턴스에 대해 정적으로 구성된 액세스 제공합니다.
MCP 서버는 인바운드 인증 또는 권한 부여 기능을 제공하지 않으므로 인증 및 권한 부여 구성해야 합니다. MCP 서버는 네트워크에서 사용할 수 있으므로 원격 MCP 서버 배포서버 의 경우 이 작업을 수행하는 것이 특히 중요합니다.
MCP 서버에 대한 연결 보호
MCP 서버에 대한 모든 인바운드 연결을 보호해야 하며, 그렇지 않으면 데이터베이스 노출됩니다.
다음 섹션에 설명된 대로 MCP 서버와 데이터베이스 간의 연결이 완전히 보호되더라도 연결을 보호해야 합니다. 이는 MCP 서버가 별도의 연결 점 제공하기 때문입니다.
MCP 서버에 대한 인바운드 연결을 보호하려면 MCP 서버와 병렬로 작동하는 외부 서비스가 필요합니다. 일반적으로 인바운드 연결에 대한 액세스 제어를 시행하다 하려면 역방향 프록시가 필요합니다. 프록시는 들어오는 요청 의 액세스 권한을 특정 MCP 서버 인스턴스 에 매핑하며, 이 인스턴스는 MongoDB database 인스턴스 로컬에서 MCP 서버 또는 Atlas cluster 에 연결하도록 정적으로 구성됩니다.
MCP 서버를 보호하는 다른 방법도 가능합니다. 간단하게 설명하기 위해 다음 섹션에서는 프록시 패턴 사용한다고 가정합니다.
위임된 권한 부여
위임된 권한 부여 에서 사용자는 자신의 권한 중 일부를 에이전트 에게 위임합니다. MongoDB MCP 서버와 함께 OAuth 2.1 을 사용할 것을 권장합니다.
MCP 서버로 작동하려면 배포서버 인증된 사용자 계정으로 보호되는 OAuth 권한 부여 서버(AS)와 OAuth 리소스 서버(RS)로 작동하는 MCP 서버 앞에 프록시가 있어야 합니다. 에이전트 OAuth 클라이언트 로 작동합니다.
OAuth 위임은 다음과 같이 작동합니다.
에이전트가 MCP 서버에 대한 액세스 요청합니다. MCP 서버는 프록시로 보호됩니다.
프록시는 에이전트 AS로 보내고, AS는 권한 부여 요청 시작합니다.
사용자는 AS에 로그인하고 에이전트 가 MCP 서버를 보호하는 프록시인 RS 액세스 할 수 있는 권한을 부여합니다.
에이전트는 RS에 액세스 할 수 액세스 토큰을 받습니다.
에이전트는 액세스 토큰을 사용하여 프록시를 통해 MCP 서버를 호출합니다.
프록시는 액세스 토큰의 유효성을 검사하고 MCP 서버에 대한 호출을 허용합니다.
MCP 서버는 프록시 요청 수신하고 정적으로 구성된 보안 연결을 통해 데이터베이스 에서 명령을 실행합니다.
MCP 서버와 데이터베이스 액세스 토큰을 읽지 않습니다. 프록시는 MCP 서버를 보호하기 위해 신뢰할 수 있습니다. 프록시를 우회하면 MCP 서버 및 MCP 서버가 액세스 할 수 있는 데이터베이스에 액세스 .
토큰의 형식이 숨겨집니다. JWT 는 프록시가 AS에서 발급한 토큰을 독립적으로 확인할 수 있는 일반적인 형식입니다.
직접 인증
직접 인증 권장되지 않습니다.
직접 인증 사용하면 에이전트 프록시에 자격 증명 제공합니다. 프록시가 자격 증명 인증합니다. 자격 증명 API 키 또는 에이전트 식별하는 기타 자격 증명일 수 있습니다. 패턴 간단하지만 다음과 같은 문제가 있습니다.
에이전트 만 식별되고 에이전트 대신해 역할을 하는 사용자는 식별되지 않습니다.
MCP 서버를 통해 누가 어떤 조치 취하고 있는지 감사 방법은 없습니다.
액세스는 일반적으로 모든 사용자에 대해 중앙에서 제어되거나 프록시에서 직접 제어됩니다.
MCP 보안 안티패턴
다음 섹션에서는 사용하지 않아야 하는 안티패턴에 대해 설명합니다.
사용자 가장
사용자 가장을 사용하지 마세요.
사용자 가장을 사용하면 사용자는 에이전트 에게 직접 자격 증명 제공합니다. 에이전트 인증 위해 자격 증명 프록시로 보냅니다. 사용자 가장에는 다음과 같은 문제가 있습니다.
사용자만 식별됩니다. 에이전트 사용자를 대신하여 행동한다는 사실은 숨겨져 있습니다.
사용자 자격 증명 중간 시스템으로 유출되었습니다. 이로 인해 사용자 계정이 위험에 노출될 수 있습니다.
사용자가 수행할 수 있는 작업은 에이전트 에 대해 허용되며 제한된 기능 출시하다 불가능합니다.
에이전트 연결을 해제하려면 사용자 자격 증명 교체해야 하며, 이로 인해 사용자 계정과 시스템이 중단됩니다.
피싱 및 재생 불가 자격 자격 증명 작동할 수 없습니다.
통과 인증
통과 인증 사용하지 마세요.
통과 인증 에서 에이전트 데이터베이스 에 액세스 위한 자격 증명 얻어 프록시에 전달합니다. 프록시는 자격 증명 유효성을 검사하고 자격 증명 MCP 서버에 전달합니다. MCP 서버는 자격 증명 사용하여 데이터베이스 에 연결합니다. 통과 인증 에는 다음과 같은 문제가 있습니다.
복사 및 재생 가능한 자격 증명 만 작동할 수 있으므로 연결이 보안 수준이 낮은 옵션으로 제한됩니다.
연결 체인은 시스템에서 숨겨집니다.
누구나 체인의 다음 부분을 생략할 수 있습니다.
데이터베이스 및 네트워크 보안
MCP 서버가 데이터베이스 에 안전하게 액세스 위해 사용하는 방법은 MCP 서버에 대한 액세스 보호하는 데 사용되는 방법과 별개입니다. 다음 섹션에서는 데이터베이스 및 네트워크 보안에 대해 설명합니다.
데이터베이스 인증 및 권한 부여
MCP 서버는 다음과 같은 데이터베이스 인증 방법을 지원합니다.
LDAP, X.509 인증서, OIDC 및 Kerberos 사용한 엔터프라이즈 인증 .
강력한 비밀번호 인증 제공하기 위한 기본 SCRAM-SHA-256 인증 .
서비스 계정 및 클러스터 간 통신을 위한mTLS 인증서 인증 .
MongoDB database 다음과 같은 권한 부여 방법을 지원합니다.
RBAC 를 사용하여 데이터베이스 액세스 제한합니다.
특정 데이터베이스, 개별 컬렉션 및 읽기, 쓰기 (write) 및 관리 작업과 같은 작업에 대한 액세스 제한하는 세분화된 데이터베이스 권한입니다.
팀을 위한 사용자 지정 데이터베이스 역할. 예시 들어, 분석 팀 에 대한 읽기 전용 액세스 및 운영 팀 에 대한 읽기-쓰기 액세스 .
컬렉션 액세스 제한하는 추가 컬렉션 보안.
네트워크 보안
네트워크 격리 를 위한 권장 사항:
인터넷에 직접 액세스 하지 않고도 비공개 VPC 또는 VNet 에 클러스터를 배포합니다.
VPC 피어링 및 비공개 엔드포인트 사용하여 cloud 비공개 네트워크에 대한 연결을 보호합니다.
특정 IP 주소 또는 CIDR 블록에 대한 데이터베이스 액세스 제한합니다.
방화벽 구성을 위한 권장 사항:
MongoDB 서버 포트 27017 에 대한 액세스 승인된 애플리케이션 서버로만 제한합니다.
수신 및 발신 네트워크 트래픽에 대한 보안 그룹 및 ACL 을 사용하여 cloud 방화벽 규칙을 구성합니다.
암호화되지 않은 포트를 비활성화하고 모든 연결에 대해 TLS 1.2+를 시행하다 .