Hashicorp Vault و Apache APISIX: تعزيز أمان واجهات برمجة التطبيقات (API)
November 15, 2022
في الوقت الحاضر، أصبحت واجهات برمجة التطبيقات (API) الطريقة الأكثر شيوعًا لربط خدمات البرمجيات المختلفة. على سبيل المثال، يمكنك الحصول على حالة الطقس اليومية من خلال بعض واجهات برمجة التطبيقات الخاصة بالطقس، أو إعادة تغريد رسالة مضحكة من خلال واجهة برمجة التطبيقات الخاصة بتويتر. إن الترابط بين واجهات برمجة التطبيقات يجعل الإنترنت غنيًا ومتنوعًا، ولكنه في نفس الوقت يكشف عن الجانب المظلم - تهديدات واجهات برمجة التطبيقات.
تشير البيانات إلى أن واجهات برمجة التطبيقات تمثل الآن 90% من سطح الهجوم لتطبيقات الويب، مما يعني أن واجهات برمجة التطبيقات أصبحت واحدة من نواقل الهجوم الرئيسية. إذن، كيف يمكننا التخفيف من مخاطر واجهات برمجة التطبيقات؟
قد يختار الأشخاص نمط بوابة واجهة برمجة التطبيقات (API Gateway) في هندسة البرمجيات الحديثة للدفاع ضد هجمات واجهات برمجة التطبيقات. تعتبر بوابة واجهة برمجة التطبيقات نقطة الدخول لخدمة البرمجيات، وتوفر وظائف مثل موازنة الحمل، اكتشاف الخدمات، ومصادقة واجهات برمجة التطبيقات. Apache APISIX هي واحدة من أفضل بوابات واجهات برمجة التطبيقات، والتي تساعد المستخدمين على تعزيز أمان واجهات برمجة التطبيقات من خلال ميزات مثل المصادقة، التفويض، قائمة التحكم في الوصول (ACL)، وقائمة السماح/حظر عناوين IP. على سبيل المثال، تعتبر مصادقة JWT طريقة شائعة لحماية واجهات برمجة التطبيقات. حيث تطلب من مستهلكي واجهات برمجة التطبيقات إثبات هويتهم من خلال رمز ويب JSON (JSON Web Token). في مثل هذه الحالة، سيتم رفض طلبات واجهات برمجة التطبيقات التي لا تحتوي على بيانات الاعتماد أو التي تحتوي على بيانات اعتماد خاطئة من قبل Apache APISIX.
تتحمل Apache APISIX أيضًا مسؤولية توقيع رمز ويب JSON (والذي يتطلب سرًا للتوقيع). من وجهة نظر Apache APISIX، يصبح تخزين أسرار المستخدمين مسألة حرجة حيث أن المصادقة ستتعطل إذا تم تسريب الأسرار. بشكل افتراضي، تقوم Apache APISIX بحفظ الأسرار في etcd، وهو مركز التكوين لتكوينات Apache APISIX مثل المسار والخادم الأعلى (upstream).
لسوء الحظ، لم يتم تصميم etcd لحماية البيانات الحساسة. بمجرد أن يتمكن شخص غير أخلاقي من الوصول إلى مجموعة etcd، سيتم الكشف عن جميع البيانات الموجودة داخلها. لا يمثل هذا مشكلة كبيرة لكائن مسار APISIX، ولكنه سيكون قاتلاً للأسرار أو المفاتيح الخاصة لشهادات X509. من أجل حماية البيانات الحساسة بشكل أفضل، قامت Apache APISIX بدمج Hashicorp Vault منذ الإصدار 2.12.0. إذن، ما هو Hashicorp Vault؟
ما هو Hashicorp Vault؟
Hashicorp Vault هو بنية تخزين لحفظ أسرار المستخدمين بأمان (مثل بيانات اعتماد قاعدة البيانات، كلمات المرور، مفاتيح واجهات برمجة التطبيقات). يدعم التكامل مع العديد من الأنظمة الخارجية مثل Amazon Key Management Service و Google Cloud Key Management. تقنيًا، Hashicorp Vault هو نظام موزع يعتمد على بروتوكول إجماع Raft. سيتم حفظ بياناتك بنسخ متعددة، ولن تحتاج للقلق بشأن نقطة فشل واحدة للبيانات.
ولكن ما الذي يجعل Hashicorp Vault مميزًا؟ بمجرد بدء تشغيل خادم Hashicorp Vault، يكون في حالة مغلقة. لا يمكنك الوصول إلى أي بيانات إلا إذا قمت بفتح هذا الخادم. لفتح خادم Hashicorp Vault، تحتاج إلى استخدام أسهم المفاتيح (التي يتم إنشاؤها عند تهيئة خادم Hashicorp Vault باستخدام خوارزمية Shamir Secret Sharing) لتنفيذ عمليات الفتح بشكل متكرر. يعتمد عدد المرات على عدد أسهم المفاتيح ((X/2)+1 إذا كان عدد أسهم المفاتيح هو X). علاوة على ذلك، يمكنك إعادة إغلاق خادم Hashicorp Vault أثناء التشغيل إذا لاحظت أي علامات مشبوهة تشير إلى تعرضه لهجوم.
كيف تستخدم Apache APISIX Hashicorp Vault؟
حاليًا، تقوم Apache APISIX بدمج Hashicorp Vault في البرنامج المساعد jwt-auth. يتم استخدام البرنامج المساعد jwt-auth لإجراء مصادقة JWT.
المنطق الأساسي للتفاعل بين Hashicorp Vault و Apache APISIX هو:
- وصول طلب واجهة برمجة التطبيقات
- تشغيل البرنامج المساعد JWT Auth
- تحاول Apache APISIX جلب السر من Hashicorp Vault
- يعيد Hashicorp Vault السر، وتقوم Apache APISIX بتخزينه مؤقتًا
- تستخدم Apache APISIX السر للتحقق من صحة رمز ويب JSON
- تمرير المصادقة، ويتم توجيه طلب واجهة برمجة التطبيقات إلى الخدمة الخلفية
- إرسال استجابة واجهة برمجة التطبيقات مرة أخرى
يمكنك تكوين البرنامج المساعد jwt-auth في كائن مستهلك Apache APISIX مع خيار vault لإخبار Apache APISIX بتخزين/جلب السر من/إلى Hashicorp Vault. يعتبر مستهلك Apache APISIX تجريدًا لمستهلك واجهة برمجة التطبيقات. يمكن تكوين بيانات اعتماد واجهة برمجة التطبيقات على مستوى المستهلك.
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "jack",
"plugins": {
"jwt-auth": {
"key": "your-api-key",
"vault": {}
}
}
}'
يمكن تعيين تكوينات Hashicorp Vault في ملف config.yaml الخاص بـ Apache APISIX.
vault:
host: 'http://0.0.0.0:8200'
timeout: 10
token: 's.KUWFVhIXgoRuQbbp3j1eMVGa'
prefix: 'kv/apisix'
يجب الانتباه هنا إلى أن الرمز المميز (token) يجب أن يكون لديه إذن قراءة للمسار kv/apisix/consumer، وهو المكان الذي يحفظ فيه واجهة برمجة التطبيقات الإدارية لـ Apache APISIX الأسرار.
path "kv/apisix/consumer/*" {
capabilities = ["read"]
}
عند وصول طلبات واجهة برمجة التطبيقات من ذلك المستهلك، ستقوم Apache APISIX بمحاولة جلب السر من خادم Hashicorp Vault المكون (وتخزين النتيجة في الذاكرة المؤقتة) واستخدام هذا السر للتحقق من صحة رمز ويب JSON.
مستقبل التكامل بين Apache APISIX و Hashicorp Vault
هناك عدة أنواع من البيانات الحساسة في Apache APISIX، ولكن يمكن حفظ سر رمز ويب JSON فقط في Hashicorp Vault حاليًا. ومع ذلك، في المستقبل، يمكن حفظ جميع بيانات اعتماد واجهات برمجة التطبيقات، مثل مفتاح واجهة برمجة التطبيقات وكلمة مرور المستخدم، في Hashicorp Vault. بالإضافة إلى ذلك، يمكن أيضًا حفظ المفتاح الخاص للشهادة ومفاتيح واجهة برمجة التطبيقات الإدارية هناك. سيتم فصل كل هذه البيانات عن التكوينات. بهذه الطريقة، يتم تعزيز أمان واجهات برمجة التطبيقات ليس فقط لأنك تستخدم مصادقة واجهات برمجة التطبيقات، ولكن أيضًا لأن بيانات اعتماد واجهات برمجة التطبيقات محمية بشكل مناسب.