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

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

הנה דוגמה שמראה איך לאפשר גישה רק לכתובת 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>