تحديد مشاكل وقت تشغيل سياسة 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. راجِع جميع سياسات التحكّم في الوصول في خادم وكيل واجهة برمجة التطبيقات الذي تعذّر الاتصال به وحدِّد السياسة المحدّدة التي تتطابق فيها عناوين IP المحدّدة في عنصر <SourceAddress> مع عناوين IP المحدّدة في faultstring (الخطوة 1 أعلاه).

    على سبيل المثال، تحدّد السياسة التالية عنوان IP <SourceAddress> على أنّه 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. استخدام ميزة "تتبُّع واجهة المستخدم"

      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>