最小権限の原則
システムやユーザーには、その機能を実行するために必要最小限の権限のみを付与すべきという設計原則。
概要
過剰な権限は攻撃が成功した場合の影響範囲を広げる。最小限の権限から開始し、必要に応じて段階的に拡張するアプローチが推奨される。
適用例
OAuth/MCPのスコープ
悪い例:
scopes: ["*", "all", "full-access"]
良い例:
scopes: ["files:read"] // 最小限から開始
ファイルシステム権限
- 読み取り専用で十分なら書き込み権限を与えない
- 特定ディレクトリのみにアクセスを制限
コンテナ・プロセス
- 非rootユーザーで実行
- 必要なネットワークポートのみ開放
- サンドボックス環境での隔離
- Linux capabilitiesの制限(
--cap-drop=ALL) - 権限昇格の防止(
--security-opt=no-new-privileges)
詳細はDev Containerやコンテナ分離を参照。
なぜ重要か
- 攻撃の影響を限定: 侵害されても被害が最小限
- 事故を防止: 意図しない操作でも影響範囲が狭い
- 監査が容易: 何にアクセスできるか明確
MCPにおける適用
MCPサーバーはプロンプトインジェクションやツールポイズニングのリスクがある。最小権限を適用することで、攻撃成功時の被害を軽減できる。
- 読み取り専用のスコープから開始
- 必要に応じてWWW-Authenticateでスコープ拡張を要求
- 拡張時は明確な理由をユーザーに提示