معماری امن MCP برای اتصال ایجنتهای هوش مصنوعی به سامانههای سازمانی
معماری امن MCP برای اتصال ایجنتهای هوش مصنوعی به سامانههای سازمانی
خلاصه: پروتکل MCP اتصال مدلهای زبانی به ابزارها، دادهها و سرویسهای سازمانی را استاندارد میکند؛ اما همین اتصال، سطح حملهای تازه ایجاد میکند. این مطلب بر طراحی امن سرورهای MCP، احراز هویت OAuth 2.1، حداقل سطح دسترسی، اعتبارسنجی ورودی و ثبت رویدادهای قابل ممیزی تمرکز دارد.
ایده اصلی:
ایده اصلی این است که MCP را نباید فقط یک پروتکل ارتباطی میان مدل و API بدانیم؛ این پروتکل در واقع مرز اعتماد میان کاربر، مدل، کلاینت، سرور MCP و سامانههای سازمانی است. سرور MCP باید هویت درخواستکننده را بررسی کند، توکن را برای مخاطب درست اعتبارسنجی کند و فقط ابزارها و scopeهای موردنیاز را در اختیار مدل بگذارد. هر ابزار باید ورودی محدود، خروجی قابل اعتبارسنجی و سطح ریسک مشخص داشته باشد. عملیات تغییردهنده داده یا دارای اثر مالی نیز باید به تأیید صریح کاربر یا سیاست سازمانی وابسته باشد.
چرا این موضوع مهم است؟:
ایجنتها برخلاف سرویسهای سنتی، بخشی از مسیر اجرای درخواست را بر اساس زبان طبیعی و محتوای زمینه انتخاب میکنند. در نتیجه یک توضیح ابزار آلوده، خروجی مخرب یک منبع داده یا توکن بیشاختیار میتواند به اجرای زنجیرهای از عملیات ناخواسته منجر شود. این موضوع برای تیمهای .NET، Python و پلتفرمهای سازمانی اهمیت زیادی دارد؛ زیرا MCP ممکن است به SQL Server، PostgreSQL، Git، سیستم تیکتینگ یا سرویسهای داخلی دسترسی پیدا کند. طراحی امنیتی از ابتدا، هزینه بازطراحی، نشت داده و پیچیدگی ممیزی را کاهش میدهد و امکان استفاده قابلکنترل از مدلهای مختلف مانند Claude، ChatGPT و Gemini را فراهم میکند.
مثال واقعی:
فرض کنید یک API مبتنی بر ASP.NET Core، سرور MCP مربوط به پشتیبانی مشتریان را میزبانی میکند. ایجنت میتواند سوابق یک مشتری را بخواند، اما تغییر وضعیت بازپرداخت یا حذف داده باید به ابزار جداگانهای با scope محدود و تأیید انسانی متصل باشد. سرور، توکن OAuth را با audience اختصاصی خود بررسی میکند و برای فراخوانی SQL Server از اعتبارنامه سرویس جداگانه استفاده میکند؛ بنابراین توکن کاربر مستقیماً به پایگاه داده یا API بالادستی عبور نمیکند. تمام فراخوانیها با شناسه نشست، کاربر، ابزار، پارامترهای پالایششده و نتیجه ثبت میشوند. اگر خروجی ابزار شامل دستور یا متن مشکوک باشد، پیش از بازگشت به مدل فیلتر و طبقهبندی میشود.
نکات کلیدی برای توسعهدهندهها:
- MCP را بهعنوان مرز اعتماد و سطح حمله مستقل طراحی کنید.
- برای اتصال HTTP از OAuth 2.1، PKCE و توکنهای audience-bound استفاده کنید.
- توکن ورودی MCP را به سرویسهای بالادستی عبور ندهید.
- ابزارها، scopeها و عملیات نوشتنی را حداقلی و تفکیکشده نگه دارید.
- لاگ، ممیزی، تأیید انسانی و پایش رفتار ابزارها را اجباری کنید.
گامهای پیشنهادی برای پیادهسازی:
- فهرست ابزارها، دادههای قابل دسترسی و سطح ریسک هر ابزار را تهیه کنید.
- سرور MCP را پشت HTTPS و لایه احراز هویت OAuth 2.1 قرار دهید.
- برای هر ابزار scope، schema ورودی و سیاست نرخ جداگانه تعریف کنید.
- اعتبارنامه سرویسهای داخلی را از توکن کاربر و مدل جدا نگه دارید.
- برای عملیات حساس، audit، تأیید انسانی و تست نفوذ ایجنتی اضافه کنید.
اشتباهات رایج:
- اعطای دسترسی کامل پایگاه داده به یک ابزار عمومی
- پذیرش هر توکن بدون بررسی audience و scope
- عبور مستقیم توکن کاربر به APIهای بالادستی
- اعتماد کامل به توضیحات ابزار و خروجی بازگشتی مدل
- ثبت توکنها، دادههای حساس یا پرامپت کامل در لاگها
نکات معماری:
- MCP Gateway را از منطق کسبوکار و اتصال مستقیم به دیتابیس جدا کنید.
- ابزارهای خواندنی و تغییردهنده را در مرزهای سیاستی جدا قرار دهید.
- برای هر نشست، tenant و کاربر، context و مجوز مستقل نگه دارید.
- یک لایه Policy Engine برای تصمیمهای حساس و step-up approval داشته باشید.
نکات امنیتی و کارایی:
- توکنهای کوتاهعمر، چرخش refresh token و ذخیرهسازی امن را اعمال کنید.
- timeout، circuit breaker، محدودیت اندازه ورودی و rate limit تعریف کنید.
- پارامترهای SQL را کاملاً پارامتری و خروجی ابزار را schema-based کنید.
- latency، نرخ خطا، هزینه مدل و فراخوانیهای غیرعادی ابزار را پایش کنید.
برداشت من از این مطلب این است که:
MCP باید با همان جدیتی طراحی شود که برای API Gateway، سیستم هویت و سرویسهای حساس سازمانی در نظر میگیریم. شروع درست، فهرستکردن ابزارها و تعیین سطح ریسک هرکدام است؛ سپس باید احراز هویت، scopeهای کوچک، audience binding، محدودیت نرخ، timeout و audit را بهصورت پیشفرض فعال کنیم. ابزارهای نوشتنی را از ابزارهای خواندنی جدا کنید و برای عملیات برگشتناپذیر تأیید انسانی یا سیاست قطعی قرار دهید. پیش از اتصال به داده واقعی، سناریوهای prompt injection، token theft، خروجی آلوده و خطای مدل را با تستهای خودکار و محیط ایزوله بررسی کنید.
منبع اصلی: https://genai.owasp.org/resource/a-practical-guide-for-secure-mcp-server-development/
لینکهای مرتبط:
https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
https://modelcontextprotocol.io/docs/tutorials/security/authorization
https://cheatsheetseries.owasp.org/cheatsheets/MCP_Security_Cheat_Sheet.html
https://owasp.org/www-project-mcp-top-10/
https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation
هنوز دیدگاهی تایید نشده است.