لطالما كان نموذج "القصر والخندق" هو النموذج السائد لأمن الأنظمة الموزعة. لقد قمنا بتحصين حدود شبكتنا باستخدام جدران الحماية وأنظمة كشف التسلل، ووثقنا بأن كل ما داخل أسوار القصر آمن. ومع ذلك، أدى ظهور الخدمات المصغرة إلى تآكل هذه الحدود. مع وجود مئات الخدمات المؤقتة التي تتواصل ديناميكياً، لم يعد مفهوم الشبكة الداخلية الموثوقة قابلاً للتطبيق. يمكن أن يكون اختراق خدمة داخلية مدمراً بنفس قدر اختراق خارجي.
هنا تصبح بنية الثقة الصفرية (ZTA) ضرورية. المبدأ الأساسي للثقة الصفرية بسيط وعميق في آن واحد: لا تثق أبداً، وتحقق دائماً. في سياق الخدمات المصغرة، يعني هذا التعامل مع كل تفاعل بين خدمة وأخرى كما لو كان ناتجاً عن شبكة غير موثوقة. يستكشف هذا المقال كيفية تنفيذ هذه المبادئ عملياً، مع التركيز على TLS المتبادل (mTLS) وتقنيات شبكة الخدمات.
التحول من الشبكة إلى الهوية
في التطبيقات أحادية البنية التقليدية، كان المصادقة تعتمد غالباً على الموقع الشبكي للطلب. في بيئة الخدمات المصغرة، يتم نشر الخدمات عبر مساحات عمل (namespaces) وعقد مختلفة، وربما عبر مزودي سحابة متعددين. عناوين IP مؤقتة وغير موثوقة لاتخاذ قرارات الثقة. لذلك، تنقل الثقة الصفرية حدود الثقة من الشبكة إلى الهوية.
يجب مصادقة كل طلب وتفويضه بناءً على هوية المرسل والمستقبل. يتطلب هذا نظام إدارة الهوية والوصول (IAM) قويًا ومتكاملًا بشكل وثيق مع طبقة الاتصال. ننتقل من سؤال "من يسأل؟" (عنوان IP) إلى سؤال "ما هي عبء العمل هذا تحديداً؟" (حساب الخدمة/الهوية).
فرض التشفير باستخدام mTLS
المكون التقني الأكثر أهمية للثقة الصفرية في الخدمات المصغرة هو ضمان تشفير جميع حركة المرور أثناء النقل، حتى بين الخدمات الداخلية. يتم تحقيق ذلك من خلال TLS المتبادل (mTLS). على عكس TLS القياسي، حيث يتحقق العميل من هوية الخادم، يتطلب mTLS من كلا الطرفين تقديم شهادات. يضمن ذلك ليس فقط تشفير البيانات، بل أيضاً أن شريك الاتصال هو من يدعي أنه.
إدارة الشهادات يدوياً لمئات الخدمات هي كابوس تشغيلي. هنا تصبح شبكة الخدمات، مثل Istio أو Linkerd، لا تقدر بثمن. فهي تنقل العمليات التشفيرية إلى وكيل جانبى (sidecar proxy)، مما يسمح للمطورين بكتابة رمز التطبيق دون القلق بشأن إدارة دورة حياة الشهادات.
التطبيق العملي: حقن وكيل Istio الجانبي
لنلقِ نظرة على مثال عملي باستخدام Istio، وهو رائد في مجال شبكات الخدمات. من خلال تمكين الحقن التلقائي للوكيل الجانبي، نضمن أن كل حاوية (pod) يتم نشرها في مساحة العمل تحصل تلقائياً على حاوية وكيل يتم حقنها. يقوم هذا الوكيل باعتراض جميع حركة المرور الداخلة والخارجة، وفرض السياسات والتعامل مع mTLS.
أولاً، نُمكّن TLS المتبادل عبر الشبكة بأكملها. يضمن هذا التكوين عدم السماح بحركة المرور النصية العادية بين الخدمات.
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT
وضع STRICT حاسم. فهو يرفض أي اتصال لا يقدم شهادة عميل صالحة. إذا حاولت خدمة خبيثة التواصل مع خدمة محمية بدون بيانات اعتماد مناسبة، سيتم قطع الاتصال على الفور.
التحكم الدقيق في الوصول باستخدام سياسات التفويض
التشفير وحده ليس كافياً؛ يجب علينا أيضاً التحكم في من يمكنه التحدث مع من. تدعو الثقة الصفرية إلى مبدأ الحد الأدنى من الامتيازات. مجرد قدرة خدمة ما على الاتصال بأخرى لا يعني أنها يجب أن تفعل ذلك بشكل افتراضي.
يمكننا فرض ذلك باستخدام موارد AuthorizationPolicy. على سبيل المثال، قد نحدد سياسة تسمح فقط لـ frontend-service بالوصول إلى api-gateway، بينما تحظر الوصول المباشر من الخدمات الأخرى.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: allow-frontend-to-gateway
namespace: production
spec:
selector:
matchLabels:
app: api-gateway
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/frontend-service"]
في هذا المثال، يشير حقل principals إلى هوية حساب الخدمة. يضمن ذلك أنه حتى لو تمكن مهاجم من اختراق حاوية لها نفس عنوان IP أو اسم المضيف، فلن يتمكن من الوصول إلى البوابة ما لم يكن يمتلك رموز الهوية الصالحة.
الخاتمة
إن تنفيذ الثقة الصفرية في اتصالات الخدمات المصغرة ليس إعداداً لمرة واحدة، بل هو عملية مستمرة للتحقق من الهوية وفرض سياسات الحد الأدنى من الامتيازات. من خلال الاستفادة من أدوات مثل شبكات الخدمات، يمكن للمطورين نقل تعقيد الأمان من رمز التطبيق إلى طبقة البنية التحتية. يتيح ذلك للفرق بناء تطبيقات مرنة وآمنة يمكنها الصمود أمام الهجمات الخارجية والاختراقات الداخلية. مع نمو بنيتك التحتية، تذكر أن الثقة لا تُفترض أبداً؛ بل تُكسب دائماً من خلال التحقق.