تأمين Actuator وتخصيصه
تأمين Actuator وتخصيصه
يُعدّ Spring Boot Actuator أداةً بالغة النفع في بيئة الإنتاج — غير أنه يكشف افتراضيًا قدرًا كبيرًا من التفاصيل الداخلية لتطبيقك: متغيرات البيئة، وخصائص الضبط، وخريطة الـ beans، وتفريغات الخيوط، وغيرها. ترك هذه النقاط مفتوحة على مصراعيها يُشكّل خطرًا أمنيًا جسيمًا. في هذا الدرس ستتعلّم بالضبط أيّ نقاط تكشف، وكيف تحميها خلف Spring Security، وكيف تُضبط مخرجاتها بحيث لا تكشف إلا ما يحتاجه كل مستهلك فعلًا.
سطح الكشف الافتراضي
تتوفر نقاط Actuator عبر وسيطَين: HTTP وJMX. تختلف سياسات الكشف الافتراضية بينهما بشكل مقصود:
- HTTP: لا يُكشف إلا عن
healthوinfoافتراضيًا. - JMX: تُكشف جميع النقاط افتراضيًا (وعادةً ما يكون JMX محميًا بالجدار الناري).
القاعدة الأولى في تأمين Actuator هي: اكشف الحد الأدنى الذي تحتاجه فعلًا عبر HTTP. اضبط هذا في application.properties:
env أو heapdump أو shutdown على الإنترنت العام. تُدرج نقطة env كل خاصية محلولة — بما فيها الأسرار التي تتسرب عبر متغيرات البيئة. يحتوي تفريغ الكومة (heap dump) على كامل كومة JVM، ويمكن تحليله لاستخراج كلمات المرور والرموز المميزة وبيانات الجلسات. أما نقطة shutdown فتوقف العملية بالكامل.
نقل Actuator إلى منفذ منفصل
من القرارات المعمارية الجيدة تشغيل Actuator على منفذ مختلف لا يمكن الوصول إليه إلا من داخل شبكتك الخاصة أو VPN. لا يُوجّه موازن التحميل أي حركة خارجية إلى ذلك المنفذ:
بهذا الضبط يخدّم Actuator على المنفذ 8081 مقيّدًا بالـ loopback. لا يمكن للعملاء الخارجيين الوصول إليه بصرف النظر عن قواعد Spring Security. هذا هو الدفاع على مستوى الشبكة — يعمل حتى لو كان في ضبط الأمان خطأ ما.
حماية Actuator بـ Spring Security
حين يشترك Actuator في المنفذ نفسه مع تطبيقك الرئيسي يجب أن تحمي نقاطه بـ Spring Security. أضف الـ starter إن لم يكن موجودًا:
ثم اكتب bean من نوع SecurityFilterChain يُطبّق قواعد مختلفة على مسارات Actuator مقارنةً بمسارات التطبيق. في Spring Boot 3 / Spring Security 6 يُعدّ أسلوب lambda DSL هو الطريقة المثلى:
نقاط جوهرية في هذا الضبط:
/actuator/healthمسموح به لـpermitAll()كي تعمل مسابر موازن التحميل بدون بيانات اعتماد.- جميع مسارات
/actuator/**الأخرى تتطلب دورACTUATOR_ADMIN— الدور المخصص يفصل الوصول إلى Actuator عن صلاحيات الإدارة على مستوى التطبيق. - الترتيب مهم في
requestMatchers: القاعدة الأكثر تحديدًا/actuator/healthيجب أن تسبق الواسعة/actuator/**.
تخصيص نقطة health
يمكن لنقطة health أن تُظهر مستويات تفصيل مختلفة بحسب ما إذا كان المستدعي مُصادقًا. اضبط هذا في application.properties:
مسبار موازن التحميل غير المصادق يرى فقط:
بينما يرى عامل المراقبة المصادق التفاصيل الكاملة بما فيها قاعدة البيانات والقرص ومؤشرات الصحة المخصصة — دون كشف هذه التفاصيل للعالم الخارجي.
تصفية البيانات الحساسة من نقطة env
إن كان يجب كشف env على شبكة داخلية، يُطهّر Spring Boot تلقائيًا قيم الخصائص التي تتطابق مفاتيحها مع قائمة أنماط مدمجة مثل password وsecret وkey وtoken وcredentials، إذ تُستبدل القيمة بـ ****** في الاستجابة. يمكنك توسيع هذه القائمة بأنماطك الخاصة:
env قد يحاول إعادة بناء قيمة مُخفاة بالتجربة والخطأ إن كان يعرف صيغتها. اعتبر التطهير خط الدفاع الأخير — خطك الأول هو عدم كشف env أصلًا على شبكة عامة.
كتابة نقطة Actuator مخصصة
أحيانًا لا تغطي النقاط المدمجة ما تحتاجه. يمكنك كتابة نقطتك الخاصة باستخدام @Endpoint (HTTP وJMX معًا) أو @WebEndpoint (HTTP فقط). علّم العمليات بـ @ReadOperation أو @WriteOperation أو @DeleteOperation:
يصبح معرّف النقطة (releaseinfo) قسم URL. يُسجّله Spring Boot تلقائيًا ويُطبّق عليه قواعد الأمان ذاتها التي عرّفتها لـ /actuator/**. لا حاجة لأي ربط إضافي.
إعادة تسمية المسار الأساسي لـ Actuator
تغيير المسار الأساسي من /actuator إلى شيء أقل توقعًا يُضيف طبقة تمويه صغيرة لكنها حقيقية — المهاجمون الذين يُشغّلون مسوحات آلية بحثًا عن /actuator/env لن يجدوه:
أصبح مسار نقطة health الآن /internal/ops/health. حدّث أي أداة مراقبة أو ضبط مسبار موازن تحميل وفقًا لذلك.
الخلاصة
تأمين Actuator ليس إعدادًا واحدًا — إنه استراتيجية متعددة الطبقات ومدروسة:
- الكشف الأدنى: استخدم
exposure.includeلإدراج النقاط التي تحتاجها فقط. - العزل على مستوى الشبكة: اربط
management.server.portبعنوان خاص متى أمكن. - المصادقة مع Spring Security: اجعل
/actuator/healthعامًا للمسابر وأحمِ كل شيء آخر خلف دور مخصص. - التحكم في مستوى التفاصيل: اضبط
show-details=when_authorizedكي يرى المستدعون غير المصادقين ملخصًا فقط. - تطهير المفاتيح الحساسة: وسّع قائمة التطهير إن كنت تكشف
envداخليًا. - إعادة تسمية المسار الأساسي: يُضيف تمويهًا فوق المصادقة.
بهذه الضوابط في مكانها يصبح Actuator نافذة تشغيلية قوية وآمنة على خدمتك الجارية.