פתרון בעיות בזמן ריצה של מדיניות AccessControl

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

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 שהועברה כחלק מבקשת ה-API, תואמים לכתובות ה-IP שצוינו ברכיב <SourceAddress> שברכיב <MatchRule> של מדיניות בקרת הגישה, והמאפיין action של הרכיב <MatchRule> מוגדר לערך DENY.

לדוגמה, נניח ש-<SourceAddress> מוגדר כך:

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

אם כתובת ה-IP שצוינה למעלה תואמת לכתובת ה-IP של מערכת הלקוח (מסומנת על ידי המשתנה proxy.client.ip) או לכל אחת מכתובות ה-IP שמועברות כחלק מבקשת ה-API, השגיאה תתבצע.

אבחון

  1. מזהים את כתובות ה-IP שנדחו בגלל בקשת API ספציפית. המידע הזה מופיע ברכיב faultstring של תגובת השגיאה.

    לדוגמה, בfaultstring הבא, כתובת ה-IP היא 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. יש לבדוק את כל כללי המדיניות של בקרת הגישה בשרת ה-proxy ל-API שנכשלו ולקבוע איזו מדיניות ספציפית שבה כתובות ה-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 שמהן נשלחה בקשת ה-API. ניתן לעשות זאת בכמה דרכים:

    1. שימוש במעקב ממשק המשתמש

      1. מתעדים את המעקב אחר בקשת ה-API שנכשלה.
      2. בחלונית השמאלית, בוחרים את המדיניות הספציפית של בקרת הגישה שנכשלה.
      3. בודקים את הערך של המשתנה proxy.client.ip כפי שמוצג בצילום המסך הבא של מעקב לדוגמה.

      4. אם proxy.client.ip לא מופיע ברשימה, אז צריך לבדוק את הערך של כותרות של הודעות X-Forwarded-For או True-Client-IP.

    2. שימוש בדוחות בהתאמה אישית

      ניתן ליצור דוחות בהתאמה אישית כדי לקבוע אם קוד סטטוס 403 נסרק במהלך ביצוע מדיניות בקרת הגישה בתוך שרת ה-proxy של ה-API, וגם לקבוע את כתובת ה-IP של הלקוח. האפשרות הזו שימושית במיוחד אם הבעיה התרחשה בעבר או אם היא מתרחשת לסירוגין, ולא ניתן לתעד את המעקב בממשק המשתמש.

      מומלץ לקרוא את המאמר יצירה וניהול של דוחות בהתאמה אישית כדי להבין איך ליצור דוחות בהתאמה אישית. בדוח בהתאמה אישית, בוחרים את:

      1. Sum of traffic כמדד, וגם

      2. Proxy , Response Status Code (קוד סטטוס תגובה), כתובת IP של לקוח proxy ו-X-Forwarded-For כמאפיינים.

      זה יעזור לכם לקבוע את כתובות ה-IP או כתובות ה-IP של הלקוח שהועברו והובילו לשגיאה.

  4. אם כתובת ה-IP של הלקוח (מצוינת באמצעות המשתנה proxy.client.ip) או כל כתובת IP שהועברה כחלק מבקשת ה-API, תואמות לכתובות ה-IP שצוינו ברכיב <SourceAddress> בתוך הרכיב <MatchRule> של מדיניות בקרת הגישה, כאשר המאפיין action מוגדר ל-DENY, זו הסיבה לשגיאה.

    בדוגמה שלמעלה, הערך שמוגדר במשתנה ההפניה proxy.client.ip (כפי שמוצג בצילום המסך של המעקב שלמעלה) תואם לכתובת ה-IP שהוגדרה ברכיב <SourceAddress> של מדיניות בקרת הגישה, ולכן מופעלת תגובת השגיאה:

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

רזולוציה

אם המטרה של מדיניות בקרת הגישה היא לדחות את הגישה לבקשות API שמגיעות מכתובות ה-IP הספציפיות שרשומות ב-faultstring, הודעת השגיאה אמורה להופיע. במקרה כזה, לא נדרשת פעולה נוספת.

עם זאת, אם קבעת שכתובות ה-IP הספציפיות יכולות לקבל גישה לבקשות ה-API עבור שרת ה-proxy הספציפי, עליך לשנות את מדיניות בקרת הגישה כדי לאפשר גישה לכתובות ה-IP האלה. לחלופין, אפשר להסיר את מדיניות בקרת הגישה מה-Proxy ל-API אם לא רוצים לדחות את הגישה לכתובות 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>