אתם צופים במסמכי העזרה של 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 שהועברה כחלק מבקשת ה-API, תואמים לכתובות ה-IP שצוינו ברכיב <SourceAddress>
שברכיב <MatchRule>
של מדיניות בקרת הגישה, והמאפיין action
של הרכיב <MatchRule>
מוגדר לערך DENY
.
לדוגמה, נניח שהמאפיין <SourceAddress>
מוגדר באופן הבא:
<SourceAddress mask="32">104.132.196.83</SourceAddress>
אם כתובת ה-IP שלמעלה תואמת לכתובת ה-IP של מערכת הלקוח (שצוינה במשתנה proxy.client.ip
), או לאחת מכתובות ה-IP שהועברו כחלק מבקשת ה-API, תופיע השגיאה.
אבחון
זיהוי כתובות ה-IP שנדחתה עבורן הגישה לבקשת API ספציפית. המידע הזה מופיע באלמנט
faultstring
בתשובה לשגיאה.לדוגמה, ב
faultstring
הבא, כתובת ה-IP היא104.132.196.83:
"faultstring": "Access Denied for client ip : 104.132.196.83"
בודקים את כל כללי המדיניות לבקרת גישה בשרת ה-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>
לזהות את כתובות ה-IP שמהן נשלחה בקשת ה-API. אפשר לעשות זאת בכמה דרכים:
שימוש ב-UI Trace
- מתעדים את המעקב אחר בקשת ה-API שנכשלה.
- בחלונית השמאלית, בוחרים את המדיניות הספציפית של בקרת הגישה שנכשלה.
בודקים את הערך של המשתנה
proxy.client.ip
כמו שמוצג בצילום המסך הבא של מעקב לדוגמה.אם הערך
proxy.client.ip
לא מופיע ברשימה, צריך לבדוק את הערך של כותרות ההודעה X-Forwarded-For או True-Client-IP.
שימוש בדוחות בהתאמה אישית
אפשר ליצור דוחות בהתאמה אישית כדי לקבוע אם הופיע קוד סטטוס 403 במהלך ההפעלה של מדיניות בקרת הגישה בשרתי ה-proxy של ה-API, וגם כדי לקבוע את כתובת ה-IP של הלקוח. האפשרות הזו שימושית במיוחד אם הבעיה התרחשה בעבר או אם היא מתרחשת לסירוגין ואתם לא מצליחים לתעד את המעקב בממשק המשתמש.
במאמר יצירה וניהול של דוחות בהתאמה אישית מוסבר איך יוצרים דוחות בהתאמה אישית. בדוח בהתאמה אישית, בוחרים באפשרויות הבאות:
Sum of traffic כמדד, וגם
Proxy, Response Status Code, Proxy Client IP ו-X-Forwarded-For כמאפיינים.
זה יעזור לכם לקבוע את כתובות ה-IP או כתובות ה-IP של הלקוח שהועברו והובילו לשגיאה.
אם כתובת ה-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>