"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > الحصول على عنوان IP الفعلي للعميل عند استخدام موازن تحميل التطبيق (ALB) في AWS Lambda

الحصول على عنوان IP الفعلي للعميل عند استخدام موازن تحميل التطبيق (ALB) في AWS Lambda

تم النشر بتاريخ 2024-08-06
تصفح:255

Getting the Actual Client IP When Using Application Load Balancer (ALB) in AWS Lambda

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

قادني هذا الاكتشاف إلى طريق التحقيق والتعلم. اضطررت إلى البحث بشكل أعمق لفهم ما كان يحدث وكيفية استرداد عنوان IP الحقيقي للعميل. في هذه المدونة، سأشارك تجربتي وأقدم دليلاً شاملاً حول كيفية تحقيق ذلك باستخدام AWS Lambda وPython، مما يضمن إمكانية التقاط عنوان IP الخاص بالعميل بدقة عند استخدام Application Load Balancer (ALB).

فهم التحدي

عندما يقوم العميل بتقديم طلب إلى التطبيق الخاص بك من خلال ALB، يعمل موازن التحميل كوسيط. وبالتالي، فإن عنوان IP الذي يراه تطبيقك هو عنوان ALB، وليس عنوان العميل. لمعالجة هذه المشكلة، يقوم ALB بتضمين عنوان IP الخاص بالعميل في رأس X-Forwarded-For HTTP. يمكن أن يحتوي هذا الرأس على عناوين IP متعددة في حالة مرور الطلب عبر وكلاء متعددين.

إليك ما نحتاج إلى التعامل معه:

  • استخراج عنوان IP للعميل: استرداد رأس X-Forwarded-For وتحليله.

  • التعامل مع عناوين IP المتعددة : تأكد من حصولنا على عنوان IP الصحيح للعميل حتى في حالة مشاركة عدة وكلاء.

الاعتبارات الأمنية

يجب استخدام رأس X-Forwarded-For بحذر بسبب المخاطر الأمنية المحتملة. لا يمكن اعتبار الإدخالات جديرة بالثقة إلا إذا تمت إضافتها بواسطة أنظمة مؤمنة بشكل صحيح داخل الشبكة. وهذا يضمن عدم التلاعب بعناوين IP الخاصة بالعميل وموثوقيتها.

اختيار الأدوات المناسبة

AWS لامدا وبيثون

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

المكونات الرئيسية

  1. وظيفة AWS Lambda: الوظيفة الأساسية التي تعالج الطلبات الواردة.

  2. موازن تحميل التطبيق (ALB) : موازن التحميل الذي يعيد توجيه الطلبات إلى وظيفة Lambda.

تفاصيل التنفيذ

إعداد AWS Lambda باستخدام ALB

أولاً، تأكد من إعداد وظيفة Lambda وتكاملها مع ALB. اتبع دليل AWS الرسمي إذا لزم الأمر: استخدام وظائف Lambda كأهداف لـ Application Load Balancer.

رمز وظيفة لامدا

فلنتعمق في كود Python لوظيفة Lambda. ستقوم هذه الوظيفة باستخراج عنوان IP الخاص بالعميل من رأس X-Forwarded-For.

import json

def lambda_handler(event, context):
    # Extract the 'X-Forwarded-For' header
    x_forwarded_for = event['headers'].get('x-forwarded-for')

    if x_forwarded_for:
        # The first IP in the list is the client's IP
        client_ip = x_forwarded_for.split(',')[0]
    else:
        # Fallback if header is not present
        client_ip = event['requestContext']['identity']['sourceIp']

    # Log the client IP
    print(f"Client IP: {client_ip}")

    # Respond with the client IP
    return {
        'statusCode': 200,
        'body': json.dumps({'client_ip': client_ip})
    }

توضيح

  • استخراج الرأس: استرداد رأس X-Forwarded-For من الطلب الوارد.

  • تحليل الرأس: خذ عنوان IP الأول، الذي يمثل عنوان IP الأصلي للعميل.

  • آلية الرجوع: استخدم عنوان IP المصدر من سياق الطلب إذا لم يكن الرأس موجودًا.

  • التسجيل والاستجابة: تسجيل وإعادة عنوان IP الخاص بالعميل للتحقق منه.

نموذج الطلب والاستجابة

طلب:

{
    "headers": {
        "x-forwarded-for": "203.0.113.195, 70.41.3.18, 150.172.238.178"
    },
    "requestContext": {
        "identity": {
            "sourceIp": "70.41.3.18"
        }
    }
}

إجابة:

{
    "client_ip": "203.0.113.195"
}

خاتمة

يتطلب تحديد عنوان IP الفعلي للعميل في وظيفة AWS Lambda خلف ALB معالجة دقيقة لرأس X-Forwarded-For. يضمن هذا الأسلوب تسجيل IP دقيقًا ويعزز قدرة التطبيق على تخصيص وتأمين تفاعلات المستخدم.

المراجع

  • وثائق AWS ALB:

  • بايثون في AWS Lambda:

  • شرح رؤوس HTTP

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/rkj180220/getting-the-actual-client-ip-when-using-application-load-balancer-alb-in-aws-lambda-4fcn?1إذا كان هناك أي التعدي، يرجى الاتصال بـ [email protected] للحذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3