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 অ্যাড্রেস বা API অনুরোধের অংশ হিসেবে পাস করা কোনও IP অ্যাড্রেস, অ্যাক্সেস কন্ট্রোল নীতির <MatchRule> এলিমেন্টের মধ্যে উল্লেখ করা <SourceAddress> এলিমেন্টের কোনও IP অ্যাড্রেসের সাথে ম্যাচ করে এবং <MatchRule> এলিমেন্টের action অ্যাট্রিবিউট DENY হিসেবে সেট করা থাকে।

যেমন, ধরা যাক <SourceAddress>-কে নিচে দেখানো সংজ্ঞা অনুযায়ী নির্ধারণ করা হয়েছে:

<SourceAddress mask="32">104.132.196.83</SourceAddress>

ক্লায়েন্ট সিস্টেমের IP অ্যাড্রেস (proxy.client.ip ভেরিয়েবল দ্বারা নির্দেশিত) অথবা API অনুরোধের অংশ হিসেবে পাস করা IP অ্যাড্রেসের সাথে উপরের IP অ্যাড্রেসটি মিলে গেলে, সমস্যাটি হবে।

ডায়াগনসিস

  1. নির্দিষ্ট API অনুরোধের জন্য অ্যাক্সেস প্রত্যাখ্যান করা হয়েছে এমন IP অ্যাড্রেস শনাক্ত করুন। আপনি সমস্যার উত্তরের faultstring এলিমেন্টে এই তথ্য খুঁজে পাবেন।

    যেমন, নিম্নলিখিত faultstring-এ, IP অ্যাড্রেস হল 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. API প্রক্সি কাজ না করার কারণ হিসেবে উল্লেখ করা সব অ্যাক্সেস কন্ট্রোল নীতি পরীক্ষা করে দেখুন এবং সেই নির্দিষ্ট নীতি নির্ধারণ করুন যেখানে <SourceAddress> এলিমেন্টে উল্লেখ করা IP অ্যাড্রেস faultstring-এ (উপরে ধাপ ১) শনাক্ত করা IP অ্যাড্রেসের সাথে ম্যাচ করে।

    যেমন, নিম্নলিখিত নীতিতে <SourceAddress> IP-কে 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. UI ট্রেস ব্যবহার করা

      1. যে API অনুরোধ কাজ করছে না, তার ট্রেস ক্যাপচার করুন।
      2. ডানদিকের প্যানেল থেকে অ্যাক্সেস কন্ট্রোল সংক্রান্ত যে নির্দিষ্ট নীতি কাজ করেনি সেটি বেছে নিন।
      3. একটি নমুনা ট্রেসের নিম্নলিখিত স্ক্রিনশটে দেখানো proxy.client.ip ভেরিয়েবলের ভ্যালু চেক করুন।

      4. proxy.client.ip তালিকাভুক্ত না থাকলে, X-Forwarded-For বা True-Client-IP মেসেজ হেডারের ভ্যালু চেক করুন।

    2. কাস্টম রিপোর্ট ব্যবহার করা

      API প্রক্সির মধ্যে অ্যাক্সেস কন্ট্রোল নীতি প্রয়োগ করার সময় 403 স্ট্যাটাস কোড দেখানো হয়েছে কিনা তা নির্ধারণ করতে এবং ক্লায়েন্ট IP অ্যাড্রেস নির্ধারণ করতে আপনি কাস্টম রিপোর্ট তৈরি করতে পারেন। অতীতে সমস্যা হয়ে থাকলে অথবা সমস্যাটি মাঝে মাঝে হলে এবং আপনি UI-তে ট্রেস ক্যাপচার করতে না পারলে এটি বিশেষভাবে উপযোগী।

      কাস্টম রিপোর্ট কীভাবে তৈরি করতে হয় তা বুঝতে কাস্টম রিপোর্ট তৈরি ও ম্যানেজ করা দেখুন। কাস্টম রিপোর্টে, বেছে নিন:

      1. মেট্রিক হিসেবে মোট ট্রাফিক এবং

      2. ডাইমেনশন হিসেবে প্রক্সি, রেসপন্স স্ট্যাটাস কোড, প্রক্সি ক্লায়েন্ট IP ও X-Forwarded-For।

      এর ফলে আপনি ক্লায়েন্ট IP বা পাস করা IP অ্যাড্রেস নির্ধারণ করতে পারবেন যার ফলে সমস্যা হয়েছে।

  4. ক্লায়েন্ট IP অ্যাড্রেস (proxy.client.ip ভেরিয়েবল দ্বারা নির্দেশিত) অথবা API অনুরোধের অংশ হিসেবে পাস করা যেকোনও IP অ্যাড্রেস, অ্যাক্সেস কন্ট্রোল নীতির <MatchRule> এলিমেন্টের মধ্যে নির্দিষ্ট করা IP অ্যাড্রেসের সাথে ম্যাচ করলে, যেখানে <SourceAddress> এলিমেন্টের action অ্যাট্রিবিউট DENY হিসেবে সেট করা আছে, তাহলে এটিই সমস্যার কারণ।

    উপরে দেখানো উদাহরণে, রেফারেন্স ভেরিয়েবলে সেট করা ভ্যালু proxy.client.ip (উপরে ট্রেসের স্ক্রিনশটে যেমন দেখা যাচ্ছে) অ্যাক্সেস কন্ট্রোল নীতির <SourceAddress> এলিমেন্টে সংজ্ঞায়িত IP অ্যাড্রেসের সাথে ম্যাচ করে, তাই এরর রেসপন্স ট্রিগার হয়:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
    

রেজোলিউশন

faultstring-এ তালিকাভুক্ত নির্দিষ্ট IP অ্যাড্রেস থেকে আসা API অনুরোধে অ্যাক্সেস কন্ট্রোল নীতি অ্যাক্সেস প্রত্যাখ্যান করতে চাইলে, সমস্যার মেসেজটি প্রত্যাশিত। এই ক্ষেত্রে, আর কোনও অতিরিক্ত অ্যাকশন নেওয়ার প্রয়োজন নেই।

তবে, আপনি যদি নির্ধারণ করেন যে নির্দিষ্ট API প্রক্সির জন্য API অনুরোধে নির্দিষ্ট IP অ্যাড্রেস অ্যাক্সেস দেওয়া যেতে পারে, তাহলে সেইসব 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>