تحديد مشاكل وقت تشغيل سياسة AccessControl وحلّها

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

IPDeniedAccess

رمز الخطأ

accesscontrol.IPDeniedAccess

نص رد الخطأ

{
    "fault": {
        "faultstring": "Access Denied for client ip : client_IP",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

مثال على رسالة الخطأ

{
    "fault": {
        "faultstring": "Access Denied for client ip : 104.132.196.83",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

السبب

يحدث هذا الخطأ إذا كان عنوان IP للعميل أو أي عنوان IP تم تمريره كجزء من طلب بيانات من واجهة برمجة التطبيقات يطابق أي عناوين IP محددة في العنصر <SourceAddress> ضمن العنصر <MatchRule> في سياسة التحكّم بالوصول، وتم ضبط السمة action للعنصر <MatchRule> على DENY.

على سبيل المثال، لنفترض أنّ <SourceAddress> معرَّف على النحو الموضّح أدناه:

<SourceAddress mask="32">104.132.196.83</SourceAddress>

سيحدث الخطأ إذا كان عنوان IP أعلاه يطابق عنوان IP لنظام العميل (المشار إليه بالمتغير proxy.client.ip)، أو أيّ من عناوين IP التي تم تمريرها كجزء من طلب بيانات من واجهة برمجة التطبيقات.

التشخيص

  1. تحديد عناوين IP التي تم رفض وصولها إلى طلب بيانات من واجهة برمجة التطبيقات معيّن يمكنك العثور على هذه المعلومات في العنصر faultstring لردّ الخطأ.

    على سبيل المثال، في faultstring التالي، عنوان IP هو 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. افحص جميع سياسات التحكّم بالوصول في خادم API الوكيل الذي تعذّر تنفيذه وحدِّد السياسة المحدّدة التي تتطابق فيها عناوين IP المحدّدة في العنصر <SourceAddress> مع عناوين IP المحدّدة في faultstring (الخطوة 1 أعلاه).

    على سبيل المثال، تحدّد السياسة التالية عنوان <SourceAddress> IP على أنّه 104.132.196.83, الذي يتطابق مع ما هو موجود في faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control">
        <DisplayName>Access-Control</DisplayName>
        <Properties/>
        <IPRules noRuleMatchAction="ALLOW">
            <MatchRule action="DENY">
                <SourceAddress mask="32">104.132.196.83</SourceAddress>
            </MatchRule>
        </IPRules>
        </AccessControl>
    
  3. تحديد عناوين IP التي تم إرسال طلب البيانات من واجهة برمجة التطبيقات منها يمكن إجراء ذلك بطُرق متعدّدة:

    1. استخدام أداة UI Trace

      1. تسجيل التتبُّع لطلب البيانات غير الناجح من واجهة برمجة التطبيقات
      2. اختَر سياسة التحكّم في الوصول المحدّدة التي تعذّر تنفيذها من اللوحة اليمنى.
      3. تحقَّق من قيمة المتغيّر proxy.client.ip كما هو موضّح في لقطة الشاشة التالية لتتبُّع نموذج.

      4. إذا لم يتم إدراج proxy.client.ip، تحقَّق من قيمة عناوين رسائل X-Forwarded-For أو True-Client-IP.

    2. استخدام التقارير المخصّصة

      يمكنك إنشاء "تقارير مخصّصة" لتحديد ما إذا كان رمز الحالة 403 قد تم عرضه أثناء تنفيذ سياسة "التحكّم في الوصول" ضِمن خادم وكيل واجهة برمجة التطبيقات، وتحديد عنوان IP الخاص بالعميل أيضًا. يكون ذلك مفيدًا بشكل خاص إذا حدثت المشكلة في الماضي أو إذا كانت متقطّعة ولم تتمكّن من تسجيل التتبُّع في واجهة المستخدم.

      راجِع مقالة إنشاء تقارير مخصّصة وإدارتها للتعرّف على كيفية إنشاء تقارير مخصّصة. في التقرير المخصّص، اختَر ما يلي:

      1. مجموع الزيارات كمقياس، و

      2. الخادم الوكيل ورمز حالة الردّ وعنوان IP الخاص بعميل الخادم الوكيل وX-Forwarded-For كسمات

      من المفترض أن يساعدك ذلك في تحديد عنوان IP للعميل أو عناوين IP التي تمّ تمريرها وأدّت إلى حدوث الخطأ.

  4. إذا كان عنوان IP الخاص بالعميل (المشار إليه بالمتغيّر proxy.client.ip)، أو أي عنوان IP تم تمريره كجزء من طلب بيانات من واجهة برمجة التطبيقات، يطابق عناوين IP المحدّدة في العنصر <SourceAddress> ضمن العنصر <MatchRule> من سياسة التحكّم في الوصول، حيث تم ضبط السمة action على DENY، يكون ذلك هو سبب الخطأ.

    في المثال الموضّح أعلاه، تتطابق القيمة التي تم ضبطها في المتغيّر المرجعي proxy.client.ip (كما هو موضّح في لقطة شاشة التتبُّع أعلاه) مع عنوان IP المحدّد في العنصر <SourceAddress> من سياسة "التحكّم في الوصول"، ما يؤدي إلى ظهور رسالة الخطأ التالية:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
    

الدقة

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

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

في ما يلي مثال يوضّح كيفية السماح بالوصول إلى عنوان IP معيّن 104.132.196.83 فقط ورفض الوصول إلى الباقي:

<AccessControl name="ACL">
  <IPRules noRuleMatchAction = "DENY">
    <MatchRule action = "ALLOW">
      <SourceAddress mask="32">104.132.196.83</SourceAddress>
    </MatchRule>
  </IPRules>
</AccessControl>