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

درحال مشاهده اسناد 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 که به‌عنوان بخشی از درخواست «میانای برنامه‌سازی کاربردی» ارسال شده است مطابقت داشته باشد، خطا رخ خواهد داد.

تشخیص

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

    برای مثال، در faultstring زیر، نشانی IP 104.132.196.83: است

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

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

      1. ردیابی را برای درخواست میانای برنامه‌سازی کاربردی ناموفق ضبط کنید.
      2. «خط‌مشی کنترل دسترسی» خاصی را که در پانل سمت چپ ناموفق بوده است انتخاب کنید.
      3. مقدار متغیر proxy.client.ip را همان‌گونه که در نماگرفت زیر از ردیابی نمونه نشان داده شده است بررسی کنید.

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

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

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

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

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

      2. پراکسی، کد وضعیت پاسخ، پروتکل اینترنتی مشتری پراکسی، و 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 خاص می‌تواند به درخواست‌های «میانای برنامه‌سازی کاربردی» برای «پراکسی میانای برنامه‌سازی کاربردی» خاص دسترسی داشته باشد، «خط‌مشی کنترل دسترسی» را اصلاح کنید تا به آن نشانی(های) 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>