كيفية استخدام Secret Manager مع API Gateway
Shirui Zhao
January 13, 2023
ما هو السر؟
في بيئة تكنولوجيا المعلومات، السر هو بيانات اعتماد مميزة غير بشرية، تُستخدم عادةً من قبل الأنظمة والتطبيقات من أجل المصادقة أو كمدخل لخوارزميات التشفير. على سبيل المثال، كلمات المرور اللازمة لتوصيل برنامج بقاعدة بيانات، المفاتيح/الشهادات للاتصال المشفر، كلها تعتبر من الأسرار.
تشمل الأنواع الشائعة من الأسرار:
- مفاتيح التشفير
- بيانات اعتماد الوصول إلى خدمات السحابة
- مفاتيح واجهة برمجة التطبيقات (API)
- رموز الوصول
- مفاتيح SSH (Secure Shell)
مدير الأسرار
يقوم مدير الأسرار بتخزين واسترجاع وتدوير ومراجعة الأسرار طوال دورة حياتها. HashiCorp Vault هو أحد خدمات مدير الأسرار الأكثر استخدامًا، ومبدأ عمله كما يلي (الصورة من الموقع الرسمي لـ HashiCorp):
بالإضافة إلى HashiCorp Vault، تقدم مزودي السحابة مثل AWS وGoogle وAzure أيضًا خدمات مدير الأسرار.
استخدام مدير الأسرار لبناء التطبيقات لا يعزز الأمان فحسب، بل يوفر أيضًا الوظائف التالية:
- يسمح بتحديث الأسرار بسهولة عبر أجهزة متعددة دون التأثير على التطبيق.
- لا يحتاج المطورون إلى الاهتمام كثيرًا بتخزين الأسرار ويمكنهم التركيز أكثر على منطق الأعمال نفسه.
- يمكن تدوير الأسرار وإلغاؤها دون إعادة نشر أو مقاطعة التطبيقات النشطة.
- يوفر مدير الأسرار سجلات مراجعة مرنة ومفصلة يمكنها تتبع تاريخ جميع وصولات المستخدمين وتلبية متطلبات المراجعة والامتثال بسهولة أكبر.
استخدام مدير الأسرار في بوابة API
كمدخل لحركة مرور الأعمال، تحتوي بوابة API غالبًا على كمية هائلة من المعلومات السرية، مثل مفاتيح API ورموز المصادقة. لذلك من الضروري دمج مدير الأسرار في بوابة API.
سيناريوهات استخدام الأسرار في بوابة API
Key Auth
هي طريقة مصادقة بسيطة في بوابة API. يحتاج المستخدمون إلى تعيين مفتاح مسبقًا، وعندما يكون لدى العميل طلبات API، يتم كتابة المفتاح المحدد مسبقًا في رأس الطلب المقابل أو الوصول إليه كمعلمة طلب لتمرير المصادقة. ومع ذلك، تسريبات المفاتيح شائعة، وغالبًا ما يتم تخزين المفاتيح في ملفات التكوين أو حفظها كمتغيرات في الكود. إذا لم يتم تخزين المفاتيح بشكل صحيح، فقد تظهر حتى في مستودعات الكود العامة مثل GitHub، مما يشكل تهديدًا كبيرًا للأمان. غالبًا ما يقوم المسؤولون بتحديث هذه المفاتيح بانتظام لمنع الأضرار الجسيمة الناتجة عن تسريب المفاتيح. ومع ذلك، بالنسبة لبعض المفاتيح الثابتة، فإن تحديث ملف التكوين على كل جهاز بشكل فردي يمكن أن يشكل أيضًا تهديدًا كبيرًا لاستقرار الخدمة.
دمج مدير الأسرار في بوابة API
من خلال دمج مدير الأسرار في بوابة API، يمكن تخزين المفتاح المحدد مسبقًا لمصادقة Key Auth
في خدمة مدير الأسرار، ويمكن أن يحل بشكل فعال سلسلة من المشاكل الناتجة عن تسريب المفاتيح. بوابة API هي فقط مستخدم للمفتاح، والقيمة الفعلية للمفتاح مخزنة في خدمة مدير الأسرار الخارجية. علاوة على ذلك، تحتفظ بوابة API فقط بمرجع للمفتاح، لذا حتى إذا تم اختراق بوابة API، لا يمكن الحصول على المفتاح الفعلي من الكود أو ملف التكوين. بالإضافة إلى ذلك، إذا كنت بحاجة إلى تحديث قيمة المفتاح، فأنت بحاجة فقط إلى تحديثه في مدير الأسرار دون تعديل الكود أو تكوين بوابة API، مما يتجنب أيضًا إعادة تشغيل بوابة API.
سنستخدم Apache APISIX كمثال أدناه لإظهار كيفية استخدام مدير الأسرار لتخزين المفتاح المحدد مسبقًا لـ Key Auth
في بوابة API.
مثال عملي لاستخدام Apache APISIX في مدير الأسرار
Apache APISIX هي بوابة API ديناميكية وفورية عالية الأداء توفر مئات الوظائف، مثل موازنة الحمل، المنبع الديناميكي، الإصدار التدريجي، التوجيه الدقيق، الحد من المعدل، تخفيض الخدمة، كسر الدائرة، المصادقة، والمراقبة.
في الإصدار 3.1.0، قدمت Apache APISIX APISIX Secret
لدمج خدمات مدير الأسرار المختلفة. تسلسل عملها كما يلي:
أدناه، نستخدم Vault كخدمة مدير الأسرار. سنستخدم مصادقة Key Auth
لتوضيح كيفية استخدام مدير الأسرار لحفظ المفاتيح في Apache APISIX.
إنشاء المفاتيح في Vault
قبل إنشاء المفتاح، تحتاج إلى بدء خدمة Vault. نظرًا لأن هذا القسم يشارك أفضل الممارسات لاستخدام Vault في نظام Apache APISIX، فإن تكوين Vault نفسه غير موضح بالتفصيل ويمكن العثور عليه هنا.
لإنشاء المفتاح المقابل في Vault، يمكنك استخدام الأمر التالي:
vault secrets enable -version=1 -path=apisix kv
vault kv put apisix/jack auth-key=secret-key
بعد تنفيذ الأمر أعلاه، ستجد مفتاحًا باسم auth-key
تحت مسار apisix/jack
، بقيمة secret-key
.
التكوين في APISIX
أولاً، أضف مورد السر من خلال Admin API
وقم بتكوين العنوان بالإضافة إلى معلومات الاتصال الأخرى لـ Vault:
- معرف مورد APISIX Secret هو "gateway"، راجع https://apisix.apache.org/docs/apisix/terminology/secret/#usage-1
- الحقل
prefix
هو مسار المفتاح في Vault، والحقلtoken
هو رمز Vault.
curl http://127.0.0.1:9180/apisix/admin/secrets/vault/gateway \
-H 'X-API-KEY: Your-API-KEY' -X PUT -d '
{
"uri": "https://127.0.0.1:8200",
"prefix": "apisix",
"token": "hvs.chjDFWvZRcihoq2vpSsVenmR"
}'
ثم، استخدم المكون key-auth
لإنشاء مستهلك وإجراء مصادقة Key Auth للمسار أو الخدمة المقابلة. يشير الحقل key إلى مورد APISIX Secret:
curl http://127.0.0.1:9180/apisix/admin/consumers \
-H 'X-API-KEY: Your-API-KEY' -X PUT -d '
{
"username": "jack",
"plugins": {
"key-auth": {
"key": "$secret://vault/gateway/jack/auth-key"
}
}
}'
من خلال الخطوتين أعلاه، عندما يصل طلب المستخدم إلى مكون key-auth
، سيستدعي مكون Secret
مدير الأسرار الذي تم تكوينه من قبل المستخدم من خلال الواجهة المقدمة للحصول على القيمة الفعلية للمفتاح في Vault. إذا لم يتم العثور على قيمة المفتاح، سيسجل المكون الخطأ ويفشل في تنفيذ التحقق من Key Auth
.
ثم قم بإنشاء Route لإجراء مصادقة Key Auth
:
curl -i "http://127.0.0.1:9180/apisix/admin/routes" -H 'X-API-KEY: Your-API-KEY' -X PUT -d '
{
"id": "getting-started-ip",
"uri": "/ip",
"plugins": {
"key-auth": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
أخيرًا، أرسل طلبًا بدون مفتاح إلى بوابة API للتحقق من النتيجة:
curl -i "http://127.0.0.1:9080/ip"
النتيجة كما يلي:
HTTP/1.1 401 Unauthorized
...
{"message":"Missing API key found in request"}
ثم، أرسل طلبًا بالمفتاح إلى بوابة API للتحقق من النتيجة:
curl -i "http://127.0.0.1:9080/ip" -H 'apikey: secret-key'
النتيجة مشابهة لما يلي:
HTTP/1.1 200 OK
...
{
"origin": "127.0.0.1, 59.172.90.243"
}
بالإضافة إلى ذلك، قامت Apache APISIX بتوسيع متغيرات البيئة إلى خدمة مدير أسرار بسيطة، ويمكن أيضًا تخزين رمز APISIX للاتصال بـ Vault في متغيرات البيئة. لذا، قبل بدء APISIX، يمكنك تعيين متغيرات البيئة بالأمر التالي:
export VAULT_TOKEN="root"
قم بالإشارة إلى متغيرات البيئة أثناء إضافة مورد Secret
:
curl http://127.0.0.1:9180/apisix/admin/secrets/vault/1
-H 'X-API-KEY: Your-API-KEY' -X PUT -d '
{
"uri": "https://127.0.0.1:8200"،
"prefix": "apisix",
"token": "$ENV://VAULT_TOKEN"
}'
من خلال الخطوات أعلاه، يمكنك تخزين المفتاح المطلوب لمصادقة Key Auth
في Vault بدلاً من عرضه كنص عادي أثناء تكوين المكون.
الخلاصة
في بوابة API، هناك كمية هائلة من المعلومات السرية. استخدام مدير الأسرار لإدارة الأسرار يضمن عدم وجود معلومات سرية كنص عادي في بوابة API، مما يعزز بشكل فعال أمان واستقرار بوابة API. كبوابة API الأكثر نشاطًا في العالم، تدعم Apache APISIX أيضًا مديري الأسرار بشكل كبير. تستخدم هذه المقالة أيضًا مصادقة Key Auth
لتوضيح كيفية استخدام مدير الأسرار لإدارة معلومات المفاتيح في APISIX.
لمزيد من المعلومات حول بوابة API، يرجى زيارة مدوناتنا أو الاتصال بنا.