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

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

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ğinin parçası olarak 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 ayarlanırsa ortaya çıkar.

Örneğin, <SourceAddress> aşağıdaki şekilde 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şkeniyle gösterilir) 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 için IP adresi 104.132.196.83: şeklindedir.

    "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'de (yukarıdaki 1. adım) tanımlanan IP adresleriyle eşleştiği belirli politikayı belirleyin.

    Örneğin, aşağıdaki politika <SourceAddress> IP'sini 104.132.196.83, olarak tanımlar ve bu değer faultstring içindeki ile eşleşir:

    <?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. Bu, birkaç şekilde yapılabilir:

    1. Kullanıcı Arayüzü İzlemeyi Kullanma

      1. Başarısız API isteğinin izini yakalayın.
      2. Sağ taraftaki panelden başarısız olan belirli Erişim Denetimi Politikası'nı seçin.
      3. proxy.client.ip değişkeninin değerini, aşağıdaki örnek iz ekran görüntüsünde gösterildiği gibi kontrol edin.

      4. proxy.client.ip listede yoksa X-Forwarded-For veya True-Client-IP mesaj başlıklarının değerini kontrol edin.

    2. Özel Raporları kullanma

      API proxy'sinde Erişim Denetimi politikası yürütülürken 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 oluşmuşsa veya ara sıra ortaya çıkıyorsa ve kullanıcı arayüzünde izini yakalayamıyorsanız kullanışlıdır.

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

      1. Metrik olarak Trafik Toplamı ve

      2. Proxy, Response Status Code, Proxy Client IP ve X-Forwarded-For boyutlarını kullanabilirsiniz.

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

  4. İstemci IP adresi (proxy.client.ip değişkeniyle belirtilir) veya API isteğinin parçası olarak iletilen herhangi bir IP adresi, Erişim Denetimi Politikası'nın <MatchRule> öğesindeki <SourceAddress> öğesinde belirtilen IP adresleriyle eşleşiyorsa(action özelliğinin DENY olarak ayarlandığı) hatanın nedeni budur.

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

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

Çözünürlük

Erişim Denetimi politikası, faultstring içinde listelenen belirli IP adreslerinden gelen API isteklerine erişimi reddetmeyi amaçlıyorsa hata mesajı beklenir. Bu durumda başka bir işlem yapmanız gerekmez.

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

Yalnızca belirli bir IP adresine (104.132.196.83) erişim izni verirken geri kalanlar için erişim izni verme işleminin nasıl yapılacağını gösteren bir örneği aşağıda bulabilirsiniz:

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