تخطَّ إلى المحتوى

🔐 شرح أمن API وقواعد البيانات

إدارة الأسرار (Secrets Management)

الدرس 9 من 25· ⏱ 2 دقائق قراءة

مقدمة عن إدارة الأسرار

الأسرار (Secrets) تشمل: مفاتيح API، كلمات مرور قواعد البيانات، توكنات JWT، مفاتيح التشفير. تخزينها في الكود المصدري خطر أمني كبير.

⚠️ لا تخزن الأسرار في الكود أبداً. أي شخص لديه صلاحية الوصول إلى الـ repository يمكنه رؤيتها.

متغيرات البيئة (Environment Variables)

أبسط وأشهر طريقة لإدارة الأسرار:

# .env
DB_PASSWORD=supersecret123
JWT_SECRET=my-jwt-secret
STRIPE_API_KEY=sk_live_xxxxx
SENDGRID_API_KEY=SG.xxxxx

استخدم مكتبة dotenv لتحميل المتغيرات:

require('dotenv').config();

const dbPassword = process.env.DB_PASSWORD;
const jwtSecret = process.env.JWT_SECRET;

قواعد ملفات .env

  1. أضف .env إلى .gitignore
  2. أنشئ .env.example كمرجع بدون قيم حقيقية
  3. لا تشارك ملف .env مع أحد
# .env.example (آمن للنشر)
DB_PASSWORD=
JWT_SECRET=
STRIPE_API_KEY=

حلول Vault المركزية

HashiCorp Vault

const vault = require('node-vault')({
  apiVersion: 'v1',
  endpoint: 'https://vault.example.com',
  token: process.env.VAULT_TOKEN,
});

const secrets = await vault.read('secret/data/api');
const dbPassword = secrets.data.data.DB_PASSWORD;

AWS Secrets Manager

const { SecretsManager } = require('@aws-sdk/client-secrets-manager');

const client = new SecretsManager({ region: 'us-east-1' });
const secret = await client.getSecretValue({ SecretId: 'prod/db/password' });
const dbPassword = JSON.parse(secret.SecretString).password;

الأسرار في CI/CD

في GitHub Actions:

name: Deploy
on: [push]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy
        env:
          DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
          API_KEY: ${{ secrets.API_KEY }}
        run: ./deploy.sh

في Azure DevOps:

variables:
  - group: Production-Secrets

تدوير الأسرار (Secret Rotation)

استراتيجيات للتدوير الدوري للأسرار:

// استخدام توكنات قصيرة الأمد (STS)
const sts = new AWS.STS();
const tempCredentials = await sts.getSessionToken({
  DurationSeconds: 3600, // صلاحية ساعة
}).promise();

أفضل الممارسات

  • لا تطبع الأسرار في logs أبداً
  • لا تمرر الأسرار كـ arguments للدوال دون تأمين
  • استخدم بيئات منفصلة لكل مرحلة (dev, staging, production)
  • شفر الأسرار في قاعدة البيانات إذا اضطررت لتخزينها
  • استخدم أدوات الكشف مثل truffleHog و git-secrets لفحص commits
# فحص repository عن أسرار مسربة
npx trufflehog --regex --entropy=False https://github.com/user/repo

ملخص

  • استخدم متغيرات البيئة بدلاً من الكود الثابت
  • استخدم vaults مثل HashiCorp Vault للبيئات الكبيرة
  • لا تشارك ملفات .env أبداً
  • دمج الأسرار مع CI/CD pipelines
  • قم بتدوير الأسرار دورياً

🎯 التالي: تشفير البيانات (Data Encryption)

شرح إدارة الأسرار (Secrets Management) — أمن API وقواعد البيانات بالعربي
إدارة الأسرار (Secrets Management)أمن API وقواعد البيانات بالعربي · The Code Fix

هل كان هذا الدرس مفيدًا؟