أفضل الممارسات لتخزين مفاتيح API بأمان

الصورة بواسطة خوسيه فونتانو

في الماضي ، رأيت العديد من الأشخاص يستخدمون مستودعات Git لتخزين المعلومات الحساسة المتعلقة بمشاريعهم.

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

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

فما المشكلة بالضبط في تخزين المعلومات الحساسة بالقرب من الكود في مستودع Git؟

لماذا يجب ألا تخزن مفاتيح واجهة برمجة التطبيقات في مستودعات Git

يعد تخزين مفاتيح واجهة برمجة التطبيقات (API) أو أي معلومات حساسة أخرى على مستودع بوابة أمرًا يجب تجنبه بأي ثمن. حتى لو كان المستودع خاصًا ، يجب ألا ترى أنه مكان آمن لتخزين المعلومات الحساسة.

دعنا نبدأ بالبحث في سبب كون تخزين مفاتيح واجهة برمجة التطبيقات (API) في مستودعات بوابة عامة فكرة جيدة.

بطبيعتها ، يمكن الوصول إلى مستودع بوابة العامة من قبل أي شخص.

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

كشفت عملية بحث حديثة عن client_secret على GitHub أن هناك أكثر من 30000 عملية قد تؤدي إلى كشف مفتاح وسر API. في بعض الحالات ، يمكنك فقط نسخ الشفرة ولصقها للوصول إلى واجهة برمجة التطبيقات على الفور.

لقد أصبحت هذه المشكلة مهمة جدًا لدرجة أن بعض الشركات تستثمر في الموارد للتأكد من عدم وجود أي مفاتيح وأسرار API مسربة.

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

لذلك ، يحدث هذا في مستودعات Git العامة. ماذا عن تلك الخاصة؟ لماذا هذه مشكلة؟

تتعرض مستودعات Git الخاصة المستضافة على خدمات مثل GitHub و GitLab و Bitbucket لنوع مختلف من المخاطر. عندما تقوم بدمج تطبيق تابع لجهة خارجية مع إحدى الخدمات المذكورة ، فقد تقوم بفتح مستودعاتك الخاصة لتلك الأطراف الثالثة. ستتمكن هذه التطبيقات من الوصول إلى مستودعاتك الخاصة وقراءة المعلومات الموجودة داخلها.

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

لذلك ، أين يجب أن يتم تخزين مفاتيح API؟

هناك العديد من البدائل للتخزين الآمن لمفاتيح API والأسرار. يتيح لك البعض منهم استخدام مستودع Git الخاص بك وتشفير البيانات الحساسة. الأدوات الأخرى أكثر تطوراً وفك تشفير المعلومات الحساسة كجزء من سير العمل نشر. دعونا نلقي نظرة على بعض الحلول المتاحة.

بوابة-بعد-gcrypt

يتيح لك الحل الأول تشفير مستودع Git بالكامل. يقوم git-remote-gcrypt بذلك عن طريق إضافة وظائف إلى Git عن بعد حتى تصبح طبقة النقل المشفرة الجديدة متاحة. يجب على المستخدمين فقط إعداد جهاز تحكم عن بعد جديد مشفر ودفع رمز فيه.

تابع القراءة إذا كنت تبحث عن حل أكثر دقة يتيح لك تشفير الملفات الفردية.

بوابة السرية

git-secret هي أداة تعمل على جهازك المحلي وتقوم بتشفير ملفات محددة قبل دفعها إلى مستودعك. وراء الكواليس ، git-secret هو برنامج نصي يستخدم غنو جاري للحماية (GPG) لتشفير وفك تشفير الملفات التي قد تحتوي على معلومات حساسة.

GIT-سرداب

حل آخر هو بوابة القبو. إنها تشبه إلى حد بعيد بوابة السر في طريقة عملها ، لكن لديها بعض الاختلافات المثيرة للاهتمام.

أول شيء يجب ملاحظته حول git-crypt هو أنه برنامج ثنائي قابل للتنفيذ وليس برنامج نصي shell ، كما هو git-secret. كونك قابلاً للتنفيذ الثنائي يعني أنه عليك أولاً أن تقوم بتجميعه أو تحتاج إلى العثور على توزيع ثنائي لجهازك.

إذا كنت تستخدم جهاز Mac ، فأنت محظوظ لأن تطبيق HomeBrew يقدم حزمة جاهزة للتثبيت من git-crypt. كل ما عليك فعله هو تشغيل برنامج bit install git-crypt على محطة طرفية.

صندوق اسود

BlackBox هي أداة تم إنشاؤها بواسطة Stack Overflow. هذه هي الشركة وراء مجتمعات الأسئلة والأجوبة الشائعة مثل Stack Overflow نفسها و Server Fault و Super User. BlackBox هي أداة قوية لأنها تعمل مع Git وكذلك أنظمة التحكم في الإصدار الأخرى مثل Mercurial و Subversion.

كما يدعم تشفير السلاسل الصغيرة وليس فقط الملفات بأكملها. يفعل ذلك عند العمل مع Puppet ويستخدم Puppet's Hiera ، وهي أداة بحث ذات قيمة مفتاح لبيانات التكوين.

إن القدرة على تشفير وفك تشفير السلاسل الفردية تجعل BlackBox حلاً رائعًا لتأمين مفاتيح وأسرار API.

تكوين Heroku و Vars التكوين

إذا كنت تعمل مع Heroku ، فلا ينبغي لك تخزين أي معلومات حساسة مثل مفاتيح API والأسرار في مستودعات Git الخاصة بك. يوفر Heroku حلاً يتيح لك ضبط متغيرات التكوين.

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

Dokku ، حل مفتوح المصدر مثل Heroku ، يوفر نفس القدرات.

أسرار عامل الميناء

في نهاية الطيف من الحلول الممكنة هي أسرار دوكر. تم تقديم هذا الحل بواسطة Docker في فبراير 2017. وقد اكتسب شعبية منذ ذلك الحين.

تتيح لك أسرار Docker تعريف المتغيرات المشفرة وإتاحتها لخدمات معينة أثناء وقت التشغيل. يتم تشفير الأسرار أثناء النقل والراحة.

هذا النهج يجعل أسرار Docker الحل الأمثل لتخزين واستخدام مفاتيح API والأسرار بطريقة آمنة ومشفرة.

ملخص

يجب أن تكون على دراية الآن بمخاطر تخزين المعلومات الحساسة مثل مفاتيح API والأسرار في مستودعات Git العامة والخاصة.

إن فهم الطرق المحتملة التي قد تتعرض بها مستودعاتك هو أمر أساسي لتقييم المخاطر المرتبطة بتسريبات المعلومات وتخفيفها.

تقترح هذه المقالة أيضًا بعض الحلول المختلفة التي تسمح لك بتشفير مفاتيح وأسرار واجهة برمجة التطبيقات بحيث يمكنك استخدام مستودعات الشفرة الخاصة بك بشكل آمن.

أنا متأكد من أن هناك المزيد من الحلول التي يمكن أن تساعدك على تحقيق نفس النتائج.