RDS خاص من EC2: نفس VPC أم الاقتران أم شيء آخر؟
اختر المسار قبل مجموعة الأمان: نفس VPC، أو الاقتران، أو VPC مشترك، أو ربط خاص.
يصل حاسوب المطور المحمول إلى نسخة RDS الخاصة عبر VPN الموظفين، بينما لا يستطيع التطبيق على EC2 الاتصال إطلاقًا. هذا ليس نشرًا معطلًا. فالحاسوب المحمول لديه نفق لا ترثه نسخة EC2 أبدًا، وكلمة «خاص» في RDS تعني أن قاعدة البيانات ليس لها نقطة نهاية عامة، لا أن مستخدمي VPN البشريين هم المتصلون المسموح لهم وحدهم. يحتاج التطبيق إلى مساره المصرح به، وعلاقته الخاصة بمجموعة الأمان، وهويته الخاصة في قاعدة البيانات، والترتيب الذي تختار به هذه الثلاثة يوفر معظم عملية التصحيح. حدد المسار أولًا، ثم الأذونات، ثم تحقق من البيئة المنشورة بدلًا من مكتبك.
VPN الحاسوب المحمول ليس مسار التطبيق
أيًا كان ما يفعله VPN الموظفين للأشخاص، فهو لا يفعل شيئًا لنسخة ما، إلا إذا كانت تلك النسخة جزءًا صريحًا من مسار الشبكة نفسه. تصل نسخة EC2 الموجودة في شبكة فرعية خاصة إلى RDS عبر توجيه VPC ومجموعات الأمان وقوائم التحكم في الوصول بالشبكة. وهي لا ترث نفق إنسان أو جلسة إنسان أو بيانات اعتماد إنسان، ولا ينبغي لها ذلك: يجب أن يكون اتصال التطبيقات غير المراقب والوصول البعيد للموظفين قابلين للتشغيل بشكل مستقل.
هذا الاستقلال ميزة. فعندما يكون VPN معطلًا، يستمر التطبيق في العمل. وعندما يسلك التطبيق سلوكًا سيئًا، لا يفقد أحد وصوله البعيد. التصاميم التي تدمج الاثنين في مسار واحد يُكتشف أمرها عادةً أثناء حادث، في أسوأ لحظة ممكنة.
القرار 1: نفس VPC، مسار مباشر
عندما يكون التطبيق وقاعدة البيانات في نفس VPC مع توجيه مباشر ودون أي صندوق وسيط للتفتيش بينهما، يكون المسار بسيطًا ويكون مرجع مجموعة الأمان أقوى أداة متاحة. امنح التطبيق مجموعته الخاصة، ثم اسمح بمنفذ قاعدة البيانات من تلك المجموعة بدلًا من نطاق عناوين:
aws ec2 authorize-security-group-ingress --group-id sg-0db123 --protocol tcp --port 5432 --source-group sg-0app456
aws rds describe-db-instances --db-instance-identifier prod-db --query 'DBInstances[0].{Endpoint:Endpoint.Address,Port:Endpoint.Port,Public:PubliclyAccessible,Groups:VpcSecurityGroups}'
المنفذ للتوضيح ويجب أن يطابق المحرك. مرجع المجموعة يصرح بالحركة من نسخ التطبيق؛ وهو لا ينسخ قواعدها، ولا ينشئ تسجيل دخول إلى قاعدة البيانات. مشكلتان منفصلتان، وحلان منفصلان.
ثم افحص بقية المسار بدلًا من التوقف عند القاعدة التي أضفتها للتو. يجب أن تتفق سياسة الصادر في التطبيق، والمجموعة الكاملة للمجموعات المرفقة بقاعدة البيانات، وجداول توجيه الشبكة الفرعية، وأي قوائم تحكم في الوصول بالشبكة. قواعد مجموعات الأمان ذات حالة، بينما يجب أن تسمح قائمة تحكم مخصصة بالطلب وحركة العودة في قاعدتين منفصلتين، بما في ذلك المنافذ العابرة. والقاعدة الجديدة الضيقة لقاعدة البيانات لا تلغي أيضًا سماحًا قديمًا واسعًا كان مرفقًا من قبل.
القرار 2: VPC مختلفة أو حساب آخر
إذا كان التطبيق في VPC أخرى، يختار مالكو الشبكة ربطًا خاصًا مدعومًا: الاقتران، أو تصميم عبور، أو ترتيب VPC مشترك. عندئذ يجب أن يوجد التوجيه في الاتجاهين، ويجب أن يعمل حل الأسماء لنقطة نهاية RDS، ويجب أن يطابق المصدر الذي تقيّمه سياسة قاعدة البيانات ما يصل فعليًا. أما تطابق أسماء الحسابات أو وجود علاقة فوترة مشتركة فلا يوفر أيًا من ذلك.
مرجع مجموعة الأمان هو الجزء الذي يتباين. فهو يعمل في عدة تصاميم ربط خاص، لكنه يتوقف عن العمل لحظة أن يعيد صندوق وسيط كتابة المصدر أو ينهي الاتصال، لأن قاعدة البيانات ترى عندئذ الصندوق الوسيط بدلًا من مجموعة تطبيقك. إن سيناريوهات VPC في RDS تفصل الوصول ضمن نفس VPC عن الترتيبات الأخرى، ويستحق الأمر فحص طوبولوجيتك المحددة مقابلها قبل افتراض أن نمط قاعدة ما ينتقل معك.
لا تحل مشكلة مسار مفقود بجعل قاعدة البيانات متاحة للعامة. فهذا قرار تعريض مختلف بمالك مختلف، وعادةً ما يقترحه الشخص الأبعد عن العواقب.
القرار 3: أي هوية تقبلها قاعدة البيانات
الوصول الشبكي ومصادقة قاعدة البيانات طبقتان منفصلتان، ودمجهما ينتج أكثر الأخطاء تضليلًا. دور النسخة هو هوية AWS لاستدعاء واجهات AWS البرمجية. وهو ليس مستخدم قاعدة بيانات. مصادقة قاعدة البيانات عبر IAM ميزة مدعومة حيث يسمح المحرك والإعداد بذلك، وهي لا تزال تعيينًا إلى مستخدم قاعدة بيانات وليست بديلًا عنه.
استخدم اسم نقطة نهاية RDS في إعداد التطبيق بدلًا من عنوان التقطته من بحث واحد. فتحويل الخدمة عند الفشل في Multi-AZ يغيّر العنوان خلف ذلك الاسم، والتطبيق المثبت على عنوان IP سيفشل في اللحظة التي يحتاج فيها إليه بالضبط. أبقِ تحقق TLS في المحرك مفعّلًا بدلًا من تعطيله لإخفاء خطأ ما، لأن فشل التحقق يخبرك بشيء عن نقطة النهاية التي وصلت إليها.
ثم امنح حساب قاعدة البيانات الحد الأدنى الذي يحتاجه التطبيق، في المخطط الذي يستخدمه فعليًا. هذا العمل ممل، وقابل للتدقيق، وهو الجزء الذي سيسأل عنه مراجعة الحادث.
تحقق من البيئة المنشورة
اختبر من النسخة أو من مهمة تعمل بنفس المجموعة والشبكة الفرعية والدور. أربعة أعطال تبدو متشابهة من الحاسوب المحمول ويسهل تمييزها من هناك: اسم لا يُحل، واتصال تنتهي مهلته، وفشل تحقق TLS، وتسجيل دخول مرفوض إلى قاعدة البيانات. كل واحد منها يشير إلى حد مختلف، وتغيير تعريض قاعدة البيانات قبل معرفة أيها لديك هو تخمين.
psql "host=prod-db.abc123.eu-west-1.rds.amazonaws.com port=5432 dbname=app sslmode=verify-full" -c 'select 1'
إذا نجح الاتصال من النسخة وفشل من مكتبك، فمسار التطبيق سليم ووصولك هو ما يجب إصلاحه. وإذا فشل من كليهما، فابدأ بفحوص المجموعة والمسار أعلاه بدلًا من بيانات الاعتماد. تلك المقارنة الواحدة تمنع معظم الاضطراب الذي تنتجه هذه التذاكر.