عیب یابی خطای زمان اجرا خط مشی AccessControl

شما در حال مشاهده مستندات 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 مطابقت داشته باشد، خطا رخ خواهد داد.

تشخیص

  1. آدرس‌های IP که برای یک درخواست API خاص دسترسی‌شان رد شده است را شناسایی کنید. می‌توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید.

    برای مثال، در faultstring زیر، آدرس IP 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. تمام سیاست‌های کنترل دسترسی در 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>
    
  3. آدرس IP (آدرس‌های) که درخواست API از آنها ارسال شده است را تعیین کنید. این کار را می‌توان به چندین روش انجام داد:

    1. استفاده از ردیابی رابط کاربری

      1. ردیابی درخواست ناموفق API را ثبت کنید.
      2. از پنل سمت راست، سیاست کنترل دسترسی خاصی را که با شکست مواجه شده است، انتخاب کنید.
      3. مقدار متغیر proxy.client.ip را همانطور که در تصویر زیر از یک نمونه ردیابی نشان داده شده است، بررسی کنید.

      4. اگر proxy.client.ip در لیست نیست، مقدار هدرهای پیام X-Forwarded-For یا True-Client-IP را بررسی کنید.

    2. استفاده از گزارش‌های سفارشی

      شما می‌توانید گزارش‌های سفارشی ایجاد کنید تا مشخص شود که آیا کد وضعیت ۴۰۳ در حین اجرای سیاست کنترل دسترسی در پروکسی API ایجاد شده است یا خیر و همچنین آدرس IP کلاینت را تعیین کنید. این امر به ویژه در صورتی مفید است که مشکل در گذشته رخ داده باشد یا اگر مشکل متناوب باشد و شما قادر به ثبت ردیابی در رابط کاربری نباشید.

      برای آشنایی با نحوه ایجاد گزارش‌های سفارشی، به بخش ایجاد و مدیریت گزارش‌های سفارشی مراجعه کنید. در گزارش سفارشی، موارد زیر را انتخاب کنید:

      1. مجموع ترافیک به عنوان یک معیار، و

      2. پروکسی ، کد وضعیت پاسخ ، IP کلاینت پروکسی و 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 برای پروکسی 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>