AccessControl politikası çalışma zamanı hatasını giderme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
info

IPDeniedAccess

Hata kodu

accesscontrol.IPDeniedAccess

Hata yanıtı gövdesi

{
    "fault": {
        "faultstring": "Access Denied for client ip : client_IP",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

Örnek hata mesajı

{
    "fault": {
        "faultstring": "Access Denied for client ip : 104.132.196.83",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

Neden

Bu hata, istemci IP adresi veya API isteği kapsamında iletilen herhangi bir IP adresi, Erişim Denetimi Politikası'nın <MatchRule> öğesi içindeki <SourceAddress> öğesinde belirtilen IP adresleriyle eşleşirse ve <MatchRule> öğesinin action özelliği DENY olarak ayarlanmışsa ortaya çıkar.

Örneğin, <SourceAddress>'ün aşağıdaki gibi tanımlandığını varsayalım:

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

Yukarıdaki IP adresi, istemci sisteminin IP adresiyle (proxy.client.ip değişkeni ile belirtilir) veya API isteği kapsamında iletilen IP adreslerinden herhangi biriyle eşleşirse hata meydana gelir.

Teşhis

  1. Belirli bir API isteği için erişimi reddedilen IP adreslerini tanımlayın. Bu bilgileri hata yanıtının faultstring öğesinde bulabilirsiniz.

    Örneğin, aşağıdaki faultstring adresinde IP adresi 104.132.196.83:'dur.

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Başarısız API Proxy'sindeki tüm erişim denetimi politikalarını inceleyin ve <SourceAddress> öğesinde belirtilen IP adreslerinin faultstring öğesinde tanımlanan IP adresleriyle eşleştiği belirli politikayı belirleyin (yukarıdaki 1. adım).

    Örneğin, aşağıdaki politika <SourceAddress> IP'sini faultstring ile eşleşen 104.132.196.83, olarak tanımlar:

    <?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. API isteğinin yapıldığı IP adreslerini belirleyin. Bunu yapmanın birden fazla yolu vardır:

    1. Kullanıcı arayüzü izlemeyi kullanma

      1. Başarısız API isteğinin izlemesini alın.
      2. Sağdaki panelden başarısız olan Access Management politikasını seçin.
      3. Örnek izlemenin aşağıdaki ekran görüntüsünde gösterildiği gibi proxy.client.ip değişkeninin değerini kontrol edin.

      4. proxy.client.ip listede yoksa X-Forwarded-For veya True-Client-IP mesaj üstbilgilerinin değerini kontrol edin.

    2. Özel Raporları kullanma

      API proxy'sinde Erişim Denetimi politikası yürütülürken bir 403 durum kodunun atılıp atılmadığını belirlemek ve istemci IP adresini belirlemek için Özel Raporlar oluşturabilirsiniz. Bu, özellikle sorun geçmişte meydana geldiyse veya sorun ara sıra oluyorsa ve kullanıcı arayüzünde izini yakalayamıyorsanız yararlı olur.

      Özel raporların nasıl oluşturulacağını öğrenmek için Özel raporlar oluşturma ve yönetme başlıklı makaleyi inceleyin. Özel raporda şunları seçin:

      1. Metrik olarak Trafiği Topla'yı ve

      2. Boyut olarak Proxy, Yanıt Durumu Kodu, Proxy İstemci IP'si ve X-Forwarded-For.

      Bu, hataya neden olan istemci IP'sini veya iletilen IP adreslerini belirlemenize yardımcı olur.

  4. İstemci IP adresi (proxy.client.ip değişkeniyle belirtilir) veya API isteği kapsamında iletilen herhangi bir IP adresi, Erişim Denetimi Politikası'nın <MatchRule> öğesindeki <SourceAddress> öğesinde belirtilen IP adresleriyle eşleşiyorsa(action özelliği DENY olarak ayarlanmışsa) hata bununla ilgilidir.

    Yukarıda gösterilen örnekte, proxy.client.ip referans değişkeninde ayarlanan değer (yukarıdaki izinin ekran görüntüsünde görüldüğü gibi), Erişim Denetimi politikasının <SourceAddress> öğesinde tanımlanan IP adresiyle eşleşir ve böylece hata yanıtını tetikler:

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

Çözünürlük

Erişim Denetimi politikasının amacı, faultstring içinde listelenen belirli IP adreslerinden gelen API isteklerine erişimi reddetmekse hata mesajı gösterilmesi beklenir. Bu durumda herhangi bir işlem yapmanıza gerek yoktur.

Ancak belirli IP adreslerine, belirli API Proxy'si için API isteklerine erişim izni verilebileceğini belirlerseniz, Erişim Denetimi Politikası'nı söz konusu IP adreslerine erişim izni verecek şekilde değiştirin. Alternatif olarak, herhangi bir IP adresine erişimi reddetmek istemiyorsanız Erişim Denetimi Politikası'nı API Proxy'den kaldırabilirsiniz.

Aşağıda, yalnızca belirli bir IP adresine (104.132.196.83) erişim izni verirken diğerleri için de erişimin nasıl reddedileceğini gösteren bir örnek verilmiştir:

<AccessControl name="ACL">
  <IPRules noRuleMatchAction = "DENY">
    <MatchRule action = "ALLOW">
      <SourceAddress mask="32">104.132.196.83</SourceAddress>
    </MatchRule>
  </IPRules>
</AccessControl>