MCP (Model Context Protocol) のセキュリティ -【第2回】MCPにおける認証と認可の仕組み

## 1. はじめに
MCP (Model Context Protocol) のセキュリティについて学ぶブログシリーズの第2回へようこそ。

前回の[「MCPセキュリティの基本と重要性」](https://qiita.com/QueryPie/items/6211cdc6d7c55697221d)では、なぜMCPのセキュリティ対策が重要なのか、その基本的な考え方について共有しました。大切な情報（モデルやデータ）を扱うMCPでは、不正なアクセスや情報漏洩を防ぐための対策が不可欠です。

今回は、そのセキュリティ対策の中でも特に重要な **「認証」** と **「認可」** の仕組みについて、わかりやすく説明していきます。この2つは、MCPを利用する際に「誰が」「何をして良いのか」を正しく管理するための基本となります。

## 2. MCPにおける基本的な認証と認可の仕組み
「認証」と「認可」、少し難しい言葉に聞こえるかもしれませんが、私たちの身の回りにもよくある考え方です。

#### - 認証 (Authentication): 「あなたは誰ですか？」を確認すること
例えるなら、ホテルのフロントでのチェックインです。予約した本人であることを証明するために、身分証明書（パスポートや運転免許証など）を提示します。これが「認証」です。相手が本当に名乗っている本人であるかを確認するプロセスです。
#### -認可 (Authorization): 「あなたは何をして良いですか？」を決めること
ホテルの例で続けると、チェックインが無事に済むと（認証されると）、部屋の鍵（カードキーなど）が渡されます。この鍵は、あなたが予約した特定の部屋のドアを開ける権限を与えますが、他の人の部屋や関係者以外立ち入り禁止のエリアには入れません。これが「認可」です。認証された人が、具体的にどのような操作やアクセスを行う権限を持っているかを決定し、許可するプロセスです。
#### 【シナリオ例】 MCPにおける認証と認可の流れ

では、MCPの利用シーンに当てはめて考えてみましょう。あるユーザーが、特定の機械学習モデルの情報をMCPサーバーから取得しようとするシナリオを想像してください。

**1. アクセス要求:** ユーザーは、自分のコンピューターからMCPサーバーに接続しようとします。「モデルAの情報をください」と要求を送るイメージです。

**2. 認証:** MCPサーバーは、まず「あなたは本当にアクセス権のあるユーザーですか？」と確認します。最も基本的な方法として、ユーザーにIDとパスワードの入力を求めます。ユーザーが入力した情報が、サーバーに登録されている情報と一致すれば、「認証成功」となります。これは、ホテルのフロントで本人確認ができた状態と同じです。

**3. 認可:** 認証に成功したからといって、何でもできるわけではありません。次にMCPサーバーは、「このユーザー（認証された人）は、要求されたモデルAの情報を見る権限を持っていますか？」を確認します。
- もし、ユーザーにモデルAの読み取り権限が与えられていれば、「認可」され、モデルAの情報がユーザーに送られます。
- もし、書き込み権限まで持っていれば、情報の更新も許可されるかもしれません。
- しかし、もしモデルAへのアクセス権限が全くない場合や、そもそも存在しないモデルを要求した場合などは、「認可」されず、アクセスは拒否されます。「この部屋の鍵では、そのドアは開けられません」という状態です。

![MCPにおける認証と認可の流れ - visual selection (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4058228/22dcdbd7-821d-431a-b693-0154bbe91a08.png)

このように、MCPではまず「認証」で相手を確認し、次に「認可」で許可された操作だけを実行させることで、不正なアクセスや操作を防いでいます。最も身近な認証方法はIDとパスワードの組み合わせですが、これだけでは十分でない場合もあります。

## 3. より安全な認証方式
IDとパスワードによる認証は手軽ですが、パスワードが他の人に知られてしまう（漏洩する）リスクが常に伴います。もしパスワードが盗まれれば、悪意のある第三者が本人になりすましてMCPにアクセスできてしまいます。

そこで、より安全性を高めるための認証方式がいくつか存在します。ここでは代表的な例として **「トークンベース認証」** を簡単に紹介します。
#### トークンベース認証とは？

遊園地のアトラクション乗り放題のリストバンドを想像してみてください。

1. 最初に窓口で入場券を見せて本人確認（認証）を済ませると、リストバンドを巻いてもらえます。
2. その後は、各アトラクションの入り口でリストバンドを見せるだけで、「乗り放題の権限がある人だ」と確認され、アトラクションに乗ることができます。いちいち入場券を見せる必要はありません。

トークンベース認証もこれと似ています。

1. ユーザーは最初にIDとパスワードなどで認証を受けます。
2. 認証に成功すると、MCPサーバーは一時的な電子的な通行証のようなもの、**「トークン」** を発行します。このトークンには、ユーザーの情報や有効期限などが含まれています。
3. 以降、ユーザーがMCPサーバーに何か要求（リクエスト）を送る際は、パスワードの代わりにこの「トークン」を提示します。
4. サーバーは受け取ったトークンが有効かどうか（改ざんされていないか、有効期限が切れていないかなど）を確認し、問題なければアクセスを許可します。

![トークンベース認証もこれと似ています。 - visual selection.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4058228/d1861129-b212-4fbf-a611-33bd7dc253cf.png)

#### トークンベース認証の利点:

- **パスワードを毎回送らなくてよい:** 通信の途中でパスワードが盗まれるリスクを減らせます。
- **有効期限を設定できる:** トークンには有効期限があるため、万が一トークンが盗まれても、永久に悪用されるリスクを低減できます。
- **柔軟な権限管理:** トークンに含める情報によって、より細かいアクセス制御（認可）も可能になります。

トークンベース認証は、現代の多くのウェブサービスやAPIで採用されている、より安全な認証方式の一つです。

## 4. 不正アクセスを防ぐための基本的な対策
認証と認可の仕組みを理解した上で、不正アクセスを防ぐために、私たちユーザー側と、MCPを提供するサーバー側（管理者）でできる基本的な対策をいくつかご紹介します。

#### ユーザー側の対策:
- **複雑で推測されにくいパスワードを設定する:** 誕生日や簡単な単語などは避け、大文字・小文字・数字・記号を組み合わせた、ある程度の長さを持つパスワードを設定しましょう。
- **パスワードを定期的に変更する:** 万が一漏洩した場合のリスクを低減するために、定期的な変更が推奨されます。
- **パスワードを使い回さない:** 他のサービスで使っているパスワードと同じものをMCPで使うのは避けましょう。一つのサービスで漏洩すると、他のサービスにも不正アクセスされる可能性があります。
- **不審なログイン通知などを確認する:** もしサービスにログイン通知機能があれば有効にし、身に覚えのないログインがないか注意しましょう。

#### サーバー（管理者）側の対策:
- **アクセスログの監視:** 誰が、いつ、どの情報にアクセスしたかの記録（ログ）を監視し、不審な動きがないかチェックします。
- **アカウントロックアウト機能:** 何度もパスワードを間違えるなど、不正ログインの試行が疑われる場合に、一時的にアカウントをロックする機能です。
- **強固な認証方式の導入:** パスワード認証だけでなく、トークンベース認証や、さらに安全な多要素認証（MFA：パスワードに加えて、SMSコードや認証アプリなど、複数の要素で本人確認を行う方式）の導入を検討します。

これらの対策は基本的なものですが、実施することで不正アクセスのリスクを大きく減らすことができます。

## 5. まとめ
今回は、MCPセキュリティの重要な要素である「認証」と「認可」について、基本的な仕組みと、より安全な方法、そして基本的な対策について解説しました。

- **認証** は「相手が誰か」を確認するプロセス。
- **認可** は「その人に何をする権限があるか」を決定するプロセス。

この二つが正しく機能することで、「MCPは権限のないユーザーからのアクセスを防ぎ、登録されたユーザーにも許可された範囲でのみ操作を許す」という安全な状態を保つことができます。パスワード認証だけでなく、トークンベース認証のような、より安全な方式の導入も重要です。

さて、認証と認可によって「正しい人が、許可された操作だけを行える」状態になったとしても、まだ安心はできません。ユーザーとMCPサーバーの間でやり取りされる「通信の内容」そのものが、途中で盗み見られたり、改ざんされたりする危険性があります。

そこで次回、**第3回「通信の安全性を高める！MCPにおける暗号化の基礎」** では、この通信の内容を保護するための「暗号化」の技術について、基本的な考え方を説明していきます。