Ana içeriğe geç

7.2. Filtreleme#

İstek Kısıtlama (Engelleme)#

İstek Kısıtlayıcı, gelen taleplerin belirli koşullar altında kısıtlanmasına olanak tanır. Bu sayede, uygulamanın güvenliği artırabilir ve istenmeyen erişimler engellenebilir. İstekleri kısıtlarken, geri dönüşteki HTTP durum kodu ve yönlendirme URL'si gibi bilgiler konfigüre edilebilmektedir.

İstek kısıtlayıcı için sağlanan konfigüratif bilgiler, varsayılan değerleri ile birlikte aşağıda verilmiştir.

hvl:
  cloud:
    gateway:
      request:
        restriction:
          enabled: ${HVL_REQUEST_RESTRICTION_ENABLED:false}
          status-code: ${HVL_REQUEST_RESTRICTION_STATUS_CODE:403}
          redirect-url: ${HVL_REQUEST_RESTRICTION_REDIRECT_URL:http://localhost:8080/error} #(status code should be 30x)
          paths: ${HVL_REQUEST_RESTRICTION_PATHS:.*/actuator(/.*)?}
  • hvl.cloud.gateway.request.restriction.enabled: İstek kısıtlayıcının aktif olup olmadığı bilgisidir.

Not

Bu bilgi config server kullanılan ve cloud profili (HVL_CLOUD_CONFIG_PROFILES) prod olarak çalışan ortamlarda true olmaktadır.

  • hvl.cloud.gateway.request.restriction.status-code: Kısıtlanan istek sonrası hangi HTTP status code dönüleceği bilgisidir.
  • hvl.cloud.gateway.request.restriction.redirect-url: Kısıtlanan istek sonrası yönlendirilmek istenen url bilgisidir.

Uyarı

Başarılı bir şekilde yönlendirme yapılabilmesi için status-code bilgisi 30x şeklinde olmalıdır. Örneğin; 301,302,303 gibi. Detaylı bilgi için http durum kodları incelenebilir.

  • hvl.cloud.gateway.request.restriction.paths: Kısıtlanması istenen path bilgileridir. Regex olarak liste şeklinde verilebilir. İstek kısıtlayıcı aktif durumda olduğunda varsayılan olarak tüm /actuator uçlarını kısıtlamaktadır.

Dinamik Filtreler#

Gateway uygulamasına dinamik filtreler eklenerek istekler yönetilebilir. Örneğin; istek sayısı limitleyici (rate limiter) filtresi eklenerek, aynı adrese çok fazla istek geldiği durumlarda gateway'den erişim engeli yapılabilir ve 429 Too Many Request dönerek istekler sonlandırılır.

Bunun yanında Retry filtresi eklenerek istekler hata durumlarında tekrarlatılabilmektedir.

Spring Gateway Filter Factories adresinden kullanılabilecek filtreler incelenebilir.

Varsayılan Filtreler (Default Filters)#

Gateway konfigürasyonlarına default-filters eklenerek tüm istekler için filtreler eklenebilir.

Önemli Not

Mevcut durumda herhangi bir filtre bulunmamaktadır, filtre eklenmek istendiği durumlarda aşağıdaki konfigürasyon gateway uygulamasına environment olarak eklenmelidir.

Rate limiter filtresi eklemek için örnek konfigürasyon aşağıdaki gibidir.

spring:
  cloud:
    gateway:
      default-filters:
        - name: RequestRateLimiter
          args:
            redis-rate-limiter.replenishRate: 5
            redis-rate-limiter.burstCapacity: 5
            redis-rate-limiter.requestedTokens: 1

Replenish Rate: Belirli bir zaman diliminde, sistemin ne kadar talep (token) yenileyebileceğini belirten bir hızdır.

Burst Capacity: Anlık olarak sistemin kabul edebileceği maksimum token sayısını ifade eder, bu da kısa süreli aşırı talep anlarında esneklik sağlar.

Requested Tokens: Kullanıcı veya istemcinin bir isteği gerçekleştirmek için ihtiyaç duyduğu token sayısını belirtir; bu sayıda bir istek, rate limiter tarafından karşılandığında işlenir.

Bu ayarlar gateway uygulamasına environment olarak aşağıdaki gibi eklenebilir.

SPRING_CLOUD_GATEWAY_DEFAULT-FILTERS[0]_NAME=RequestRateLimiter
SPRING_CLOUD_GATEWAY_DEFAULT-FILTERS[0]_ARGS_REDIS-RATE-LIMITER_REPLENISHRATE=1
SPRING_CLOUD_GATEWAY_DEFAULT-FILTERS[0]_ARGS_REDIS-RATE-LIMITER_BURSTCAPACITY=1
SPRING_CLOUD_GATEWAY_DEFAULT-FILTERS[0]_ARGS_REDIS-RATE-LIMITER_REQUESTEDTOKENS=1

Belirli Bir Uygulama İçin Filtreleme#

Gateway konfigürasyonları aşağıdaki örnekte olduğu gibi yapılırsa, uygulama bazlı filtreler eklenebilmektedir.

Önemli Uyarı

Bu yeteneğin kullanılabilmesi için hvl.cloud.gateway.discovery.locator.enabled özelliğinin true olması gerekmektedir. Varsayılan olarak true durumdadır.

hvl:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: ${HVL_DISCOVERY_LOCATOR_ENABLED:true}
      request:
        filters:
          - name: RequestRateLimiter
            uri: lb://AUTH-SERVER
            args:
              redis-rate-limiter.replenishRate: 3
              redis-rate-limiter.burstCapacity: 3
              redis-rate-limiter.requestedTokens: 1
name: Bu kısım filtre ismini belirtmektedir. Filtre ismi sistemde ön tanımlı filtre isimleri ile birebir uyuşmalıdır. Spring Gateway Filter Factories adresinden kullanılabilecek filtreler incelenebilir.

uri: Bu kısım gateway route bilgilerindeki ile aynı olmalıdır, aksi durumda yönlendirilirken hata alınabilir. http://gatewayHost/actuator/gateway/routes adresinden uygulamanın uri bilgisi öğrenilebilir.

args: Tanımlanacak filtre argüman bilgileridir.

Bu ayarlar gateway uygulamasına environment olarak aşağıdaki gibi eklenebilir.

HVL_CLOUD_GATEWAY_REQUEST_FILTERS_0_NAME=RequestRateLimiter
HVL_CLOUD_GATEWAY_REQUEST_FILTERS_0_URI=lb://AUTH-SERVER
HVL_CLOUD_GATEWAY_REQUEST_FILTERS_0_ARGS_REDIS-RATE-LIMITER_REPLENISHRATE=3
HVL_CLOUD_GATEWAY_REQUEST_FILTERS_0_ARGS_REDIS-RATE-LIMITER_BURSTCAPACITY=3
HVL_CLOUD_GATEWAY_REQUEST_FILTERS_0_ARGS_REDIS-RATE-LIMITER_REQUESTEDTOKENS=1