مفاتيح API والأسرار بعد تغيير المطور: جرد وتدوير دون إيقاف التطبيق
غادر المطور السابق ومعه كلمات مرور قاعدة البيانات ومفاتيح الدفع والرسائل والخوادم. تغييرها دفعة واحدة قد يوقف التطبيق، وتركها مخاطرة. هذا الدليل لمدير التقنية: بأي ترتيب تغيّرها، وكيف تغيّر كل نوع دون انقطاع، وكيف تتحقق.
تدوير مفاتيح API بعد تغيير المطور يبدأ بجرد لا بتغيير: كل سر يستخدمه التطبيق، وأين يُخزَّن، ومن يعرفه. بعدها تدوّر بترتيب الخطورة: أولًا ما يمنح وصولًا يمكن منه إنشاء مفاتيح جديدة (السحابة، والخوادم، والمستودع، والنطاق)، ثم ما يمس المال والبيانات (الدفع، وقاعدة البيانات، والتخزين)، ثم ما يُساء استخدامه بالتكلفة (الرسائل، والإشعارات، والخرائط)، وأخيرًا مفاتيح التوقيع والتشفير بخطة خاصة. ولا يتوقف التطبيق إذا اتبعت قاعدة واحدة لكل مفتاح: أنشئ الجديد، وانشره، وتحقق أنه يعمل، ثم عطّل القديم، ثم احذفه بعد فترة مراقبة.
غادر المطور أو الشركة السابقة، واستلمت الكود والحسابات. لكن كلمات مرور قاعدة البيانات، ومفتاح بوابة الدفع، وحساب الخادم، ومفاتيح الرسائل والإشعارات ما زالت كما هي، ويعرفها شخص لم يعد مسؤولًا عن تطبيقك. تغييرها كلها في ساعة واحدة قد يوقف الدفع أو رموز الدخول، وتركها كما هي مخاطرة مفتوحة. هذا الدليل لمدير التقنية: كيف تجرد الأسرار، وبأي ترتيب تغيرها، وكيف تغير كل نوع دون انقطاع، وكيف تتأكد بعد التغيير.
الخطوة الأولى: جرد الأسرار وأماكن اختبائها
لا يمكن تدوير ما لا تعرف بوجوده. والأسرار في مشروع تطبيق لا تقتصر على ملف البيئة في الخادم. ابحث في هذه الأماكن كلها:
- ملفات البيئة على الخوادم: في كل بيئة (الإنتاج، والاختبار، وأي خادم قديم ما زال يعمل).
- الكود وتاريخه: مفاتيح كُتبت مباشرة في الكود ثم حُذفت، لكنها باقية في تعديل قديم في المستودع. أي سر ظهر في التاريخ يُعامل كمكشوف.
- تطبيق الجوال نفسه: مفاتيح الخرائط وإعدادات Firebase وأي مفتاح وُضع في التطبيق، وكلها قابلة للاستخراج من الملف المنشور.
- خط البناء والنشر: متغيرات سرية في أداة البناء الآلي، وملف حساب خدمة Google Play، ومفتاح App Store Connect للرفع.
- الخوادم نفسها: مفاتيح SSH المضافة لحساب المطور، والمهام المجدولة وسكربتاتها، وحسابات قاعدة البيانات الإضافية.
- لوحات الخدمات الخارجية: مفاتيح أنشأها المطور في بوابة الدفع أو مزود الرسائل أو البريد، وأسرار توقيع الإشعارات الراجعة (Webhooks).
- خارج الأنظمة: المحادثات والمستندات المشتركة والبريد التي تبادلتم فيها كلمات المرور أثناء المشروع.
سجّل النتيجة في جدول واحد. هذا نموذج بصفوف من مشروع افتراضي لتطبيق خدمات بخادم ولوحة تحكم؛ احذف ما لا ينطبق وأضف ما يخصك:
| السر | أين يُستخدم | أين يُخزَّن الآن | النوع | الطبقة |
|---|---|---|---|---|
| حساب السحابة أو لوحة الاستضافة | كل البنية | بريد المطور وكلمة مروره | وصول | 1 |
| مفاتيح SSH وحسابات الخادم | الدخول إلى الخوادم والنشر | ملف المفاتيح المصرح بها على الخادم | وصول | 1 |
| المستودع وخط البناء | الكود والنشر الآلي | حسابات المطور في المنظمة | وصول | 1 |
| مسجل النطاق وإدارة DNS | توجيه النطاق والبريد والشهادات | حساب باسم المطور | وصول | 1 |
| المفتاح السري لبوابة الدفع وسر الإشعارات الراجعة | الخادم | ملف البيئة، وسابقًا في الكود | سر خادم | 2 |
| كلمة مرور قاعدة البيانات | الخادم | ملف البيئة | سر خادم | 2 |
| مفاتيح التخزين السحابي للملفات | الخادم | ملف البيئة | سر خادم | 2 |
| مفتاح مزود الرسائل النصية | رموز التحقق | ملف البيئة | سر خادم | 3 |
| حساب خدمة الإشعارات ومفتاح APNs | الخادم | ملف على الخادم | سر خادم | 3 |
| مفتاح الخرائط | تطبيق الجوال | داخل التطبيق | معرّف مضمن | 3 |
| مفتاح تشفير التطبيق وتوقيع رموز الجلسات | الخادم | ملف البيئة | توقيع وتشفير | 4 |
| مفتاح رفع تطبيق Android | بناء الإصدارات | جهاز المطور | توقيع وتشفير | 4 |
الجدول يذكر أماكن الأسرار لا قيمها. القيم مكانها خزنة أسرار تملكها المنشأة، وهذا ما ستنقلها إليه أثناء التدوير. وإن لم تكن الحسابات نفسها باسم منشأتك بعد، فنقل ملكيتها يسبق تدوير مفاتيحها، كما تشرح مقالة حسابات الخدمات الخارجية في تطبيقك.
ثلاثة أنواع من المفاتيح لا تُعامل بالطريقة نفسها
أكثر أخطاء التدوير تأتي من معاملة كل المفاتيح كأنها كلمة مرور تُغيَّر. عمود «النوع» في الجدول يحدد طريقة التعامل:
- أسرار الخادم
- تعيش في الخادم وحده: مفتاح الدفع السري، وكلمة مرور قاعدة البيانات، ومفاتيح التخزين. هذه تُدوَّر بالكامل، وتغييرها لا يحتاج إصدارًا جديدًا من التطبيق.
- معرّفات مضمنة في التطبيق
- مفاتيح داخل تطبيق الجوال يستطيع أي شخص استخراجها، فلا معنى لاعتبارها سرًا. تنص وثائق Firebase عن مفاتيح API على أن مفاتيح Firebase المقيدة بخدماتها لا تحتاج إلى معاملتها كأسرار، وأن الحماية تأتي من صلاحيات الوصول وقواعد الأمان. العلاج هنا التقييد لا التدوير: قصر مفتاح الخرائط على معرّف تطبيقك وبصمة توقيعه وعلى الواجهات التي يستخدمها. وإن احتجت إلى استبداله، فتذكر ما تقوله إرشادات أمان مفاتيح خرائط Google: المفاتيح في تطبيقات Android وiOS لا تُستبدل حتى يحدّث العملاء تطبيقاتهم.
- مفاتيح التوقيع والتشفير
- مفتاح تشفير التطبيق، ومفتاح توقيع رموز الجلسات، ومفتاح رفع Android، ومفتاح APNs. تغييرها له آثار جانبية: بيانات مشفرة لا تُقرأ، أو مستخدمون يخرجون من حساباتهم، أو إصدارات لا تُقبل في المتجر. هذه لا تُدوَّر قبل خطة مكتوبة لكل منها.
بأي ترتيب تدوّر المفاتيح؟ أربع طبقات بحسب الخطورة
الترتيب يحكمه سؤال واحد: ماذا يستطيع من يعرف هذا المفتاح أن يفعل؟ ما يمنح وصولًا واسعًا يأتي أولًا، لأن من يملكه يستطيع إنشاء مفاتيح جديدة لا تظهر في جردك.
- الطبقة 1: الوصولحساب السحابة والاستضافة، ومفاتيح SSH، والمستودع وخط البناء، والنطاق وDNS، وحسابات المتاجر. تُنفذ يوم التحويل
- الطبقة 2: المال والبياناتمفاتيح بوابة الدفع وسر إشعاراتها، وقاعدة البيانات، والتخزين والنسخ الاحتياطية. في الأيام الأولى بعد التحويل
- الطبقة 3: الإساءة بالتكلفة أو السمعةالرسائل النصية، والبريد، والإشعارات، والخرائط والخدمات المدفوعة بالاستهلاك
- الطبقة 4: التوقيع والتشفيرمفتاح تشفير التطبيق، وتوقيع الجلسات، ومفتاح رفع Android، ومفتاح APNs. بخطة مستقلة لكل مفتاح
عدّل الترتيب بحسب ما تعرفه: مفتاح ظهر في تاريخ المستودع، أو في محادثة مع أطراف كثيرة، يرتفع طبقة. ومفتاح لم يصل إليه المطور السابق فعلًا، لأنه أُنشئ بعد مغادرته، ينزل إلى آخر القائمة.
كيف تدوّر دون إيقاف التطبيق: أربعة أنماط
التوقف يحدث حين يُلغى المفتاح القديم قبل أن يعمل الجديد في كل مكان يُستخدم فيه. كل نوع من المفاتيح له نمط يمنع ذلك:
- إنشاءمفتاح جديد بجانب القديمالمنشأة
- نشرفي الخزنة ثم في الخادمالفريق التقني
- تحققاختبار وظيفي حقيقيالفريق والمنشأة
- تعطيلتعطيل القديم لا حذفهالمنشأة
- حذفبعد فترة مراقبة بلا أخطاءالمنشأة
1. مفتاحان متداخلان
أغلب مزودي الخدمات يسمحون بأكثر من مفتاح نشط. وثائق AWS لتحديث مفاتيح الوصول مثال واضح: أنشئ مفتاحًا ثانيًا فيصبح للمستخدم مفتاحان نشطان، وحدّث التطبيقات، وراجع معلومة «آخر استخدام» للمفتاح القديم، ثم عطّله قبل حذفه ليبقى لك طريق رجوع. وينطبق النمط نفسه على مفاتيح بوابات الدفع ومزودي الرسائل والبريد التي تسمح بمفتاحين.
2. مستخدم جديد بدل كلمة مرور جديدة
تغيير كلمة مرور مستخدم قاعدة البيانات يقطع كل اتصال يستخدم القديمة في اللحظة نفسها. الأسلم: أنشئ مستخدمًا جديدًا بالصلاحيات نفسها (أو أقل إن كانت الحالية أوسع من اللازم)، وحوّل الخادم إليه، وتأكد أن المهام المجدولة ومعالجات الطوابير تحولت أيضًا، ثم عطّل المستخدم القديم. الشيء نفسه لحسابات الخوادم: حساب جديد بمفتاح SSH تملكه المنشأة، ثم إزالة مفاتيح المطور السابق من الملف المصرح به.
3. قبول القديم والجديد لفترة
مفاتيح التشفير وتوقيع الجلسات لا تُستبدل فجأة. في Laravel مثلًا، تغيير مفتاح التطبيق يجعل البيانات المشفرة بالمفتاح السابق غير قابلة للفك، ولذلك تتيح وثائق التشفير في Laravel وضع المفاتيح السابقة في متغير مستقل ليبقى فكها ممكنًا بعد التغيير. ومفاتيح توقيع رموز الجلسات تُدار بالطريقة نفسها: الخادم يقبل التوقيعين حتى تنتهي صلاحية الرموز القديمة، أو تقرر عن وعي إخراج كل المستخدمين وتطلب منهم الدخول مجددًا.
4. عبر إصدار جديد من التطبيق
المعرّفات المضمنة في تطبيق الجوال تبقى في أجهزة المستخدمين حتى يحدّثوا. قيّد المفتاح الحالي فورًا بمعرّف تطبيقك والواجهات المسموحة، وضع المفتاح الجديد في الإصدار القادم، وراقب الاستخدام حتى يتحول أغلبه إلى الجديد قبل إلغاء القديم. إن كان المفتاح القديم يُساء استخدامه فعلًا، فالإلغاء الفوري يعني تعطيل الميزة لمن لم يحدّث؛ قرار يحتاج موازنة واعية، وقد يرافقه إجبار على التحديث.
مفتاحان يحتاجان عناية خاصة. مفتاح APNs بصيغة p8 يُنزَّل مرة واحدة فقط، وإلغاؤه يبطله فورًا ويؤثر على كل خدمة تستخدمه، بحسب مساعدة حساب Apple Developer؛ أنشئ مفتاحًا جديدًا من حساب منشأتك وحدّث الخادم وجرّب إشعارًا على iPhone قبل إلغاء القديم. ومفتاح رفع Android لا يُغيَّر بقرار منك وحدك؛ إن كان التطبيق مسجلًا في توقيع تطبيقات Google Play فيُطلب تغييره من Play Console.
نقل الأسرار من الكود إلى مخزن آمن
التدوير فرصة لإصلاح طريقة حفظ الأسرار، لا لتكرارها بقيم جديدة. إن كتبت المفتاح الجديد في المكان نفسه في الكود، فأنت تجهز للمشكلة ذاتها مع المطور القادم. الخطوات:
- افحص الكود وتاريخه آليًا: أدوات فحص الأسرار تمر على كل تعديل في المستودع، لا على النسخة الأخيرة فقط. كل نتيجة تدخل جدول الجرد.
- اختر مكانًا واحدًا للأسرار: خدمة إدارة الأسرار لدى مزود السحابة، أو خزنة مستقلة، باسم المنشأة وتحت حسابها. الخادم يقرأ منها عند التشغيل أو النشر.
- افصل البيئات: مفاتيح الاختبار غير مفاتيح الإنتاج. شائع أن تجد بيئة الاختبار تستخدم مفتاح الدفع الحقيقي، فيصبح كل من يصل إلى الاختبار قادرًا على الوصول إلى الإنتاج.
- أقل صلاحية لكل مفتاح: المفتاح الذي يرفع الملفات لا يحتاج إلى حذف الحاوية كلها، ومستخدم قاعدة البيانات للتطبيق لا يحتاج إلى صلاحية إدارة.
- امنع العودة: فحص الأسرار في خط البناء يوقف أي دمج لكود يحتوي على مفتاح، وسجل من اطلع على الخزنة ومتى.
أما حذف الأسرار القديمة من تاريخ المستودع، فهو عملية تعيد كتابة التاريخ وتربك كل من يعمل عليه. الأهم أن كل سر ظهر في التاريخ قد دُوّر؛ بعد ذلك تصبح القيمة القديمة بلا فائدة لمن يجدها. وتلخص ورقة OWASP لإدارة الأسرار دورة حياة السر من الإنشاء إلى التدوير والإلغاء والانتهاء، وتصلح مرجعًا لسياسة المنشأة بعد هذه المرحلة.
التحقق بعد التدوير: اختبار لكل مفتاح
«الخادم يعمل» ليس تحققًا. كل مفتاح يُختبر بالعملية التي يخدمها فعلًا، على الإنتاج، ثم يُتأكد أن القديم لم يعد يعمل:
| الخدمة | الاختبار الوظيفي | دليل أن القديم انتهى |
|---|---|---|
| بوابة الدفع | عملية دفع حقيقية صغيرة، ثم استرداد، والتأكد أن إشعار البوابة وصل للخادم وحدّث الطلب | المفتاح القديم معطل في لوحة البوابة، ولا طلبات به في سجلها |
| قاعدة البيانات | تسجيل مستخدم وطلب جديد، وتشغيل المهام المجدولة ومعالجات الطوابير | المستخدم القديم معطل، ولا اتصالات به في سجل قاعدة البيانات |
| الرسائل النصية | رمز تحقق يصل إلى رقم سعودي | مفتاح المزود القديم ملغى |
| الإشعارات | إشعار يصل إلى جهاز iPhone وجهاز Android | مفتاح APNs القديم ملغى، وحساب الخدمة القديم محذوف |
| التخزين | رفع صورة من التطبيق وعرضها | مفاتيح الوصول القديمة معطلة ولا تظهر في «آخر استخدام» |
| الخوادم | نشر إصدار عبر خط البناء بالحسابات الجديدة | مفاتيح SSH للمطور السابق غير موجودة، ومحاولة الدخول بها تفشل |
وراقب سجلات الخادم في الأيام التالية بحثًا عن أخطاء مصادقة مع الخدمات الخارجية. خطأ من هذا النوع بعد التدوير يعني مكانًا منسيًا ما زال يستخدم مفتاحًا قديمًا: مهمة شهرية، أو خادم احتياطي، أو سكربت تقارير.
أخطاء شائعة في تدوير الأسرار بعد تغيير المطور
- البدء بالمفاتيح الصغيرة: تغيّر مفتاح الخرائط والبريد، ويبقى حساب السحابة بكلمة المرور القديمة، فيستطيع صاحبها قراءة كل المفاتيح الجديدة.
- الحذف قبل التعطيل: لا طريق رجوع إن ظهر مكان منسي.
- تغيير مفتاح التشفير كأي كلمة مرور: بيانات مشفرة تصبح غير مقروءة، أو كل المستخدمين يخرجون من حساباتهم دون قرار مسبق.
- إلغاء مفتاح مضمن في التطبيق فورًا: ميزة تتعطل لكل من لم يحدّث التطبيق.
- نسيان البيئات الأخرى: خادم اختبار أو خادم قديم بالمفاتيح القديمة نفسها، ووصول المطور إليه ما زال قائمًا.
- التحقق الثنائي على جوال المطور: تغيّر كلمة المرور، ويبقى رمز التحقق يصل إلى جهازه.
- تدوير بلا توثيق: تنتهي المهمة ولا يعرف أحد أين المفاتيح الجديدة ولا متى تُدوَّر مرة أخرى.
ما تطلبه من المطور السابق ومن الفريق المنفذ
من المطور السابق، قبل خروجه أو ضمن ترتيبات التسليم:
- قائمة بكل سر أنشأه أو استخدمه، والخدمة التي يخصها، وأين وضعه.
- تأكيد مكتوب بالأماكن التي حفظ فيها نسخًا خارج أنظمة المنشأة: أجهزته، وأدوات تخزين كلمات المرور الخاصة به، والمحادثات.
- قائمة بالحسابات التي أنشأها باسمه أو ببريده، لنقلها قبل التدوير.
- التعاون خلال فترة محددة للإجابة عن سؤال «ما الذي يستخدم هذا المفتاح؟».
ومن الفريق الذي سينفذ التدوير، داخليًا أو خارجيًا:
- جدول الجرد مكتملًا وموافقًا عليه قبل تغيير أي مفتاح.
- خطة بالترتيب والتوقيت، مع طريقة الرجوع لكل مفتاح إن فشل التحقق.
- خطة مستقلة مكتوبة لكل مفتاح من الطبقة الرابعة، بأثرها على المستخدمين.
- نتائج اختبار ما بعد التدوير لكل خدمة، لا تقرير «تم».
- مكان الأسرار الجديد وصلاحيات الاطلاع عليه، وموعد التدوير الدوري التالي.
هذه جزء من أمن التطبيقات كما نبنيه: خزنة للأسرار والمفاتيح، وتدوير المفاتيح، وصلاحيات بأقل قدر لازم. وحين نجد مفتاح بوابة دفع داخل كود التطبيق، ننقل المفاتيح إلى الخادم وخزنة الأسرار ونُدوِّر المفتاح المكشوف فورًا. وفي خط النشر ضمن DevOps وCI/CD نفحص الأسرار المسربة في الكود ونديرها خارجه، فيوقف الفحص الخط ويُدوَّر المفتاح إن دمج أحد كودًا فيه سر.
ما تجهزه قبل التواصل لمناقشة خطة التدوير
- ما استلمته من حسابات وصلاحيات، وما زال باسم المطور السابق.
- قائمة الخدمات الخارجية التي تعرف أن التطبيق يستخدمها، ولو كانت ناقصة.
- عدد البيئات والخوادم التي تعرفها، ومزود الاستضافة.
- هل ظهرت أي علامة على استخدام غير معتاد: فاتورة رسائل مرتفعة، أو دخول من مكان غير متوقع، أو تغييرات لا يعرفها أحد.
- أوقات الذروة في تطبيقك، لاختيار نافذة التغيير.
- من يملك قرار إخراج المستخدمين من حساباتهم إن لزم ذلك لتدوير مفاتيح الجلسات.
وإن كان تغيير المطور جزءًا من انتقال أكبر لم يكتمل بعد، فابدأ من الترتيب الكامل في مقالة نقل مشروع التطبيق من شركة تطوير إلى أخرى، ومن بنود الأسرار في قائمة استلام التطبيق. وإن كان المشروع متعثرًا وغادر المطور دون تسليم منظم، فنبدأ في استلام المشروع المتعثر باستعادة الصلاحيات وتغيير كلمات المرور ونقل الحسابات إلى ملكية المنشأة.
الخلاصة: اجرد، ثم رتّب، ثم دوّر مفتاحًا مفتاحًا
تغيير كل شيء في ليلة واحدة يوقف التطبيق، وترك كل شيء كما هو يترك مفاتيح منشأتك مع شخص خارجها. الطريق الآمن بينهما: جرد كامل يشمل تاريخ الكود وتطبيق الجوال وخط البناء، وتصنيف كل مفتاح بين سر خادم ومعرّف مضمن ومفتاح توقيع، وتدوير بترتيب الخطورة يبدأ بما يمنح الوصول، ونمط تداخل يضمن ألا يُعطَّل القديم قبل أن يعمل الجديد، واختبار حقيقي لكل خدمة بعد التغيير.
إن كنت أمام هذا الموقف الآن، احجز اجتماعًا تقنيًا لنراجع معك الجرد والترتيب ونحدد ما يُنفذ يوم التحويل وما يحتاج خطة خاصة.
أسئلة شائعة
غيّر في يوم التحويل ما يمنح وصولًا واسعًا: حساب السحابة، والخوادم، والمستودع، والنطاق، وحسابات المتاجر. أما مفاتيح الدفع وقاعدة البيانات والخدمات فدوّرها في الأيام التالية بنمط التداخل، ومفاتيح التشفير والتوقيع بخطة مستقلة لكل منها، حتى لا يتوقف التطبيق.
ليس بالضرورة. هذه معرّفات مضمنة يستطيع أي شخص استخراجها من التطبيق، وحمايتها تأتي من التقييد بمعرّف التطبيق وبصمة التوقيع والواجهات المسموحة، ومن قواعد الأمان والصلاحيات. قيّدها فورًا، واستبدلها في إصدار قادم إن لزم.
البيانات المشفرة بالمفتاح القديم قد تصبح غير قابلة للفك، وقد يخرج المستخدمون من حساباتهم إن كان المفتاح يوقّع الجلسات. استخدم ما يتيحه إطار العمل لقبول المفتاح السابق مؤقتًا، أو قرر مسبقًا إخراج المستخدمين وإعادة تشفير البيانات بخطة مكتوبة.
عطّله أولًا بدل حذفه، وراجع معلومة آخر استخدام في لوحة المزود إن كانت متاحة، وسجلات الخادم بحثًا عن أخطاء مصادقة. إن ظهر مكان منسي يستخدمه، أعد تفعيله مؤقتًا وحدّث ذلك المكان، ثم احذفه بعد فترة مراقبة بلا أخطاء.
لا. من نسخ المستودع قبل الحذف ما زال يملك القيمة. الحل تدوير كل سر ظهر في التاريخ، فتصبح القيمة القديمة بلا فائدة. إعادة كتابة التاريخ خطوة اختيارية لاحقة تربك من يعمل على المستودع.
خدمات وصفحات مرتبطة
اقرأ أيضًا
خطة تدوير لمفاتيح تطبيقك دون إيقافه
نراجع معك جرد الأسرار وترتيب تدويرها، ونحدد ما يُنفذ يوم التحويل وما يحتاج خطة خاصة مثل مفاتيح التشفير والتوقيع.