ما هي الأسرار، وكيفية التعامل معها في Java

مكتمل

الأسرار هي سلاسل من الأحرف التي لا ينبغي مشاركتها مع العالم الخارجي: يمكن أن تكون كلمات مرور قاعدة بيانات ومفاتيح تشفير خاصة ورموز مُميزة للوصول الشخصي وما إلى ذلك. لتعزيز الأمان، يعتبر العديد من الأشخاص أيضًا أن أي شيء يمكن أن يساعد المتطفل يجب اعتباره سرًا: على سبيل المثال، يمكن اعتبار عنوان URL لقاعدة بيانات الإنتاج الخاصة بك سرًا. يجب ألا تكون قاعدة بياناتك متاحة بشكل عام. الأساس المنطقي هو أن هذا النوع من المعلومات حساس بطبيعته، وكلما كانت المعلومات المتاحة في تعليماتك البرمجية أقل، كان ذلك أفضل.

ما هي الثقة المعدومة والأسرار المعدومة؟

مفهوم الثقة المعدومة هو أنه لا ينبغي الوثوق بأي شخص بشكل عشوائي، والسماح له بالوصول إلى موارد الشركة دون التحقق منه والتصريح له.

ينطبق هذا المفهوم على تطبيقات الويب أيضًا: لا يجب تخزين الأسرار الخاصة بها في تعليماتها البرمجية أو في ثنائياتها النهائية. وهذا ما نسميه الأسرار المعدومة.

يجب إدارة الأسرار بواسطة نظام خارجي، مع قواعد وصول صارمة والتحقق من الصحة، لتقليل مخاطر الهجوم.

لا تضع الأسرار في مستودعات Git

حتى لو كان مستودع Git خاصًا، فإن وضع أي سر في التعليمات البرمجية المصدر الخاصة بك يعتبر ممارسة سيئة:

  • سيعرف أي شخص لديه حق الوصول إلى مستودعك بياناتك الحساسة
  • يمكن لأي شخص لديه حق الوصول إلى التطبيق الثنائي الخاص بك استخراج الأسرار منه

أيضا، بمجرد تخزين سر في مستودع Git، يمكن للمهاجمين العثور عليه دائما من خلال البحث في محفوظات المستودع، حيث يمكن نسيانه بعد مرور وقت طويل.

حتى إذا بدا من العملي القيام بذلك، يجب عدم تخزين أي أسرار في مستودع التعليمات البرمجية المصدر الخاص بك. لتجنب هذه المشكلة، يمكنك استخدام الأدوات التلقائية التي تتحقق بانتظام من المستودع الخاص بك وترسل تحذيرات إذا وجدت كلمة مرور أو عنوان URL لقاعدة بيانات مخزنة عن طريق الخطأ.

استخدام متغيرات البيئة

أسهل حل لإدارة الأسرار هو استخدام متغيرات البيئة. فلها العديد من الفوائد:

  • إنها سهلة الاستخدام
  • وهي تعمل على جميع الأنظمة (حتى في الأنظمة المحلية)
  • الجميع يعرفها ويفهم كيفية عملها

ومع ذلك، فهي ليست آمنة بما فيه الكفاية: يمكن لجميع العمليات على نظامك قراءتها، ويتم كشفها بسهولة باستخدام ملحقات إدارة Java (JMX) على نظام Java.

نتيجة لذلك، غالبًا ما يُنظر إلى متغيرات البيئة على أنها خطوة أولى نحو الثقة المعدومة: فهي أكثر أمانًا من تخزين الأسرار مباشرة في التعليمات البرمجية المصدر، ولكنها تفتقر إلى قدرات الإدارة ويسهل أن يصل إليها المتطفلون.

استخدام أسرار Kubernetes

Kubernetes لديه مفهوم secrets، وهو حل جيد آخر. يمكن تحميل هذه الأسرار كملف على نظام ملفات التطبيق: يمكن لبرنامج Java قراءة هذا الملف بعد ذلك في وقت بدء التشغيل، للوصول إلى هذه الأسرار. بل إن أدوات مثل Spring Frameworks لديها دعم قياسي لهذه الآلية، مما يسمح لها باستخدام تلك الأسرار بطريقة سهلة وفعالة.

هذه الآلية أكثر أمانا من متغيرات البيئة، حيث يمكن قراءة هذه الملفات فقط من خلال العملية التي تتطلبها. كما أنها تستفيد من نظام Kubernetes البيئي الغني، ويمكن إدارتها بواسطة أدوات إدارة مختلفة، بما في ذلك الأدوات التي يوفرها مزود سحابة الخاص بك.

في حين أن أسرار Kubernetes هي حل جيد لـ Kubernetes، إلا أنها تقتصر أيضًا على Kubernetes، وتفتقر إلى قدرات إدارية متقدمة، بناءً على الأدوات المستخدمة لإدارة البنية الأساسية لـ Kubernetes.

استخدام مخزن أسرار

مخزن الأسرار، مثل Hashicorp Vault أو Azure Key Vault، هو برنامج متخصص لإدارة الأسرار. وهو يوفر نظام إدارة غني لتخويل المستخدمين، وتدوير مفاتيح الأمان، والتحقق من التطبيق الذي يمكنه الوصول إلى سر معين.

كما أنه يوفر واجهة برمجة تطبيقات خارجية، بحيث يمكن استخدامها على أي نظام. على سبيل المثال، يمكنك استخدام Azure Key Vault على جميع خدمات Azure، بما في ذلك الأجهزة الظاهرية أو خدمات تطبيقات Azure أو خدمات Azure Kubernetes أو Azure Spring Apps.

مخزن الأسرار هو الحل الأكثر أمانا لإدارة الأسرار، ولكنها تتطلب استخدام أداة مخصصة.