allow-xパターンを使ってセキュアなMCP開発をする
最近、個人的なClaude Code開発用に便利なMCPサーバーを作りました。
開発をする中でallow-xパターンというセキュリティと使い勝手を両立させるパターンを思いついたので共有します。
allow-xパターンとは何か
allow-xパターンとはほぼその名の通りで、「xというツールを起動を許可するためのallow-xというツールを作る」というパターンです。
筆者が作ったMCPサーバーの場合だと、start-processというプロセス起動を行うツールを許可する、allow-start-processというツールを作りました。
プロセス起動の許可は、コマンドと実行ディレクトリの組み合わせを単位としています。
つまり、同じ実行ディレクトリで同じコマンドであれば許可するという仕様です。
例えば、/home/projects/todo-app
というディレクトリでnpm run dev
であれば、一度許可すれば次回以降は確認をスキップできます。
任意のプロセスを確認無しで起動できるというのは重大なセキュリティリスクですが、一方で毎回確認が走るのも面倒です。
そういった場合に、allow-xパターンは非常に有用ではないかと思います。
注意点① 許可の判定基準の調整が必要
まず注意点の一つ目は、「許可の判定基準は自分で調整しなければいけない」ということです。
今回の例だと、「同じ実行ディレクトリで同じコマンドであれば許可する」という判定基準を設け、一致していれば問題無いことにしました。
これは、絶対完璧に安全とは言えません。
例えば、一度ディレクトリを消して作り直し、まったく別のコマンド体系を導入した時に、以前許可したコマンドが実行されては困るかもしれないからです。
しかし、そういったことはレアケースだろうと判断して、今回の判定基準に決めました。
結局、allow-xツールを使えばなんでもできてしまうなら、あまりセキュリティ対策としての意味を成しません。
できうる限りで、許可の範囲を限定することをお勧めします。
注意点② allow-xツールは無条件許可してはならない
今回、allow-start-processを導入した理由は、start-processを無条件許可したかったからです。
そして、allow-start-processは無条件で許可してはいけません。
これをやると、せっかく確保したセキュリティが無に帰します。
allow-xパターンは別に有名というわけでは無いので、この旨をREADMEなどに記載した上で頒布することをお勧めします。
Discussion