عميل قاعدة بيانات محلي مع RDS خاصة: لماذا تنتهي مهلة الاتصال
لا يستطيع عميل محلي الوصول إلى نسخة RDS خاصة لثلاثة أسباب منفصلة. تحقق من DNS المنقسم والمسار ودليل مجموعة الأمان قبل أن تغير أي شيء.
تنتهي مهلة حاسوب محمول لمطوّر أثناء الاتصال بنقطة نهاية RDS الخاصة، بينما تعمل بيانات الاعتماد نفسها من مضيف وسيط. لا شيء متوقف. المسار بين ذلك الحاسوب وقاعدة البيانات ينقصه أحد ثلاثة أشياء: اسم يُترجَم، أو مسار يحمل الحركة، أو قاعدة في مجموعة أمان تسمح بالمصدر الذي تراه قاعدة البيانات فعلًا. اكتشف أيها ناقص قبل تغيير الاثنين الآخرين.
اقرأ الفشل في الطبقة الصحيحة
انتهاء المهلة ليس خطأ واحدًا. الاسم الذي لا يُترجَم يفشل قبل أن تغادر حزمة الجهاز. العنوان الذي لا يوجد له مسار يرسل الحزم إلى ثقب أسود. المنفذ المفلتر ينتج انتظارًا يشبه تمامًا مضيفًا خاطئًا. نفّذ الخطوات بالترتيب وتوقف عند أول خطوة تفشل.
dig +short db.internal.example
nc -vz db.internal.example 5432
إذا أعاد الاسم عنوانًا عامًا، أو لم يرجع بأي شيء، فالنفق ليس المشكلة بعد.
إذا تُرجم الاسم وتعلّق اختبار المنفذ، فقارن العنوان الذي ترجمته بالعنوان الذي تبلغ عنه قاعدة البيانات. قد تُترجم نقطة نهاية مُدارة إلى عنوان خاص داخل VPC وإلى لا شيء مفيد خارجها، والعنوان المنسوخ من بحث قديم سيؤدي إلى مضيف لم يعد يجيب.
افصل النفق عن المسار
الاتصال بـ VPN عميل لا يوجّه كل نطاق خاص تلقائيًا. يحمل الملف الشخصي المسارات التي تدفعها الخدمة، وقد يثبّت العميل بعضها فقط. انظر إلى النطاقات التي أضافها العميل فعلًا وما إذا كان عنوان قاعدة البيانات يقع داخل أحدها.
ip route get 10.20.40.15
ip addr show tun0
المسار الذي يشير إلى واجهة النفق ضروري؛ لكنه ليس كافيًا، لأن الطرف البعيد ما زال عليه قبول الحركة.
ملفات النفق المنقسم هي المصدر المعتاد لهذا الفشل النصفي. إنها تعمل للتطبيق الذي صُمم الملف من أجله وتترك نطاق قاعدة البيانات خارج النفق، وهذا ينتج بالضبط انتهاء المهلة الذي ينتجه جدار الحماية.
طابق مجموعة الأمان مع المصدر الحقيقي
مجموعة أمان RDS تسمح بالمصادر، لا بالأشخاص. حسب البنية، قد يكون المصدر مجموعة عملاء VPN، أو العنوان الخاص لمضيف وسيط، أو عنوان NAT تُترجم إليه الحركة. اقرأ القاعدة ومصدر الحزمة الفعلي معًا.
aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
--query 'SecurityGroups[].IpPermissions'
قاعدة لعنوان منزل حاسوب محمول واحد مشكلة صيانة لا تصميم وصول.
عندما يوجد VPN عميل أو بوابة NAT في المسار، قد ترى قاعدة البيانات عنوان المترجم بدلًا من عنوان نفق المطوّر. لهذا يمكن أن تفشل قاعدة نُسخت من إعداد مضيف وسيط ناجح مع حاسوب محمول: المساران يصلان من مصدرين مختلفين رغم أن كليهما يبدو داخليًا.
فضّل المسار الضيق على الواسع
عندما يحتاج مطوّر واحد إلى قاعدة بيانات واحدة، غالبًا ما يكون التمرير القائم على الجلسة أرخص تشغيلًا من نفق شبكة كامل. يتصل العميل المحلي بمنفذ مُمرَّر، ويُنشئ المكوّن البعيد اتصال قاعدة البيانات من داخل الشبكة.
ssh -N -L 5432:db.internal.example:5432 bastion.internal.example
احتفظ بتحقق TLS سليمًا في ذلك التصميم. على العميل أن يتحقق من شهادة الخادم مقابل الاسم الذي يتوقعه؛ المنفذ المُمرَّر المحلي ليس سببًا لتعطيل التحقق، وتعطيله يخفي بالضبط مشكلة الهوية التي تستحق الالتقاط.
الاختيار بين نفق كامل وتمرير ضيق قرار يتعلق بالنطاق، لا بمسرح الأمان.
اترك مسارًا قابلًا للتكرار
وثّق اسم نقطة النهاية بدلًا من عنوان مترجم، ونطاق المصدر الذي تسمح به مجموعة الأمان، ودور قاعدة البيانات الذي يستخدمه المطوّر. هذه الحقائق الثلاث تفسر معظم حالات الفشل المستقبلية دون اتصال. أضف إصدار ملف العميل أيضًا، لأن تغيير الملف قد يزيل مسارًا كان الملف القديم يحمله.
ثم اختبر الحالة السلبية مرة واحدة: يجب أن يبقى العميل خارج المصدر المعتمد مرفوضًا.
قاعدة بيانات خاصة تعمل فقط للشخص الذي أعدّها ليست وصولًا خاصًا؛ إنها استثناء غير موثق ينتظر أن يُعاد اكتشافه. اكتب المسار، وسيرث المطوّر التالي طريقة بدلًا من لغز.