Skip to main content
Engineering29 September 20263 min read

Where do you store secrets in your system?

لو تسرّب اليوم، وش يقدر يسوي فيه؟

Al-Bahar Al-Tiqni team

تقريبًا أي نظام يحتوي على معلومات حساسة، مثل:

  • Database Passwords
  • API Keys
  • Access Tokens
  • Private Keys
  • Encryption Keys

كل هذه المعلومات تُسمّى Secrets.

لكن السؤال الأهم: وين نحفظها؟

لا تحط الـ Secret داخل الكود

أسوأ حل ممكن هو إنك تحط الـ API Key أو كلمة المرور مباشرة داخل الكود.

لأنك لو رفعت الكود على Git بالغلط، أو حصل شخص على صلاحية الوصول إلى الـ Repository، ممكن يوصل إلى المفتاح بسهولة.

وحتى لو حذفت الـ Secret بعد ذلك، ممكن يظل موجودًا في Git History.

طيب، نحطه في .env؟

وضع الـ Secrets داخل ملف .env أفضل من وضعها مباشرة داخل الكود، لكنه مو حلًا متكاملًا لإدارة الأسرار.

في النهاية، .env مجرد ملف موجود على السيرفر.

ولو كانت صلاحيات الملف غير صحيحة، أو دخل ضمن نسخة احتياطية (Backup)، أو قدر Process آخر من الوصول إليه، فممكن يتسرّب الـ Secret.

هنا يجي دور Secrets Manager

بدل ما توزّع الأسرار بين الملفات والسيرفرات، تخزنها في مكان مخصص لإدارتها وحمايتها.

ويأخذ كل Service فقط الـ Secrets التي يحتاجها.

مثلًا:

Application ← Identity ← Secrets Manager ← Database Password • Payment API Key • Signing Key

لكن فيه نقطة مهمة

كون الـ Secret مشفّرًا لا يعني أن المشكلة انتهت.

على سبيل المثال، لو شفّرت API Key وخزنته في قاعدة بيانات، ثم وضعت مفتاح فك التشفير على نفس السيرفر، فأنت فعليًا نقلت المشكلة من مفتاح إلى مفتاح آخر.

وهنا يجي دور KMS

KMS — Key Management Service

يساعدك على إدارة مفاتيح التشفير بشكل منفصل عن التطبيق.

بدل ما يحتفظ التطبيق بمفتاح التشفير الرئيسي بنفسه، تكون إدارة المفاتيح في خدمة مخصصة، مع إمكانية تحديد:

  • من يستطيع استخدام المفتاح.
  • أي خدمة تستطيع استخدامه.
  • ومتى يمكن استخدامه.

ولا تنسى Secret Rotation

بدل ما يكون الـ Password أو الـ API Key صالحًا لسنوات، تقدر تغيّره بشكل دوري وتلغي المفتاح القديم.

وبكذا تقلل الفترة التي يمكن أن يستفيد فيها أي شخص من الـ Secret في حال تسرّبه.

والأفضل من حماية الـ Secret؟

إنك ما تحتاج تخزنه من الأساس.

إذا كانت بنية النظام تسمح، تقدر تستخدم Workload Identity أو Credentials قصيرة العمر بدل الاعتماد على كلمات مرور ومفاتيح ثابتة.

وبشكل عام، ممكن تتطور إدارة الأسرار عندك من:

Hardcoded Secret ← .env ← Secrets Manager ← KMS + Rotation ← Short-lived Credentials / Identity

الفكرة مو بس إخفاء كلمات المرور

إدارة الـ Secrets ما تعني فقط إنك تخفي كلمات المرور.

الفكرة هي إنك تقلل:

  • مين يقدر يوصل للـ Secret؟
  • وكم مدة صلاحيته؟
  • ومين استخدمه ومتى؟

وبالتالي تقلل الضرر المحتمل في حال تسرّبه.

لذلك، بدل ما يكون سؤالك:

هل الـ Secret مشفّر؟

خل سؤالك:

لو تسرّب اليوم، وش يقدر يسوي فيه؟

Start a project

Tell us what is not working.

Start with a conversation, not a brief. We will tell you whether we are the right fit — including when we are not.

Book a technical call Email us directly

Start with a technical call, or send the details by email. [email protected]