پرش به محتوای اصلی

اتصال امن دستیار هوش مصنوعی به وضعیت استقرارهای Coolify، گردش‌کارهای n8n و پایپ‌لاین‌های GitHub Actions بدون افشای توکن‌های زیرساخت

مدیریت زیرساخت و پایش سرویس‌ها با سرور Ops Hub MCP و تایید دوگانه‌ی تلگرام

وقتی یک بیلد در CI خطا می‌دهد یا یک گردش‌کار اتوماسیون در n8n متوقف می‌شود، مهندس نباید بین پنج تب مختلف جابه‌جا شود. ببینید چطور با طراحی پکیج ops-hub و پروکسی لبه، کل وضعیت زیرساخت را با ماسک‌گذاری خودکار اسرار و تایید تلگرامی به MCP آوردیم.

۶ آبان ۱۴۰۵• ۸ دقیقه مطالعه• نوشتهٔ سجاد سمائی
Sajjad Samaei, product designer and full-stack engineer

پایپ‌لاین امنیتی Policy در سرور Ops Hub MCP با انجماد آرگومان‌ها و تایید برون‌باندي تلگرام

پایپ‌لاین امنیتی Policy در سرور Ops Hub MCP با انجماد آرگومان‌ها و تایید برون‌باندي تلگرام
سرفصل‌های مقاله

در یک استودیوی مهندسی که همزمان چندین محصول پروداکشن (از پلتفرم‌های تجارت الکترونیک و املاک تا سیستم‌های مالی و کارگاهی) را روی کلاسترهای اختصاصی میزبانی می‌کند، عیب‌یابی یک رخداد معمولاً نیازمند سر زدن به چندین داشبورد مجزا است: بررسی وضعیت کانتینرها و لاگ‌های دیپلوی در Coolify، چک کردن وضعیت اجرای گردش‌کارها در n8n و مرور لاگ‌های GitHub Actions. اما اگر بخواهید این ابزارها را به دستیار هوش مصنوعی خود متصل کنید، دادن کلیدهای اصلی (Master API Keys) زیرساخت به یک کلاینت MCP ریسک امنیتی بزرگی است. راه‌حل ما در استودیو سجاد، مهندسی پکیج اختصاصی Ops Hub MCP برای مانیتورینگ زیرساخت با پروتکل mcp است.

چرا کلاینت هوش مصنوعی نباید مستقیماً به APIهای زیرساخت وصل شود؟

سرویس‌هایی مانند Coolify یا n8n توکن‌های مدیریتی بسیار قدرتمندی دارند. اگر یک کلید خام Coolify در کانفیگ کلاینت قرار بگیرد یا خروجی خام APIهای زیرساخت مستقیماً وارد کانتکست مدل زبانی شود، دو مشکل جدی رخ می‌دهد:

  1. نشت اسرار در خروجی لاگ‌ها: لاگ‌های استقرار یا جزئیات اجرای یک گردش‌کار n8n ممکن است حاوی رشته‌های اتصال دیتابیس، کلیدهای خصوصی، هدرهای Authorization یا متغیرهای محیطی حساس باشند.
  2. دسترسی به سرویس‌های خارج از محدوده: یک توکن سراسری می‌تواند لیست تمام سرورها و دیتابیس‌های داخلی را برگرداند، حتی سرویس‌هایی که قرار نیست دستیار هوشمند به آن‌ها دسترسی داشته باشد.

پایپ‌لاین شش‌مرحله‌ای Policy در هسته Ops Hub

در پکیج packages/ops-hub، هیچ ابزاری مستقیماً اجرا نمی‌شود؛ بلکه تمام درخواست‌ها از یک خط لوله امنیتی سخت‌گیرانه (createPolicy) عبور می‌کنند:

// خلاصه خط لوله امنیتی در packages/ops-hub/src/policy.ts // 1. اعتبارسنجی سخت‌گیرانه با Zod (.strict()) و رد کردن هرگونه کلید ناشناس const parsed = schema.safeParse(rawArgs ?? {}) if (!parsed.success) return fail(formatIssues(parsed.error)) // 2. کپی عمیق و منجمد کردن آرگومان‌ها (Deep Freeze) برای جلوگیری از تغییر وضعیت در حین اجرا const args = deepFreeze(structuredClone(parsed.data)) // 3. تطبیق نام اپلیکیشن یا گردش‌کار با لیست مجاز (Allowlist Resolution) const target = def.resolveTarget ? def.resolveTarget(args, config) : NO_TARGET

ویژگی‌های کلیدی این معماری عبارت‌اند از:

  • جداسازی شناسه‌های واقعی با لیست سفید (Allowlist): دستیار هوش مصنوعی هرگز UUIDهای داخلی Coolify یا شناسه‌های دیتابیس را نمی‌شناسد؛ بلکه فقط نام‌های مجازی تعریف‌شده در کانفیگ را صدا می‌زند و سرور آن‌ها را به شناسه‌های واقعی ترجمه می‌کند.
  • محدودکننده نرخ پنجره لغزان (Sliding Window Rate Limiter): هر ابزار خواندنی به حداکثر ۳۰ فراخوانی در دقیقه محدود شده است تا از ایجاد بار ناخواسته روی APIهای بالادستی جلوگیری شود.
  • پاکسازی خودکار اسرار و سقف حجم ۲۰ کیلوبایت: پیش از بازگشت هر خروجی به مدل، ماژول redact تمام الگوهای شبیه به توکن، رمز عبور، کلید خصوصی و هدرهای امنیتی را سانسور کرده و حجم پاسخ را روی ۲۰ کیلوبایت (capBytes) برش می‌دهد تا پنجره کانتکست مدل پر نشود.

گیت تایید برون‌باندی (Out-of-Band Approval) در تلگرام برای عملیات‌های اجرایی

در نسخه میزبانی‌شده (Hosted)، سرور Ops Hub به صورت پیش‌فرض کاملاً فقط‌خواندنی (Read-only) بالا می‌آید و ابزارهایی مانند ops_overview، github_ci_status، coolify_deployments و n8n_failed_executions را در اختیار مهندس قرار می‌دهد.

اما زمانی که ابزارهای عملیاتی (class: 'act' مانند راه‌اندازی مجدد سرویس یا اجرای مجدد دیپلوی) در محیط داخلی فعال می‌شوند، هیچ تصمیمِ مدل زبانی نمی‌تواند عملیات را تایید کند:

  1. سرور از روی آرگومان‌های منجمدشده، یک خلاصه دقیق و غیرقابل دستکاری می‌سازد (و اگر سرویس جزو سرویس‌های حساس باشد، پیشوند PROTECTED را به آن اضافه می‌کند).
  2. ماژول Approver یک پیام تعاملی با دکمه‌های تایید و رد (Inline Keyboard) به تلگرام مالک زیرساخت ارسال می‌کند و تا ۶۰ ثانیه منتظر پاسخ می‌ماند.
  3. تنها در صورتی که مالک از طریق تلگرام دکمه تایید را بزند، عملیات اجرا می‌شود. اگر دو بار پیاپی درخواستی رد شود، کل عملیات‌های اجرایی به مدت ۵ دقیقه قفل (lockoutMs) می‌شوند تا جلوی تلاش‌های مکرر یک عامل سرکش گرفته شود.

یکپارچه‌سازی دامنه و OAuth در لبه شبکه با Cloudflare Worker (`ops-proxy`)

برای اینکه دستیارهای ابری مانند Claude و ChatGPT بتوانند از یک دامنه واحد هم به ابزارهای استودیو (/api/mcp)، هم به پورتال کارفرما (/api/client/mcp) و هم به سرور زیرساخت (/mcp) متصل شوند، ما لایه ops-proxy را روی لبه شبکه طراحی کردیم.

این پروکسی هدرهای جعلی احتمالی کلاینت (x-ops-issuer, x-proxy-issuer) را حذف می‌کند، متادیتای RFC 9207 و مسیرهای /.well-known/oauth-protected-resource را به صورت پویا بازنویسی می‌کند و درخواست‌های زیرساخت را بدون افشای آدرس سرورهای اصلی به هسته Ops Hub هدایت می‌نماید.

طراحی ابزارهای مشاهده‌پذیری و DevOps مبتنی بر هوش مصنوعی نیازمند معماری دقیق امنیتی است. اگر قصد دارید زیرساخت ابری، پایپ‌لاین‌های CI/CD و سرویس‌های سازمانی خود را به شکل ایمن به دستیارهای هوشمند متصل کنید، به صفحه خدمات استودیو سجاد سر بزنید.

اشتراک‌گذاری مقاله

یادداشت‌های مرتبط

ادامهٔ مطالعه پیرامون تفکر محصول، دیزاین و مهندسی نرم‌افزار.

پروژه‌ای در ذهن دارید؟

بنویسید؛ ظرف کمتر از ۲۴ ساعت پاسخ می‌دهیم و قدم بعدی را با هم مشخص می‌کنیم.