درحال مشاهده اسناد 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 که بهعنوان بخشی از درخواست «میانای برنامهسازی کاربردی» ارسال شده است مطابقت داشته باشد، خطا رخ خواهد داد.
تشخیص
نشانی(های) IP را که دسترسی به درخواست میانای برنامهسازی کاربردی خاصی برای آنها رد شده است شناسایی کنید. میتوانید این اطلاعات را در عنصر
faultstringپاسخ خطا پیدا کنید.برای مثال، در
faultstringزیر، نشانی IP104.132.196.83:است"faultstring": "Access Denied for client ip : 104.132.196.83"همه خطمشیهای «کنترل دسترسی» را در «پراکسی میانای برنامهسازی کاربردی» ناموفق بررسی کنید و خطمشی خاصی را که در آن نشانی(های) IP مشخصشده در عنصر
<SourceAddress>با نشانی(های) IP شناساییشده درfaultstringمطابقت دارد (مرحله ۱ در بالا) تعیین کنید.برای مثال، خطمشی زیر
<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 از آن ارسال شده است را تعیین کنید. این کار را میتوان به روشهای متعددی انجام داد:
استفاده از ردیابی میانای کاربر
- ردیابی را برای درخواست میانای برنامهسازی کاربردی ناموفق ضبط کنید.
- «خطمشی کنترل دسترسی» خاصی را که در پانل سمت چپ ناموفق بوده است انتخاب کنید.
مقدار متغیر
proxy.client.ipرا همانگونه که در نماگرفت زیر از ردیابی نمونه نشان داده شده است بررسی کنید.
اگر
proxy.client.ipدر فهرست نیست، مقدار سرایندهای پیام X-Forwarded-For یا True-Client-IP را بررسی کنید.
استفاده از گزارشهای سفارشی
میتوانید «گزارشهای سفارشی» ایجاد کنید تا مشخص کنید آیا کد وضعیت ۴۰۳ درطول اجرای خطمشی «کنترل دسترسی» در پراکسی API ارسال شده است یا نه و همچنین نشانی 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 خاص میتواند به درخواستهای «میانای برنامهسازی کاربردی» برای «پراکسی میانای برنامهسازی کاربردی» خاص دسترسی داشته باشد، «خطمشی کنترل دسترسی» را اصلاح کنید تا به آن نشانی(های) IP اجازه دسترسی داده شود. یا اینکه اگر نمیخواهید دسترسی به هیچ نشانی IP را رد کنید، میتوانید «خطمشی کنترل دسترسی» را از «پراکسی API» بردارید.
در اینجا مثالی آورده شده است که نشان میدهد چگونه دسترسی را فقط به 104.132.196.83 «نشانی IP» خاص مجاز کنید و دسترسی را برای بقیه رد کنید:
<AccessControl name="ACL">
<IPRules noRuleMatchAction = "DENY">
<MatchRule action = "ALLOW">
<SourceAddress mask="32">104.132.196.83</SourceAddress>
</MatchRule>
</IPRules>
</AccessControl>