تیپ #۳۶

محیط ایزوله برای کد ایجنت: نه شبکه، نه راز، نه هاست

هرگز نگذارید ایجنت کدی را که خودش نوشته، در همان پروسه و همان کانتینر و با همان دسترسی‌های خودش اجرا کند. محیط اجرا باید یک سندباکس یک‌بارمصرف باشد: شبکه بسته به‌صورت پیش‌فرض، فایل‌سیستم فقط‌خواندنی، کاربر غیر root، قابلیت‌های اضافی لینوکس حذف‌شده و سقف مشخص برای CPU، حافظه و زمان؛ این‌طوری یک حلقه بی‌پایان یا دستوری که از راه تزریق پرامپت جا خوش کرده، داخل همان جعبه 🔒 می‌ماند و به هاست نمی‌رسد. برای کد واقعاً غیرقابل‌اعتماد سراغ مرزهای قوی‌تر مثل gVisor یا میکروVM بروید و کلیدهای API را بیرون از سندباکس نگه دارید و فقط از طریق پروکسی خروجی تزریق کنید.

توضیح کامل‌تر

وقتی ایجنت اجازه دارد کد بنویسد و اجرا کند، هر ورودی بیرونی مثل یک README، خروجی یک API یا محتوای یک صفحه وب می‌تواند به دستور اجرایی تبدیل شود؛ این همان مسیر کلاسیک تزریق پرامپت تا اجرای کد از راه دور است. جداسازی چند لایه دارد: در ساده‌ترین حالت یک پروسه جدا، بعد یک کانتینر با کاربر غیر root و بدون شبکه، و در سطح قوی‌تر یک کرنل فضای کاربر مثل gVisor یا یک میکروVM مثل Firecracker که سطح تماس با کرنل هاست را به حداقل می‌رساند. نکته کلیدی این است که سندباکس باید یک‌بارمصرف باشد و بعد از هر اجرا دور انداخته شود تا اثر کد مخرب به اجرای بعدی سرایت نکند. کلیدهای API و توکن‌ها هم نباید داخل سندباکس باشند؛ به‌جای آن‌ها یک پروکسی خروجی با فهرست دامنه‌های مجاز بگذارید و راز را همان‌جا تزریق کنید. یک مثال ملموس: ایجنت برای دیباگ یک تست، پکیجی را نصب می‌کند که در اسکریپت نصبش خواندن متغیرهای محیطی و ارسال آن‌ها به یک دامنه بیرونی خوابیده است؛ اگر شبکه بسته باشد و کلیدی داخل جعبه نباشد، این حمله بی‌اثر می‌شود. در نهایت سقف CPU، حافظه و زمان اجرا را هم تعیین کنید تا یک حلقه بی‌پایان کل بودجه و ظرفیت شما را نخورد.

نکته پیشرفته
← بازگشت به همهٔ نکته‌های روز