دليل المطورين لإدارة مفاتيح API وبيانات اعتماد قاعدة البيانات والبيانات الحساسة الأخرى بأمان باستخدام HashiCorp Vault
في عمليات تطوير البرمجيات، تتطلب التطبيقات بيانات حساسة (أسرار) مثل مفاتيح API، وبيانات اعتماد قاعدة البيانات، وكلمات المرور، والشهادات لتعمل بشكل صحيح. ومع ذلك، فإن تخزين هذه الأسرار داخل الكود، أو ملفات التكوين، أو متغيرات البيئة يحمل مخاطر أمنية كبيرة. يمكن أن تؤدي التسريبات، أو الوصول غير المصرح به، أو التكوينات الخاطئة إلى اختراقات بيانات كبيرة.
لماذا لا تكفي الطرق التقليدية؟
- متغيرات البيئة: غالبًا ما تكون مرئية في قوائم العمليات، ويصعب إدارتها في الأنظمة الموزعة.
- ملفات التكوين: يمكن إدراجها عن طريق الخطأ في أنظمة التحكم بالمصادر (مثل Git)، وهي مفتوحة للوصول غير المصرح به.
- التشفير الثابت في الكود: يُعد من أسوأ الممارسات، ويتطلب إعادة تجميع الكود في حال الحاجة إلى تغيير أو تحديث الأسرار.
لمعالجة هذه المشكلات، نحتاج إلى حل مركزي لإدارة الأسرار مثل HashiCorp Vault. تم تصميم Vault لتخزين والوصول إلى وإدارة جميع الأسرار التي تحتاجها تطبيقاتك بأمان.
ما هو HashiCorp Vault؟
HashiCorp Vault هي أداة توفر تخزينًا مركزيًا للأسرار، والتحكم في الوصول، وخدمات التشفير. إنها تمكن المطورين من الوصول بأمان إلى المعلومات الحساسة المستخدمة في تطبيقاتهم. تشمل الميزات الرئيسية لـ Vault ما يلي:
- تخزين الأسرار: يمكنها تخزين أزواج المفاتيح/القيم، والأسرار الديناميكية (بيانات اعتماد قاعدة البيانات)، والشهادات، وما إلى ذلك.
- تشفير البيانات: توفر واجهة برمجة تطبيقات (API) لعمليات تشفير/فك تشفير البيانات، وتقدم خدمات التشفير دون الحاجة إلى تخزين البيانات نفسها في Vault.
- التحكم في الوصول: تحدد من يمكنه الوصول إلى أي سر ومدة وصوله باستخدام سياسات مفصلة (ACL).
- سجل التدقيق: تدقق جميع أنشطة الوصول إلى الأسرار وإدارتها.
الإعداد والاستخدام الأساسي لـ Vault للمطورين (البيئة المحلية)
يُعد تشغيل Vault في وضع dev في بيئة التطوير المحلية أمرًا سهلاً للغاية. هذا الوضع مخصص لأغراض الاختبار والتعلم؛ يتطلب الأمر تكوينًا مختلفًا لبيئات الإنتاج.
vault server -dev -dev-listen-address="0.0.0.0:8200"يبدأ هذا الأمر تشغيل Vault في وضع التطوير ويعرض رمز الجذر (root token) افتراضيًا. يمكنك تسجيل الدخول إلى Vault باستخدام هذا الرمز:
export VAULT_ADDR='http://127.0.0.1:8200' # الافتراضي هو 127.0.0.1:8200 إذا لم يتم استخدام dev-listen-address.vault login <root_token>استخدام محرك أسرار KV (مخزن المفتاح/القيمة)
يُعد محرك KV (مفتاح/قيمة) أحد أكثر محركات الأسرار استخدامًا. إنه مثالي لتخزين الأسرار الثابتة مثل تكوينات التطبيقات ومفاتيح API. يوفر محرك KV-v2 دعمًا للتحكم في الإصدار.
أولاً، دعنا نُمكّن محرك KV-v2:
vault secrets enable -version=2 kvالآن دعنا نُنشئ سرًا. على سبيل المثال، مفتاح API واسم مستخدم قاعدة بيانات لتطبيقنا:
vault kv put kv/myapp/config api_key="superSecretAPIKey123" db_user="app_admin" db_password="Pa$$w0rd"لقراءة هذا السر:
vault kv get kv/myapp/config--- Key --- Value ---version 1api_key superSecretAPIKey123db_password Pa$$w0rddb_user app_adminجلب الأسرار باستخدام تطبيق بايثون
الآن دعنا نرى كيفية جلب هذه الأسرار عبر تطبيق بايثون. سنستخدم مكتبة hvac.
pip install hvacimport hvacimport os# عنوان خادم VaultVAULT_ADDR = os.getenv('VAULT_ADDR', 'http://127.0.0.1:8200')# نستخدم رمز الجذر في وضع التطوير. يجب تفضيل طرق أكثر أمانًا في الإنتاج.VAULT_TOKEN = os.getenv('VAULT_TOKEN', '<رمز_الجذر_الخاص_بك_هنا>') # استبدل برمز الجذر الخاص بكclient = hvac.Client(url=VAULT_ADDR, token=VAULT_TOKEN)if client.is_authenticated(): print("تم الاتصال بـ Vault بنجاح!") try: read_response = client.secrets.kv.v2.read_secret_version( mount_point='kv', path='myapp/config' ) api_key = read_response['data']['data']['api_key'] db_user = read_response['data']['data']['db_user'] db_password = read_response['data']['data']['db_password'] print(f"مفتاح API: {api_key}") print(f"مستخدم قاعدة البيانات: {db_user}") print(f"كلمة مرور قاعدة البيانات: {db_password}") except Exception as e: print(f"خطأ في قراءة السر: {e}")else: print("فشل مصادقة Vault.")ملاحظة هامة: في بيئات الإنتاج، بدلاً من استخدام root_token، يجب عليك استخدام إحدى طرق المصادقة المختلفة التي يوفرها Vault (على سبيل المثال، AppRole، Kubernetes Service Account). يوضح هذا المثال مبدأ العمل الأساسي.
إدارة السياسات (ACL)
كل شيء في Vault يعتمد على السياسات (ACL - قائمة التحكم بالوصول). تحدد من يمكنه الوصول إلى أي مسار بأي أذونات باستخدام السياسات. على سبيل المثال، دعنا نُنشئ سياسة تمنح إذن القراءة فقط للمسار myapp-config.
دعنا نُنشئ ملفًا باسم myapp-policy.hcl:
path "kv/data/myapp/config" { capabilities = ["read"]}اكتب هذه السياسة إلى Vault:
vault policy write myapp-readonly myapp-policy.hclالآن، من خلال ربط هذه السياسة برمز أو طريقة مصادقة (على سبيل المثال، AppRole)، يمكننا ضمان أن المستخدمين/التطبيقات المصرح لهم فقط بواسطة هذه السياسة يمكنهم قراءة الأسرار من المسار kv/data/myapp/config.
الأسرار الديناميكية: بيانات اعتماد قاعدة البيانات
تُعد الأسرار الديناميكية إحدى أقوى ميزات Vault. باستخدام هذه الميزة، يمكن للتطبيقات تلقي بيانات اعتماد تُنشأ عند الطلب، وتكون قصيرة العمر، وصالحة فقط لهذا الطلب المحدد. على سبيل المثال، يمكننا إنشاء مستخدمين ديناميكيين لقاعدة بيانات. بهذه الطريقة، حتى إذا تم تسريب سر، يتم تقليل المخاطر بسبب عمره القصير.
دعنا نُمكّن محرك الأسرار الديناميكية لـ PostgreSQL:
vault secrets enable postgresqlقم بتكوين معلومات اتصال قاعدة البيانات (يفترض هذا المثال تشغيل PostgreSQL على Docker):
vault write postgresql/config/connection connection_url="postgresql://{{username}}:{{password}}@localhost:5432/mydb"الآن، دعنا نُعرّف دورًا. سينشئ هذا الدور مستخدم قاعدة بيانات جديدًا لمدة محددة (على سبيل المثال دقيقة واحدة):
vault write postgresql/roles/my-app-role
oles="myapp_read_only" tl="1m"
enewal_period="1m"
ative_tls=false
evoke_on_delete=true
evocation_sql="DROP USER IF EXISTS "{{name}}" CASCADE;" \
creation_statements="CREATE ROLE "{{name}}" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO "{{name}}";"اطلب بيانات اعتماد ديناميكية من هذا الدور:
vault read postgresql/creds/my-app-roleKey Value--- -----lease_id postgresql/creds/my-app-role/<UUID>lease_duration 1mlease_renewable truedata map[password:g9e...N92 username:v-token-my-app-role-<UUID>]كما ترون، قام Vault تلقائيًا بإنشاء اسم مستخدم وكلمة مرور، وبيانات الاعتماد هذه صالحة لمدة دقيقة واحدة فقط. يتصل تطبيقك بقاعدة البيانات باستخدام بيانات الاعتماد هذه، وعند انتهاء المدة، يمكن لـ Vault إبطال هذا المستخدم أو تجديده تلقائيًا.
الخاتمة
يُعد HashiCorp Vault أداة قوية تجعل إدارة الأسرار في التطبيقات الحديثة آمنة وقابلة للتطوير. من خلال التخلص من الثغرات الأمنية لمتغيرات البيئة أو ملفات التكوين، يمكنك إدارة أسرارك من موقع مركزي، وتطبيق سياسات الوصول، وحتى إنشاء بيانات اعتماد ديناميكية قصيرة العمر. بصفتنا مطوري برامج، يجب علينا دمج مثل هذه الأدوات في دورة حياة تطوير البرمجيات (SDLC) لبناء تطبيقات أكثر أمانًا.
التعليقات (0)
لا توجد تعليقات بعد. كن أول من يعلق!