API key / token gibi bir anahtara göre rate limit uygulayabilir miyim?
Kısa cevap
Evet. Quarantine aksiyonunda Tracking Key = Manual seçilir ve Quarantine Keys to Track alanına fx ile anahtarı taşıyan Smart Variable (ör. X-API-Key başlığı için Request HTTP header content, çerez ya da query parametresi) eklenir; istek sayacı ve karantina bu değer başına tutulur. Aynı iş Advanced Traffic Inspection aksiyonunun Fields to Track alanı, Tracking Condition koşulu ve Block aksiyonuyla, AGS açıksa bot koruma politikasında Policy Scope = Composite ile de yapılır. Bot/DDoS Protection hacim limitlerini kaynak IP, ülke, ağ tipi ya da vService geneli için tutar; anahtar başına sınır vermez.
Sorun: Aynı IP'den Birden Fazla Müşteri Geliyor
API istemcileri çoğu zaman aynı ağ geçidinden ya da bulut çıkışından gelir; IP başına sınır bu müşterileri tek sayaçta toplar ve bir müşterinin yoğunluğu diğerlerini de engeller. Kullanım kotasının her API anahtarı ya da token için ayrı uygulanması gerekir. IP başına sınırın temel kurulumu için: Rate limiting yapabilir miyim (IP başına saniyede X istek)?
Çözüm: Üç Yöntem
Üç yöntem birbirinin alternatifidir; fark, sınır aşıldığında engelin ne kadar sürdüğündedir.
| Durumunuz | Uygun yöntem |
|---|---|
| Eşiği aşan anahtar belirli bir süre (Quarantine time) engellensin | Yöntem 1: Quarantine (Tracking key = Manual) |
| Engel yalnızca anahtar eşiğin üzerindeyken sürsün | Yöntem 2: Advanced Traffic Inspection + Tracking Condition + Block |
| AGS açık vService; anahtar ve adres birleşimine göre sınır | Yöntem 3: AGS → Policy scope = Composite |
Yöntem 1: Quarantine (Tracking Key = Manual) Önerilen
- Nasıl çalışır Sayaç seçilen değişkenin değeri başına tutulur; Tracking Time penceresinde Quarantine Condition eşiğini aşan anahtar Quarantine Time boyunca Quarantine Action ile karşılanır (varsayılan 10 dakika).
- Nerede açılırLoad Balancer → Actions → Quarantine → Tracking Key = Manual
- Gereksinim Anahtarı göndermeyen istekleri ayırmak için başlığın varlığına bakan bir koşul.
- vService tipi HTTP (başlık, çerez ve query parametresi değişkenleri yalnızca HTTP'de vardır)
Adım adım yapılandırma
Load Balancer → Conditions → Add ile Condition Name = api-anahtari-var, Criteria = HTTP Header, Header name = X-API-Key ve eşleştirme Is present seçilip koşul Add ile kaydedilir. Bu koşul, anahtarı hiç göndermeyen isteklerin tek bir boş anahtarda toplanmasını önler.
Load Balancer → Actions → Add ile aksiyon formu açılır (nasıl eklenir); Action Name = api-kota, Action Type = Quarantine seçilir.
Tracking Key = Manual seçilir; Quarantine Keys to Track alanında fx ile Request HTTP header content değişkeni X-API-Key argümanıyla eklenir. Anahtar çerezde ya da sorgu dizgesindeyse Request Cookie Content ya da Query Parameter değişkeni seçilir (Variables).
Tracking Time = 1 dakika girilir. Quarantine Condition alanında (+) ile açılan formda Criteria = Quarantine condition, Tracking Criteria = HTTP requests, Tracking operator = > ve eşik (ör. 100) girilip koşul eklenir. Bu örnekte bir anahtar dakikada 100'den fazla istek gönderirse karantinaya alınır.
Quarantine Time girilir (varsayılan 10 dakika; 1 saniye – 360 saat). Quarantine Action = Show content seçilir, Quarantine content varsayılan karantina sayfası bırakılır ve Status code = 429 seçilir (varsayılan 401). Varsayılan Silent Drop yanıt vermeden isteği düşürür.
Conditions alanında api-anahtari-var seçilir. Conditions yalnızca takibin yapılacağı trafiği seçer; karantinaya alınan anahtarın bütün istekleri aksiyonla karşılanır.
Aksiyon Add ile kaydedilir.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit ile düzenleme formu açılır.
Details → Actions alanında api-kota seçilir. Aksiyon vService'e eklenmedikçe çalışmaz.
Form Save ile kaydedilir. Cluster'da yapılandırma varsayılan olarak eş cihaza otomatik aktarılır (Manual Sync Mode açıksa Synchronize ile); sayaçlar ve karantina kayıtları ise her cihazda ayrı tutulur.
Doğrulama
vService'in Logs & Tracking sekmesinde api-kota (TRACKING, …) kaynağı açılır (takip logları).
Her API anahtarı ayrı satırda, kendi sayacıylaKomut: for i in $(seq 1 120); do curl -s -o /dev/null -w '%{http_code}\n' -H 'X-API-Key: test-anahtar' https://api.example.com/; done | sort | uniq -c
Eşikten sonraki isteklerde 429Yöntem 2: Advanced Traffic Inspection + Tracking Condition + Block
- Nasıl çalışırAdvanced Traffic Inspection anahtar başına sayaç tutar; Tracking Condition sayacı eşikle karşılaştırır ve Block yalnızca anahtar eşiğin üzerindeyken uygulanır. Ayrı bir karantina süresi yoktur.
- Nerede açılırLoad Balancer → Actions → Advanced Traffic Inspection · Load Balancer → Conditions → Tracking Condition
- Gereksinim Yok
- vService tipi HTTP (Block aksiyonu yalnızca HTTP'de vardır)
Adım adım yapılandırma
Load Balancer → Actions → Add ile Action Name = api-sayac, Action Type = Advanced Traffic Inspection seçilir; Traffic Tag = apikey girilir, Fields to track alanında fx ile Request HTTP header content (X-API-Key) seçilir ve Tracking Period belirlenir. Aksiyon Add ile kaydedilir.
Load Balancer → Conditions → Add ile Condition Name = api-esik, Criteria = Tracking Condition, Tracked Table = apikey, Tracking Criteria = HTTP requests, Tracking operator = > ve eşik girilir. Koşul Add ile kaydedilir.
Load Balancer → Actions → Add ile Action Name = api-kota-engel, Action Type = Block, Status Code = 429 seçilir; Conditions alanında api-esik seçilir. Aksiyon Add ile kaydedilir.
HTTP vService Edit ile açılır.
Details → Actions alanında önce api-sayac, sonra api-kota-engel seçilir.
Form Save ile kaydedilir.
Doğrulama
vService'in Logs & Tracking sekmesinde Advanced Traffic Inspection takip tablosu açılır; eşiğin üzerinde istek gönderilir.
Anahtar başına sayaç; eşik üstünde 429Yöntem 3: AGS → Policy Scope = Composite
- Nasıl çalışırRequests tetikleyicili AGS politikası, Scope Components alanında seçilen değişkenlerin birleşimi (ör. API anahtarı ve istemci adresi) başına ayrı sayaç tutar; Trigger Window Duration içinde Request Threshold aşılınca politikanın aksiyonu uygulanır.
- Nerede açılırAGS → Protection Policies → Bot Protection Policies
- Gereksinim AGS lisansı; AGS etkin vService
- vService tipi HTTP
Adım adım yapılandırma
vService'te AGS açık değilse açılır (iki yol); AGS açıldığında varsayılan akış kullanıcıları reddettiği için önce akış hazırlanır: WAF, L7 DDoS & Threat Protection ve AGS'yi bir vService'e nasıl bağlarım?
AGS → Protection Policies → Bot Protection Policies → Add ile politika formu açılır.
Bot Protection Policy Name girilir; Trigger Type = Requests, Request threshold (formda varsayılan değer gelmez; 1–10000 arası tam sayı, ör. 100) ve Trigger window duration (varsayılan 1 dakika) girilir. Policy scope = Composite seçilir ve Scope Components alanına en az iki değişken (ör. X-API-Key başlığı ve istemci adresi) eklenir; satırlar tekrar edemez. Action seçilir (ör. Deny).
Politika Add ile kaydedilir.
Left Monitor Panel → AGS-Enabled vServices → vService → AGS Management sekmesinde Protection bölümünün Edit bağlantısı tıklanır.
Açılan Edit / Protection penceresinde Bot Protection Policies alanında politika seçilir.
Accept tıklanır; politika AGS Management sekmesindeki Bot Protection kutusunda listelenir.
Doğrulama
Aynı anahtarla pencere içinde eşiğin üzerinde istek gönderilir.
Politikanın aksiyonu (Deny'da 429)Sık Yapılan Hatalar
- Anahtarı göndermeyen istekleri unutmak. Değer boş olan istekler tek bir boş anahtarda toplanır; başlığın varlığı koşulla denetlenir ya da anahtarsız istekler ayrıca IP başına sınırlanır.
- Sınırı bütün yollara uygulamak. Çok sayıda farklı anahtar takip tablosunu doldurur; sınır yalnızca gerekli API yollarına koşulla uygulanır.
- Bot/DDoS Protection'da anahtar bazlı sınır aramak. Bot/DDoS Protection hacim limitlerini kaynak IP, ülke, ağ tipi ya da vService geneli için tutar; anahtar bazlı sınır Quarantine, Advanced Traffic Inspection ya da AGS ile yapılır.
- Cluster'da tek cihazın tablosuna bakmak. Sayaçlar ve karantina kayıtları cihaz başına tutulur; eşik her cihazda ayrı sayılır.
Dokümantasyonda nasıl yapılır
