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 bir parçası olarak iletilen herhangi bir IP adresi, Erişim Denetimi Politikası'nın <MatchRule> öğesindeki <SourceAddress> öğesinde belirtilen IP adresleriyle eşleşirse ve <MatchRule> öğesinin action özelliği DENY olarak ayarlanırsa oluşur.

Örneğin, <SourceAddress> öğesinin 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şkeniyle belirtilir) veya API isteğinin bir parçası olarak iletilen IP adreslerinden herhangi biriyle eşleşirse hata oluşur.

Teşhis

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

    Örneğin, aşağıdaki faultstring içinde IP adresi 104.132.196.83:'dir.

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

    Örneğin, aşağıdaki politika <SourceAddress> IP'sini 104.132.196.83, olarak tanımlar. Bu, faultstring içindekiyle 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 işlem birden fazla şekilde yapılabilir:

    1. UI Trace'i kullanma

      1. Başarısız olan API isteğinin izini yakalayın.
      2. Sağ taraftaki panelden başarısız olan belirli Erişim Kontrolü 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 listelenmiyorsa X-Forwarded-For veya True-Client-IP ileti üstbilgilerinin değerini kontrol edin.

    2. Özel Raporları kullanma

      API proxy'sinde erişim denetimi politikası yürütülürken 403 durum kodu verilip verilmediğini ve istemci IP adresini belirlemek için özel raporlar oluşturabilirsiniz. Bu, özellikle sorun geçmişte yaşandıysa veya aralıklı olarak yaşanıyorsa ve kullanıcı arayüzünde izlemeyi yakalayamıyorsanız yararlıdır.

      Özel rapor oluşturma hakkında bilgi edinmek için Özel rapor oluşturma ve yönetme başlıklı makaleyi inceleyin. Özel raporda şunları seçin:

      1. Metrik olarak Trafik Toplamı ve

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

      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ğinin bir parçası olarak iletilen herhangi bir IP adresi, Erişim Kontrolü Politikası'nın <MatchRule> öğesindeki <SourceAddress> öğesinde belirtilen IP adresleriyle eşleşiyorsa(action özelliği DENY olarak ayarlanmışsa) hatanın nedeni budur.

    Yukarıda gösterilen örnekte, referans değişkeninde proxy.client.ip ayarlanan değer (yukarıdaki izleme ekran görüntüsünde görüldüğü gibi), Erişim Kontrolü politikasının <SourceAddress> öğesinde tanımlanan IP adresiyle eşleştiği için hata yanıtı tetikleniyor:

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

Çözünürlük

Erişim kontrolü politikası, faultstring içinde listelenen belirli IP adreslerinden gelen API isteklerine erişimi engellemek için tasarlanmışsa hata mesajı beklenir. Bu durumda başka bir işlem yapmanız gerekmez.

Ancak belirli IP adreslerinin, belirli API proxy'si için API isteklerine erişebileceğini belirlerseniz Erişim Denetimi Politikası'nı bu IP adreslerine erişime izin verecek şekilde değiştirin. Alternatif olarak, herhangi bir IP adresine erişimi engellemek istemiyorsanız erişim denetimi politikasını API proxy'sinden kaldırabilirsiniz.

Aşağıda, 104.132.196.83 yalnızca belirli bir IP adresine erişime nasıl izin verileceğini ve diğer IP adreslerinin erişiminin nasıl engelleneceğ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>