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