تخطَّ إلى المحتوى
نسخة تجريبية

أمان بوابة Kubernetes

افتح مجموعة وانتقل إلى الأمان لتقرّر ما تسمح بوابتها المُدارة بمروره إلى مواقعك وواجهاتك البرمجية. يعمل كل إعداد على البوابة قبل أن يصل الطلب إلى حاوياتك، فلا تحتاج تطبيقاتك إلى أي تغيير.

يسري كل إعداد على كل أسماء المضيفين في المجموعة، أو على الأسماء التي تختارها فقط: اسم مضيف المجموعة نفسه، وأسماؤها الإضافية، ونطاقاتك الخاصة. ويظهر القسم ما دامت البوابة المُدارة مفعّلة، ولا يشمل الخدمات من نوع LoadBalancer.

كيف تُطبَّق التغييرات

  • لا يتغيّر شيء حتى تحفظ. أضف وعدّل وأعد الترتيب وأوقف وأزل كما تشاء، ويعدّ القسم تغييراتك غير المحفوظة. يعرض زر مراجعة وحفظ بالضبط ما سيتغيّر، ولا يصل شيء إلى البوابة حتى تؤكّد.
  • بعد دقيقة تقريبًا يسري التغيير. تعرض كل قاعدة جارٍ التطبيق حتى تُبلغ المجموعة عنها، ثم مُطبَّقة، أو فشل مع السبب.
  • شخصان يعدّلان في الوقت نفسه. إن حفظ أحدهم بعد أن فتحتَ الصفحة، يُرفض حفظك وتُحمَّل أحدث نسخة ويبقى تعديلك على الشاشة، لتراجعه من جديد.
  • من يستطيع التغيير. مالكو مساحة العمل ومشرفوها ومطوّروها؛ أما تشغيل القواعد المُدارة فيحتاج إلى مالك أو مشرف. والمشاهدون، وفريق الدعم حين يساعدك، يرون الإعدادات للقراءة فقط.

ما يسري دائمًا على كل اسم مضيف

ما إن يُفعَّل أي إعداد في هذه الصفحة حتى تطبّق البوابة ما يلي على كل أسماء المضيفين في المجموعة، أيًّا كانت إعدادات كل اسم:

  • تُنظَّف المسارات. تُدمج الشرطات المكرّرة، ويتلقّى المسار الذي فيه شرطة أو شرطة عكسية مرمّزة (%2F أو %5C) الرمز 400، فلا يمكن كتابة مسار بطريقتين للإفلات من قاعدة.
  • تُحسب مقاطع النقاط ذات المعاملات خطوات. مقطع . أو .. تتبعه معاملات ;، مثل /static/..;/admin، خطوة صعود في المسار عند بعض الخوادم، فتقرؤه البوابة كذلك وترى كل قاعدة /admin. وإن كُتب بفاصلة منقوطة مرمّزة (%3B) يتلقّى 403.
  • مُهل ملف الأمان وقواعد الترويسات تسري على كل اسم مضيف، ومنها التي لم تعطها إعدادات خاصة بها.
  • تُرفض سياسات البوابة الخاصة بك. ما دام أي شيء هنا مفعّلًا، ترفض المجموعة سياسات البوابة الجديدة في مساحات الأسماء الخاصة بك؛ انظر سياساتك الخاصة.

وتعرض مراجعة وحفظ هذه البنود حين يشغّل حفظٌ الأمانَ أول مرة.

يحصل اسم المضيف الذي له إعدادات خاصة به على مستمع خاص به في البوابة. والمسار الخاص بك المثبّت على المستمع الرئيسي للبوابة، بوضع sectionName: http في parentRefs، يتوقف حينها عن الإجابة على ذلك الاسم: تسمّي مراجعة وحفظ كل مسار كهذا، وينتظر الحفظ حتى تؤكّد. أزل sectionName من المسار ليجيب في كل مكان.

النظرة العامة وملف الأمان

تقول النظرة العامة إن كان أحدث تغيير قد طُبِّق، وكم طلبًا رفضته البوابة في آخر ساعة: المحظورة، والتي تجاوزت حد المعدّل، والتي رُفض تسجيل دخولها، والتي رصدتها القواعد المُدارة.

ملف الأمان هو الأساس الذي يحصل عليه كل اسم مضيف في المجموعة:

متوقفقياسيصارم
المسارات المحظورةلا شيء25: الملفات السرّية ولوحات الإدارة، مثل /.git و/.env و/.ssh و/wp-admin و/phpmyadmin، والنقاط والشرطات المرمّزة مرتين31: مسارات القياسي، ومعها نقاط التصحيح مثل /actuator و/debug/pprof
أكبر محتوى للطلببلا حد100 م.ب10 م.ب
المهلة المتاحة للعميل لإرسال ترويساتهبلا حد30 ث10 ث
إغلاق الاتصالات الخاملة بعدبلا حد300 ث60 ث
الطلبات في الثانية لكل عنوانبلا حدبلا حد20
أسماء الترويسات التي فيها شرطة سفليةمسموحةمسموحةمرفوضة

يشمل المسار المحظور كل ما يبدأ به: /.env يحظر أيضًا /.env.local، و/.git يحظر /.git/config. ويتلقّى طلب أيٍّ منها الرمز 403. يناسب القياسي أغلب المواقع؛ واختر الصارم لواجهة برمجية أو أداة إدارة لا تحتاج أبدًا إلى رفع ملفات كبيرة ولا إلى عملاء بطيئين. ولتقديم أحد المسارات المحظورة عن قصد، أضف قاعدة جدار حماية تسمح به: الطلب المسموح يتخطّى قائمة الملف.

ولضبط الملف بدقّة، عدّل المسارات المحظورة: أضف مساراتك، أو أزل أحد مسارات الملف، أو عُد إلى قائمة الملف، مع وسم كل مسار بـمن الملف أو مخصّص. وفي الحدود، أبقِ قيمة الملف، أو عيّن قيمتك، أو أوقف الحد: محتوى الطلب من 1 إلى 10,240 م.ب، ومهلة إرسال الترويسات من 1 إلى 300 ث، والاتصالات الخاملة من 5 إلى 3,600 ث، والطلبات لكل عنوان من 1 إلى 100,000 في الثانية. وتمرّ التعديلات بالمراجعة نفسها قبل الحفظ، وتبقى قائمتك وحدودك الخاصة عند تغيير الملف. ويسري كلاهما على كل أسماء المضيفين في المجموعة: ولحظر مسار على اسم مضيف واحد فقط، استخدم قاعدة جدار حماية.

قواعد جدار الحماية

تُفحص قواعد جدار الحماية من الأعلى إلى الأسفل لكل طلب، وأول قاعدة تطابقه تقرّر. والطلب الذي لا تطابقه أي قاعدة ينتقل إلى ملف الأمان.

الإجراءما يفعله
سماحيمرّر الطلب. تُتخطّى القواعد التالية ومسارات الملف المحظورة، وتبقى حدود المعدّل تحسبه
رفضيجيب بالرمز 403
سماح حصريداخل أسماء المضيفين والمسارات والطرق في القاعدة، لا يمرّر إلا الطلبات الآتية من العناوين المدرجة، أو الحاملة للترويسات المدرجة. وكل طلب آخر هناك يتلقّى 403

يطابق الطلب القاعدة حين يطابق كل حقل ملأته، ويكفي داخل الحقل الواحد أن يطابق إدخالًا واحدًا منه. والحقل المتروك فارغًا يطابق أي شيء.

  • عناوين العملاء: عناوين أو نطاقات IPv4 أو IPv6، مثل 203.0.113.10 أو 198.51.100.0/24. وهو عنوان الزائر نفسه كما وصل إلى حافة المنصّة.
  • المسارات: يساوي تمامًا يقارن المسار كله؛ ويبدأ بـ يقارن بدايته نصًّا؛ ويطابق النمط يأخذ تعبيرًا نمطيًا يجب أن يطابق المسار كله، مثل /api/v[0-9]+/internal/.*. ويقرأ النمط المسار وحده، لا نص الاستعلام بعد ?: في قاعدة سماح، يمرّر .*\.css$ الطلب /site.css?v=2 لا /.env?x=.css. وتبقى الأنماط بسيطة لتبقى سريعة: لا نظر أمامي ولا خلفي ولا إحالات خلفية، وتكراران معدودان على الأكثر مثل {2,5} لا يتجاوز أيٌّ منهما 30، و200 حرف على الأكثر.
  • الطرق: GET وPOST وغيرهما. وعدم اختيار أي طريقة يطابق كل الطرق. وقاعدة رفض أو سماح حصري، وحد المعدّل، التي تسمّي طرقًا تأخذ أيضًا HEAD مع GET، وOPTIONS، لأن الخوادم تجيب عنها من المعالجات نفسها.
  • الترويسات: يجب أن تكون كل ترويسة مدرجة على الطلب بإحدى قيمها. ولا يمكن مطابقة الترويسات التي تضبطها المنصّة، مثل Host وX-Forwarded-For وAuthorization وCookie.

استخدم الأسهم لتغيير الترتيب، والمفتاح لإيقاف قاعدة دون إزالتها.

مثال: حظر ‎/.git‎ و‎/.env‎

يحظرهما الملف القياسي أصلًا. فإن كان الملف متوقفًا، أو للتأكّد، أضف قاعدة:

الحقلالقيمة
الاسمحظر الملفات السرّية
الإجراءرفض
المساراتيبدأ بـ /.git، يبدأ بـ /.env
تسري علىكل أسماء المضيفين في هذه المجموعة

ويعرض قسم قواعد جدار الحماية الفارغ هذه القاعدة مثالًا تبدأ منه.

مثال: السماح بـ ‎/admin‎ من مكتبك فقط

الحقلالقيمة
الاسمالإدارة من المكتب فقط
الإجراءسماح حصري
المساراتيبدأ بـ /admin
عناوين العملاءعنوان مكتبك، مثل 203.0.113.10
تسري علىاسم المضيف الذي يقدّم صفحات الإدارة فقط

يتلقّى كل من عداك 403 على /admin وما تحته، ويبقى باقي الموقع كما هو. وإن كان لمكتبك عدة عناوين، فاكتب كلًّا منها في سطر، أو اكتب النطاق.

وقاعدة الرفض أو السماح الحصري المحدودة بأسماء مضيفين تسري أيضًا على اسم المضيف الخاص بالمجموعة، ما لم توقف طبّقها أيضًا على اسم المضيف الخاص بالمجموعة: فأسماء مضيفيك الأخرى تشير إليه، والمسار الذي لا يحدد أسماء مضيفين يقدّم الصفحات نفسها هناك، فيتجاوز طلبٌ لذلك الاسم القاعدة. أما قاعدة السماح فتسري على أسماء المضيفين التي تسمّيها فقط. وتنبّهك مراجعة وحفظ حين يظل مسار يقدّم صفحات القاعدة على اسم مضيف لا تغطيه القاعدة.

تحديد المعدّل

يحدّ حد المعدّل عدد الطلبات التي يرسلها عنوان عميل واحد: محسوبةً لكل اسم مضيف، أو لكل اسم مضيف ومسار حين تحدّد مسارًا. وفوق الحد تجيب البوابة بالرمز 429.

  • الحد: عدد الطلبات في الثانية أو الدقيقة أو الساعة.
  • الدفعة: يمكن للعميل أن يستهلك حصة المدة كاملة دفعةً واحدة، ثم ينتظر حتى تمتلئ من جديد. فحدّ 600 في الدقيقة يمرّر 600 طلب دفعةً واحدة، ثم نحو 10 في الثانية.
  • تسري على: كل أسماء المضيفين أو التي تختارها، ومسار واحد على الأكثر، واختياريًا بعض الطرق فقط.
  • وأيضًا على اسم المضيف الخاص بالمجموعة: مفعّل افتراضيًا للحد المحدود بأسماء مضيفين، فلا يتجاوزه عميل عبر الاسم الذي تشير إليه الأسماء الأخرى؛ ويُحتسب هناك على حدة. وتنبّهك مراجعة وحفظ حين يقدّم مسار الصفحات المحدودة على اسم مضيف لا يغطيه الحد.
  • يُحسب لكل وكيل. تشغّل البوابة عدة وكلاء ويحسب كلٌّ منهم ما يصله، فتقسم المنصّة كل حد بينهم: يبقى مجموع العميل قريبًا من الحد. والحد الأقل من عدد الوكلاء يمرّر طلبًا واحدًا لكل وكيل.

مثال: تحديد معدّل ‎/api‎

الحقلالقيمة
الاسمالواجهة البرمجية
الحد10 في الثانية
المساراتيبدأ بـ /api

يستطيع حينها كل عنوان عميل أن يرسل 10 طلبات في الثانية إلى /api على كل اسم مضيف؛ والعميل الذي يتجاوزها يتلقّى 429 حتى تمتلئ حصته. وتبقى الطلبات المسموحة والطلبات التي تمرّرها قاعدة جدار حماية محسوبة.

المصادقة

تطلب المصادقة اسم مستخدم وكلمة مرور قبل أي صفحة من اسم مضيف، في نافذة تسجيل الدخول الخاصة بالمتصفح. استخدمها لمواقع الاختبار والأدوات الداخلية التي لا يجب أن تكون عامة.

  • المستخدمون: حتى 50 لكل اسم مضيف، لكلٍّ منهم كلمة مرور من 12 إلى 128 حرفًا.
  • تُدخَل كلمات المرور مرة واحدة ولا تُعرض مرة أخرى، لا في لوحة التحكم ولا عبر الواجهة البرمجية: لا تحتفظ المنصّة إلا بقيمة مُجزّأة منها. وحين تعدّل مستخدمًا، اترك كلمة المرور فارغة للإبقاء عليها. واحتفظ بكلمات المرور في مدير كلمات المرور الخاص بك.
  • اشتراط عنوان أيضًا: اختياري. مع إدراج عناوين، يحتاج الزائر إلى عنوان مسموح وكلمة مرور صحيحة معًا.
  • تتلقّى الطلبات التي بلا كلمة مرور صحيحة الرمز 401.
  • أيضًا على اسم المضيف الخاص بالمجموعة: مفعّل افتراضيًا. تشير أسماء مضيفيك الأخرى إلى اسم المضيف الخاص بالمجموعة، فالمسار الذي لا يحدد أسماء مضيفين يقدّم الصفحات نفسها هناك أيضًا؛ ومع تفعيل هذا يطلب ذلك الاسم تسجيل الدخول نفسه. وحين تغطيه عمليات تسجيل دخول لعدة أسماء مضيفين، لا يدخل إلا مستخدم تشترك فيه كلها، بكلمة المرور نفسها، ومن عنوان تسمح به كلها؛ وإن لم تشترك في شيء، لا يُدخل اسم المضيف الخاص بالمجموعة أحدًا. أوقفه فقط حين يقدّم ذلك الاسم مواقع يفتحها أي أحد، وأعطِ المسارات المحمية أسماء مضيفين خاصة بها.
  • لا يُفتح خطأً أبدًا: إن تعذّرت قراءة كلمة مرور محفوظة، لا يُدخل اسم المضيف أحدًا، ويعلّم قسم الأمان تسجيل الدخول بأنه فشل، حتى تعيّن كلمات المرور من جديد.

وتسجيل الدخول بالرموز (JWT) والدخول الموحّد (OIDC) قادمان قريبًا.

مثال: مصادقة بكلمة مرور لاسم مضيف الاختبار

  1. في المصادقة، اختر حماية اسم مضيف، ثم اختر اسم مضيف الاختبار، مثل staging.example.com.
  2. أضف مستخدمًا، مثل team، بكلمة مرور طويلة.
  3. اختر مراجعة وحفظ. بعد دقيقة، يطلب اسم المضيف واسم المضيف الخاص بالمجموعة اسم المستخدم وكلمة المرور. ولا تطلبه أسماء مضيفيك الأخرى إلا إن قدّم لها مسارٌ الصفحات نفسها: تنبّهك مراجعة وحفظ قبل الحفظ حين يظل مسار بلا أسماء مضيفين، أو بعدة أسماء، يقدّم الصفحات المحمية على اسم مضيف بلا تسجيل دخول. أعطِ ذلك المسار أسماء مضيفين خاصة به، أو احمِ تلك الأسماء أيضًا.

CORS

يسمح CORS لصفحات الويب على مصادر أخرى باستدعاء اسم مضيف من المتصفح، مثل تطبيق صفحة واحدة على https://app.example.com يستدعي واجهة برمجية على api.example.com. تجيب البوابة عن طلبات الفحص المسبق التي يرسلها المتصفح وتضيف ترويسات CORS، فلا تحتاج واجهتك البرمجية إلى ذلك.

الإعدادمعناه
المصادر المسموح بهاhttps://app.example.com، واحد في كل سطر، أو * لأي مصدر
الطرقالطرق التي تستخدمها تلك الصفحات
ترويسات الطلب المسموح بهاترويسات تتجاوز البسيطة ترسلها الصفحة، مثل content-type
ترويسات الاستجابة التي تقرؤها الصفحةترويسات تتجاوز البسيطة يقرؤها كود الصفحة
مدة تخزين إجابات الفحص المسبقمن 0 إلى 86,400 ثانية، و600 افتراضيًا
السماح ببيانات الاعتماديسمح للمتصفح بإرسال ملفات تعريف الارتباط، ويحتاج إلى مصادر مسمّاة لا * ولا نمط مثل https://*.example.com

لكل اسم مضيف إعداد CORS واحد. وإن كان تطبيقك يرسل ترويسات CORS بنفسه، فاترك هذا متوقفًا لاسم مضيفه.

القواعد المُدارة

تفحص القواعد المُدارة كل طلب بحثًا عن الهجمات الشائعة، مثل حقن SQL والبرمجة عبر المواقع واجتياز المسارات، بمجموعة قواعد تحدّثها المنصّة باستمرار.

الوضعما يفعله
متوقفةلا تُفحص الطلبات
رصد فقطتُفحص الطلبات وتُحسب ولا تُحظر أبدًا
حظرالطلبات التي ترصدها القواعد تتلقّى 403

تمتد الصرامة من المستوى 1، بإنذارات كاذبة قليلة، إلى المستوى 4، الأشد صرامة. والمستوى الأعلى يلتقط هجمات أكثر ويرصد طلبات عادية أكثر خطأً. ابدأ بوضع رصد فقط على المستوى 1، وراقب العدد في النظرة العامة بضعة أيام، ثم انتقل إلى حظر، وارفع المستوى درجة واحدة في كل مرة.

  • الذاكرة. تضيف القواعد المُدارة نحو 600 ميغابايت من الذاكرة إلى كل وكيل من وكلاء البوابة، على عُقد العمل لديك، وتحجزها المنصّة لها. وإن لم تجد عقدة عمل فيها مكان، يقول الأمان ما تفتقر إليه العُقد وينتظر الوكيل: أضف عقدة عمل، أو استخدم عُقدًا أكبر، أو أوقف القواعد المُدارة.
  • تسري على. كل أسماء المضيفين، أو التي تختارها ومعها اسم المضيف الخاص بالمجموعة ما لم توقف ذلك، فلا تتجاوز الطلبات القواعد عبر الاسم الذي تشير إليه الأسماء الأخرى. وتنبّهك مراجعة وحفظ حين يقدّم مسار الصفحات نفسها على اسم مضيف لا تغطيه القواعد.
  • من يشغّلها. مالك مساحة العمل أو مشرفها. وبعد تشغيلها يستطيع كل من يحق له تغيير المجموعة أن يغيّر الوضع والصرامة، أو يوقفها.

تُطرح القواعد المُدارة تدريجيًا. وحتى تستطيع مجموعة تشغيلها، يعرض القسم قريبًا.

وكلاء البوابة

تمرّر البوابة المُدارة حركتها عبر وكلاء على عُقد العمل لديك، سواء أكان أي إعداد هنا مفعّلًا أم لا.

  • كم عددهم. وكيل واحد في مجموعة بعقدة عمل واحدة. وما إن تصبح للمجموعة عقدتا عمل حتى يعمل وكيلان، واحد لكل عقدة، ومع ازدياد الحِمل حتى وكيل لكل عقدة، ستة على الأكثر. ولا تُحتسب عقدة عمل تُبعد قيودُها (taints) الحاوياتِ الأخرى، مثل مجمّع بمعالجات رسومية. ولا يتشارك وكيلان عقدة واحدة ما دام لكلٍّ منهما عقدته، ففقدان عقدة يبقي الآخرين يخدمون؛ وحين تُخلى عقدة أو تتعطل، قد يتشارك وكيلان عقدة واحدة بدل الانتظار.
  • ما يحجزونه. يحجز كل وكيل 0.2 من المعالج و256 ميغابايت من الذاكرة على عقدة عمل، و1 غيغابايت مع تشغيل القواعد المُدارة، ويمكنه استخدام معالجين اثنين على الأكثر.
  • التحديثات وإخلاء العُقد. يبدأ الوكيل الجديد قبل أن يتوقف القديم، ولا تُخلى عقدة عمل إلا ووكيل آخر يواصل الخدمة، فلا تتوقف الحركة.
  • المزيد منهم. في وكلاء البوابة، ارفع على الأقل وعلى الأكثر، حتى 10 لكلٍّ منهما. ولا يعمل أبدًا أكثر من وكيل لكل عقدة: أضف عُقد عمل لتشغيل المزيد. ولا تتجاوز المجموعة الحد الأدنى إلا ما دامت تقدّم مقاييس الحاويات.

سياساتك الخاصة

هذه الإعدادات تخصّ البوابة المُدارة. وما دام أي شيء هنا مفعّلًا، ترفض المجموعة سياسات البوابة الجديدة في مساحات الأسماء الخاصة بك، فلا تحلّ أي منها محلّ هذه الإعدادات. أما السياسة التي كانت موجودة حين شغّلت الأمان فتظل تحلّ محلّ هذه الإعدادات لمساراتها: يعرض الأمان، ومراجعة وحفظ قبل أن تشغّله، كل واحدة منها بمساحة أسمائها واسمها. أزل سياستك لتسري إعدادات المجموعة.

الحدود

الحد
قواعد جدار الحماية200 لكل مجموعة
العناوين عبر قواعد جدار الحماية وتسجيل الدخول1,000 لكل مجموعة
المسارات في قاعدة جدار الحماية الواحدة16
الترويسات في قاعدة جدار الحماية الواحدة8، لكلٍّ منها 16 قيمة
حدود المعدّل7 لكل مجموعة، بمسار واحد لكلٍّ منها
أسماء المضيفين التي عليها تسجيل دخول50، لكلٍّ منها 50 مستخدمًا و100 نطاق عناوين
أسماء المضيفين التي عليها CORS50، لكلٍّ منها 32 مصدرًا
أسماء المضيفين التي لها إعدادات خاصة بها، عبر كل الأقسام50

الواجهة البرمجية

الطلبما يفعله
GET /v1/kubernetes/clusters/{id}/gateway/securityالإعدادات، وstatus لكل قاعدة (applied أو pending أو failed أو disabled) مع reason، وrevision
PUT /v1/kubernetes/clusters/{id}/gateway/securityيستبدل كل قسم موجود في المحتوى: profile أو firewall أو rateLimits أو auth أو cors أو waf. وتبقى الأقسام المتروكة كما هي
GET /v1/kubernetes/clusters/{id}/gateway/security/stats?windowMinutes=60الطلبات المرفوضة، إجمالًا ولكل قاعدة، في آخر 5 إلى 1,440 دقيقة

يحمل كل طلب PUT قيمة revision التي قرأتها: والطلب الذي بلا هذه القيمة يتلقّى 400، ويُرفض الحفظ بالرمز 409 CONFLICT إن حفظ أحدهم بينهما. ولا تُرسَل password لمستخدم إلا لتعيينها أو تغييرها، ولا تظهر أبدًا في أي استجابة. واستخدم مفتاح API يحمل kubernetes:update للكتابة.

json
{
  "revision": 4,
  "firewall": [
    {
      "name": "Block secret files",
      "action": "deny",
      "paths": [
        { "type": "prefix", "value": "/.git" },
        { "type": "prefix", "value": "/.env" }
      ]
    }
  ]
}