Open Policy Agent (OPA) یکی از قدرتمندترین راهکارهای سیاستگذاری (Policy) در فضای API است که محبوبیت زیادی دارد و بهطور گسترده برای تعریف و اعمال سیاستها در مقیاس بزرگ استفاده میشود. پس از مدتها توسعه، OPA نسخه ۱.۰ معرفی شده و این خبر با مجموعهای از ویژگیهای جدید همراه است که قرار است این ابزار را برای آینده آمادهتر کند. با این نگاه، بیایید OPA 1.0 را بررسی کنیم و ببینیم چه تغییراتی در انتظار ماست.
OPA دقیقاً چیست؟
قبل از آنکه وارد جزئیات نسخه ۱.۰ شویم، لازم است بدانیم OPA در حال حاضر چه جایگاهی دارد.
OPA که یکی از پروژههای فارغالتحصیلشدهی CNCF است، یک موتور سیاستگذاری متنباز و همهمنظوره است که به توسعهدهندگان اجازه میدهد سیاستها را در مقیاس بزرگ و در محیطهای پیچیده، یکپارچه تعریف و اعمال کنند.
ایدهی پشت OPA ساده است:
به کمک یک زبان اعلامی به نام Rego که اجازه میدهد سیاستها بهصورت کد تعریف شوند، توسعهدهندگان میتوانند سیاستها را از یک منبع مرکزی برای اجرا در کل سیستمها فراخوانی کنند.
سادهترین راه برای تصور OPA این است که آن را یک منبع حقیقت مرکزی و معتبر بدانیم. به جای نوشتن سیاست درون هر سرویس، OPA اجازه میدهد سیاستها در لایههای مختلف نوشته شوند بدون اینکه به سرویس خاصی وابسته شوند. این معماری غیرمتمرکز و جدا از سرویسها باعث میشود OPA سبک، قابلاعتماد و سریع باشد. ترکیب این ساختار با مدیریت متمرکز سیاستها، OPA را به ابزاری یکپارچه و کاربرپسند برای توسعه و اجرای سیاست تبدیل کرده است.
پیشرفت توسعه OPA
گرچه هسته اصلی OPA همچنان قوی و قابلاعتماد است، اما این ابزار محصول شرایط و زمان توسعه خود نیز بوده است. نسخه ۱.۰ درست تقریباً پس از هشتمین سالگرد اولین کامیت OPA ارائه میشود. با اینکه چشمگیر است که بخش زیادی از کد اولیه هنوز قابل نگهداری است، این رویکرد «حفظ کردن بدون حذف» مشکلاتی ایجاد کرده است.
Anders Eknert، مبلغ فنی و مدافع توسعهدهندگان در Styra (شرکتی که OPA را نگهداری میکند)، در بلاگ خود به این مشکلات اشاره کرده و توضیح داده است که بخش زیادی از تغییرات نسخه ۱.۰ به ایجاد مسیر مهاجرت و پشتیبانی طولانیمدت مربوط میشود.
او میگوید:
«مهمترین مسئله این است که کاربران زمان کافی برای آماده شدن نسبت به تغییرات نسخه ۱.۰ داشته باشند و سازمانهایی که OPA و Rego را در محصولات خود یکپارچه کردهاند، مسیر مهاجرت مشخصی در اختیار داشته باشند.»
این تغییرات نیازمند ابزارهای جدید و مستندات فراوان است و Styra در هر دو زمینه سرمایهگذاری سنگینی کرده است. اگرچه میتوانید تغییرات را در GitHub ردیابی کنید، اما مستندات به شکل عمیقتری دلایل فنی و تأثیرات کاری هر تغییر را توضیح میدهند.
Eknert میگوید:
«سازمانهایی هستند که هزاران خط Rego را در محیط عملیاتی خود اجرا میکنند. با اینکه نسخه ۱.۰ شامل تغییرات شکننده (Breaking Changes) است، اما ابزارهایی ساختهایم که بخش عمده مهاجرت را خودکار میکنند و مواردی را که خودکار نیستند کاملاً مستند کردهایم.»
بهبود ساختار و عملکرد Rego
یکی از نقاط تمرکز Styra در نسخه ۱.۰، بهبود ساختار و کارکرد Rego بوده است. نتیجه این تلاش، یکدستتر شدن، قابلفهمتر شدن و هدفمندتر شدن Rego است.
Eknert توضیح میدهد:
«بیشتر ویژگیهای Rego v1 مدتها در دسترس بودند اما نیازمند دستوراتی مانند import future.keywords بودند. در v1 این نیاز حذف شده و برخی کلمات کلیدی نیز اجباری شدهاند. این به یکدست شدن زبان کمک میکند.»
بزرگترین پیشرفتها مربوط به کلمات کلیدی (Keywords) است که نقش مهمی در تعریف سیاستها دارند.
کلمات کلیدی جهانی (Universal Keywords)
در نسخههای قبلی، بعضی کلمات کلیدی مانند in و contains فقط با وارد کردن future.keywords قابل استفاده بودند.
در نسخه ۱.۰ این کلمات:
- جهانی شدهاند
- بدون import در دسترس خواهد بود
- باعث کاهش خطاهای ناخواسته میشوند
این موضوع به توسعهدهندگان امکان میدهد سیاستهای ریزدانهتری بنویسند بدون نگرانی از ناسازگاری نسخهها.
کلمات کلیدی اجباری (Mandatory Keywords)
یکی از مهمترین تغییرات، اجباری شدن if است.
این کلمه کلیدی در ساختار Rego نقش بنیادین دارد و با استانداردسازی آن، سیاستها:
- خواناتر
- قابل پیشبینیتر
- و کمابهامتر
میشوند.
همچنین contains نیز اکنون اجباری است که به رفع ابهام در قوانین چندمقداری کمک میکند.
افزایش امنیت با Bind شدن پیشفرض به localhost
یکی از مشکلات نسخههای قبل احتمال افشای سیاستها در اینترنت بود.
برای جلوگیری از این خطر، OPA 1.0 سرور خود را بهصورت پیشفرض روی localhost اجرا میکند.
البته همچنان میتوان با استفاده از flag مربوطه (–addr) آدرسهای دیگر را تنظیم کرد، اما حالت پیشفرض امنتر شده است.
Strict Mode بهطور پیشفرض (در اکثر موارد)
Strict Mode مجموعهای از بررسیهای ایمنی است که از اشتباهات جلوگیری میکند. در نسخه ۱.۰، بخش بزرگی از Strict Mode بهطور پیشفرض فعال است:
- جلوگیری از وارد کردنهای تکراری
- حذف توابع منسوخ
- رزرو شدن input و data به عنوان کلمات کلیدی
این تغییرات برای ایجاد محیطی قابلاعتمادتر و مناسبتر برای توسعه سیاستها ضروری بودهاند.
پشتیبانی از نسخههای قدیمی
با اینکه نسخه ۱.۰ شامل تغییرات شکنده است، Styra اطمینان داده است که کاربران قدیمی بدون نگرانی میتوانند مهاجرت خود را انجام دهند.
Eknert میگوید:
حتی بعد از انتشار ۱.۰ هم میتوان OPA را در حالت legacy mode اجرا کرد یا یک OPA را بهگونهای پیکربندی کرد که هم سیاستهای قدیمی و هم سیاستهای سازگار با نسخه جدید را همزمان اجرا کند.
این یعنی سازمانها مجبور به مهاجرت سریع نیستند و مسیر امن و کنترلشدهای پیش روی آنهاست.
مدرنسازی و استانداردسازی
این تغییرات، هر چند کوچک، اما نشاندهنده تحول بزرگ OPA هستند. نسخه ۱.۰ اولین نسخهای است که در آن تغییرات عمده و عمدتاً شکنده اعمال شده تا OPA برای آینده مدرنتر و استانداردتر شود.
اینکه Styra تصمیم گرفته چنین تغییراتی را—با وجود دشواریهای احتمالی—بهطور برنامهریزیشده انجام دهد و مسیر مهاجرت را نیز هموار کند، نشاندهنده بلوغ محصول و شناخت نیازهای صنعتی است.
