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
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