このページでは、 MongoDB MCP サーバーのセキュリティに関するベストプラクティスについて説明します。
MCP サーバーの読み取り専用モード
The MCP サーバー --readOnly オプションは読み取り専用モードを有効にします。--readOnly は MCP サーバーが読み取り、接続、メタデータ操作を実行するツールのみを実行するように MCP サーバーを制限します。
デフォルトでは 、読み取り専用モードは有効になっておらず、 MCP サーバーはクラスター書込み操作を許可しています。セキュリティを向上させるには、MCP Server 読み取り専用モードを有効にし、読み取り専用のデータベースユーザーを使用してクラスターに接続します。
読み取り専用モードは、MCP サーバーで実行される誤ったまたは悪意のあるデータ変更を防止します。
読み取り専用モードを有効にするには、 MCPクライアントアプリケーションのJSON構成ファイルまたはコマンドラインに --readOnly を含めるか、MDB_MCP_READ_ONLY オペレーティング システムの環境変数を true に設定します。次のセクションでは、各方法の例を示します。
JSON構成ファイルの例
次の例では、Clude 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 クラスターに接続するための Unix 環境変数で MCP Server接続文字列を定義します。
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 Server 接続専用の読み取り専用データベースユーザーを作成します。
データベース
readロールを使用するか、データベースユーザー用のカスタム読み取り専用ロールを作成します。MCP Server ではデータベース
writeの認証情報は使用しないでください。
読み取り専用データベースアクセスのユースケースは次のとおりです。
データ分析: 変更リスクなしで本番データをクエリおよび分析します。
レポート作成: ライブ データからレポートを生成します。
モニタリング:データベースメトリクスとパフォーマンス インジケーターを調査します。
開発サポート: 書込みアクセスを許可せずに、開発者がデバッグ目的で本番データをクエリできるようにします。
さらに、 MCP サーバー --readOnly オプションを使用して、読み取り専用のデータアクセス を確保します。詳細については、前のセクション 「MCP サーバーの読み取り専用モード」を参照してください。
本番環境には、読み取り専用のデータベースアクセスを推奨しています。ただし、次のユースケースについては、書込みアクセスを制限することを検討してください。
開発とステージング環境。
正しい認可で管理タスクを実行します。
非クリティカル データを持つ分離されたテスト クラスター。
MCP サーバー配置オプション
MCP サーバーはローカルまたはリモートで配置できます。
ローカル MCP サーバー
ローカル MCP サーバーでは、MCP サーバーとクライアントアプリケーションは同じコンピューター上で実行されます。
ローカル MCP サーバーはインストール環境の制御を可能にします。
構成と依存関係: MCP Server ソフトウェアの依存関係を管理します。MCP Server パラメーターとデータベース接続を定義するには、ローカル コンピューター上の ファイルを編集します。
認証情報のセキュリティ: APIキーと接続文字列の機密情報は、構成ファイルまたは環境変数としてローカルに保存されます。認証情報を保護します。
ソフトウェアの手動更新: 新しい MCP Server バージョンが利用可能になると、ユーザーは MCP Server ソフトウェアをダウンロードしてインストールできます。これにより、ユーザーは異なるバージョンの MCP サーバーを実行する可能性があります。
MCP サーバーをローカルに配置する場合
次のシナリオでローカル MCP サーバーを配置します。
コンピューター上で MCP Server を使用を開始するには簡単な構成が必要です。
独自の設定と更新を管理します。
異なるトランスポート プロトコルを使用
MCP トランスポート プロトコルは、クライアントアプリケーションと MCP サーバー間のメッセージ通信を可能にします。ローカル MCP サーバーの場合は、次のいずれかの転送プロトコルを使用します。
STDIO(標準入力/出力):クライアントアプリケーションはMCP サーバーを子プロセスとして起動し、オペレーティング システムの標準パイプ(
stdinとstdout)を使用して通信します。MongoDB は、ローカル配置には STDIO トランスポートプロトコルを推奨しています。Streamable HTTP: MCP Server は
localhostでサーバーを起動します。クライアントはStreamable HTTPリクエストを使用して MCP サーバーと通信し、永続的なセッションを作成します。インタラクションの状態とコンテキストを維持するために、一意のセッションID がメッセージ ヘッダーに含まれています。
警告
Streamable HTTPでは、MCP サーバーはデフォルトで localhost
(127.0.0.1) にバインドされます。これにより、MCP サーバーは同じコンピューターからの接続のみを受け入れるようになります。
0.0.0.0 にバインディングすると MCP Server がローカル ネットワーク全体に公開されるため、同じネットワーク上の他のデバイスが MCP Server にアクセスできる可能性があります。これはセキュリティ上のリスクであり、データベースコンテキストへの不正アクセスを許可する可能性があります。localhost の外部で MCP サーバーを公開する必要がある場合は、「 MCP サーバーへの接続の保護 」で説明されているセキュリティ認証を実装してください。
異なるトランスポートプロトコルの利点と利点
STDIO は、クライアントアプリケーションと MCP サーバー間に直接リンクを作成します。STDIO は、アプリケーションと MCP サーバーが密接にリンクされているため、1 つのアプリケーションのみが MCP サーバーと通信する場合に最適です。STDIO を使用する場合、MCP サーバーはクライアントアプリケーションと同じコンピューター上で実行する必要があります。
Streamable HTTPは柔軟で、コンピューター上のプライベートサーバーのように動作します。複数のクライアントが MCP サーバーに接続できます。Streamable HTTPは簡単にテストできます。STDIO とは異なり、Streamable HTTPでは MCP サーバーをリモートに配置し、ローカルに配置することもできます。
リモート MCP サーバー
リモート MCP Server 配置では、MCP サーバーはクラウド内のコンピューターまたは オンプレミスサーバー上で実行されます。
クライアント アプリケーションはネットワーク経由で MCP サーバーに接続し、 Streamable HTTPを使用します。これにより、複数のユーザー、自動化システム、アプリケーション、 AIエージェントがアクセスできる中央共有環境が提供されます。
MCP Server のリモート配置については、次の点を考慮してください。
リモート配置には追加のセキュリティ リスクがあり、安全な構成が必要です。
少なくとも、 ネットワーク分離、 MCP サーバーへの認証、およびクラウドまたはオンプレミスで シークレット マネジメントを設定する必要があります。
ストリーム可能なHTTPのセキュリティ ベストプラクティス
リモート MCP サーバー配置での通信には通常、Streamable HTTPが使用されます。Streamable HTTPの次の点を考慮してください。
接続用に MCP サーバーを
localhost(127.0.0.1)にバインドするようにします。これがデフォルトの です。localhostにバインドするには、管理者は MCP サーバーの前にリバース プロキシを追加する必要があります。例、 は、Nginx リストリーム プロキシを使用します。MCP サーバーは、トラフィックが MCP サーバーに到達する前に悪意のあるトラフィックを停止するために逆プロキシに依存しています。
リモート MCP サーバーの利点
一括管理: セキュリティ ポリシー、ログ記録、バージョン管理、アクセス制御が 1 つの場所で管理されます。
オートメーションをサポートします。 CI/CD パイプライン、自動テストフレームワーク、およびその他のエージェントは、自動ワークフローのクライアントとして動作できます。
リモート MCP サーバーの利点
追加のハードウェア: には専用のサーバーとネットワーク インフラストラクチャが必要です。
複雑なセキュリティ: ネットワーク セキュリティ、認証、認可、 TLS 証明書管理が必要です。
単一障害点: リモートサーバーがクラッシュすると、すべてのユーザーに影響します。クリティカルな環境では高可用性の実装を検討してください。
リモート MCP サーバーのセキュリティ
すべての MCP システムでは、MCP Server への認証は、MCP サーバーがアクセスを提供するサービスへの認証とは別に実行されます。MongoDB MCP Server は、 MCP サーバーが保護するMongoDBインスタンスへの静的に構成されたアクセスを提供します。
MCP サーバーはインバウンド認証または認可機能を提供していないため、認証と認可を構成する必要があります。MCP Server はネットワーク上で利用できるため、これはリモート MCP Server 配置の場合に特に重要です。
次の図は、認証ワークフローを示しています。

MCP サーバーへの接続の保護
MCP サーバーへのすべてのインバウンド接続は保護されている必要があります。そうしないと、データベースが公開されます。
次のセクションで説明されているように、 MCP サーバーとデータベース間の接続が完全に保護されている場合でも、接続を保護する必要があります。これは、 MCP サーバーが別の 接続点を提供するためです。
MCP サーバーへのインバウンド接続を保護するには、MCP サーバーと並行して動作する外部サービスが必要です。これには通常、インバウンド接続に対してアクセス制御を強制するために、リバースプロキシが必要です。プロキシは、受信リクエストのアクセス権を特定の MCP Serverインスタンスにマッピングします。このインスタンスは、 MCP Server または Atlas クラスターにローカルにMongoDBデータベースインスタンスに接続するように静的に構成されています。
MCP サーバーを保護する他の方法も可能です。簡単にするために、次のセクションではプロキシ パターンの使用を前提としています。
委任された認可
委任認可では、ユーザーは権限のサブセットをエージェントに委任します。MongoDB、MCP サーバーで OAuth 2.1 の使用が推奨されています。
MCP サーバーで動作するには、認証されたユーザー アカウントによって保護された OAuth 認証サーバー(AS)と、OAuth リソース サーバー(RS)として動作する MCP サーバーの前にプロキシが必要です。エージェントはOAuthクライアントとして動作します。
OAuth の削除は次のように動作します。
エージェントは MCP サーバーへのアクセスをリクエストします。MCP サーバーはプロキシによって保護されています。
プロキシはエージェントをASに送信し、認可リクエストを開始します
ユーザーは AS にログインし、MCP サーバーを保護するプロキシである RS にアクセスするようエージェントに許可します。
エージェントには、RS にアクセスするためのアクセス トークンが付与されます。
エージェントはアクセス トークンを使用して、プロキシ経由で MCP サーバーを呼び出します。
プロキシはアクセス トークンを検証し、MCP サーバーへの呼び出しを許可します。
MCP Server はプロキシリクエストを受信し、静的に構成された安全な接続を介してデータベースに対して コマンドを実行します。
MCP サーバーとデータベースはアクセス トークンを読み取りません。プロキシは MCP サーバーを保護するために信頼されています。プロキシをバイパスすると、MCP Server および MCP サーバーがアクセスできるデータベースにアクセスするリスクが生じます。
トークンの形式は非表示です。JWT は、AS によって発行されたトークンをプロキシが独立して検証できる一般的な形式です。
直接認証
直接認証は推奨されません。
直接認証では、エージェントはプロキシに認証情報を提供します。プロキシは資格情報を認証します。認証情報は、エージェントを識別するAPIキーまたはその他の認証情報でなくてはなりません。このパターンは簡単ですが、次の問題があります。
エージェントのみが識別され、エージェントが動作しているユーザーは識別されません。
MCP サーバーを通じて誰がどのアクションを実行しているかを監査する方法はありません。
アクセスは通常、すべてのユーザーに対して一元的に制御され、またはプロキシに対して直接制御されます。
MCP セキュリティ ソフトパターン
次のセクションでは、使用しないでください。
ユーザー権限
ユーザー権限を使用しないでください。
ユーザー権限を使用すると、ユーザーはエージェントに認証情報を直接提供します。エージェントは、認証のためにプロキシに認証情報を送信します。ユーザーの権限を持ったユーザーには次のような問題があります。
ユーザーのみが識別されます。エージェントがユーザーに代わって実行するという結果は隠ぺいされます。
ユーザー認証情報は中間システムにリークされます。これにより、ユーザーアカウントがリスクになります。
ユーザーが実行できるアクションはエージェントに許可されており、機能の限定的なリリースは不可能です。
エージェントを切断するには、ユーザー認証情報のローテーションが必要になるため、ユーザーのアカウントとシステムは中断されます。
ピアリング不可以外の認証情報および再生不可の認証情報は動作しません。
パスループ認証
パス経由認証を使用しないでください。
パス経由認証では、エージェントがデータベースにアクセスするための認証情報を取得し、プロキシに渡します。プロキシは認証情報を検証し、その認証情報を MCP サーバーに渡します。MCP サーバーは認証情報を使用してデータベースに接続します。パス経由認証には次のような問題があります。
コピー可能で再生可能な認証情報のみが動作するため、接続が低セキュリティ オプションに制限されます。
接続チェーンは、システムから非表示です。
連鎖の次の部分を省略することは、誰でも可能です。
データベースとネットワークのセキュリティ
MCP サーバーがデータベースに安全にアクセスするために使用する方法は、 MCP サーバーへのアクセスを保護するために使用される方法とは別です。次のセクションでは、データベースとネットワークのセキュリティについて説明します。
データベースの認証と認可
MCP サーバーは次のデータベース認証メソッドをサポートしています。
LDAP、X.509 証明書、OIDC、Kerberos を使用したエンタープライズ認証。
強力なパスワード認証を提供するためのデフォルトの SCRAM-SHA-256認証。
サービス アカウントとクラスター間通信の mTLS 証明書認証。
MongoDBデータベース は次の認可メソッドをサポートしています。
RBAC :データベースアクセスを制限します。
特定のデータベース、個々のコレクション、および読み取り、書込み (write)、管理アクションなどの操作へのアクセスを制限するための詳細なデータベース権限。
チームのカスタムデータベースロール。例、 分析チームは読み取り専用アクセスで、操作チームは の読み取りと書込みアクセスがあります。
コレクションへのアクセスを制限するための追加のコレクションセキュリティ。
ネットワークセキュリティ
ネットワーク分離に関する推奨事項 :
インターネットに直接アクセスせずに、プライベートVPCまたはVNetにクラスターを配置します。
VPCピアリングとプライベートエンドポイントを使用して、クラウドプライベート ネットワークへの接続を確保します。
特定のIPアドレスまたは CIDR ブロックへのデータベースアクセスを制限します。
ファイアウォール構成に関する推奨事項は以下のとおりです。
MongoDBサーバーポート 27017 へのアクセスは、承認されたアプリケーションサーバーのみに制限します。
受信ネットワーク トラフィックおよび送信ネットワーク トラフィックに対して、セキュリティ グループとACLを使用してクラウドファイアウォールルールを構成します。
暗号化されていないポートを無効にし、すべての接続に対して TLS 1.2+ を強制します。
Atlas API権限
実装の Atlas ユーザーに最小の Atlas API権限を割り当てます。通常は、プロジェクト ロールのみを使用し、管理または表示が必要な特定のプロジェクトにのみロールを割り当てます。
注意
組織内のすべてのプロジェクトと設定を管理する必要がある場合を除き、Organization Owner ロールは使用しないでください。 Organization Owner ロールはほとんど必要なく、セキュリティ上のリスクになる可能性があります。
次の表は、一般的なタスクに割り当てる最小特権を持つ Atlas ロールを示しています。
実行するタスク | 割り当てる最小特権のロール | ロール レベル |
|---|---|---|
組織とプロジェクトを一覧表示する |
| 組織 |
新しいプロジェクトの作成 |
| 組織 |
プロジェクト内のクラスターとデータベースの表示 |
| プロジェクト |
プロジェクト内でのクラスターの作成と管理 |
| プロジェクト |
プロジェクトアクセス リストの管理 |
| プロジェクト |
データベースユーザーの管理 |
| プロジェクト |
Atlas ロールの詳細については、「 Atlas ユーザーロール 」を参照してください。