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

אתם צופים במסמכי התיעוד של Apigee ושל Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge.

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

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

        בחלונית פרטים של השלב מוצגת כתובת ה-IP שממנה נשלחה בקשת ה-API.

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

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

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

      במאמר יצירה וניהול של דוחות בהתאמה אישית מוסבר איך ליצור דוחות בהתאמה אישית. בדוח בהתאמה אישית, בוחרים:

      1. סכום התנועה כמדד, וגם

      2. Proxy,‏ Response Status Code,‏ Proxy Client IP ו-X-Forwarded-For-IP כמאפיינים.

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