شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
دسترسی IPDenied
کد خطا
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زیر، آدرس IP104.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 از آنها ارسال شده است را تعیین کنید. این کار را میتوان به چندین روش انجام داد:
استفاده از ردیابی رابط کاربری
- ردیابی درخواست ناموفق API را ثبت کنید.
- از پنل سمت راست، سیاست کنترل دسترسی خاصی را که با شکست مواجه شده است، انتخاب کنید.
مقدار متغیر
proxy.client.ipرا همانطور که در تصویر زیر از یک نمونه ردیابی نشان داده شده است، بررسی کنید.
اگر
proxy.client.ipدر لیست نیست، مقدار هدرهای پیام X-Forwarded-For یا True-Client-IP را بررسی کنید.
استفاده از گزارشهای سفارشی
شما میتوانید گزارشهای سفارشی ایجاد کنید تا مشخص شود که آیا کد وضعیت ۴۰۳ در حین اجرای سیاست کنترل دسترسی در پروکسی API ایجاد شده است یا خیر و همچنین آدرس IP کلاینت را تعیین کنید. این امر به ویژه در صورتی مفید است که مشکل در گذشته رخ داده باشد یا اگر مشکل متناوب باشد و شما قادر به ثبت ردیابی در رابط کاربری نباشید.
برای آشنایی با نحوه ایجاد گزارشهای سفارشی، به بخش ایجاد و مدیریت گزارشهای سفارشی مراجعه کنید. در گزارش سفارشی، موارد زیر را انتخاب کنید:
مجموع ترافیک به عنوان یک معیار، و
پروکسی ، کد وضعیت پاسخ ، 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 برای پروکسی API خاص دسترسی داشته باشند، سیاست کنترل دسترسی را تغییر دهید تا به آن آدرسهای IP دسترسی داده شود. از طرف دیگر، اگر نمیخواهید دسترسی به هیچ آدرس IP را رد کنید، میتوانید سیاست کنترل دسترسی را از پروکسی 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>