Azure API Management ile gelişmiş istek kısıtlama
UYGULANANLAR: Tüm API Management katmanları
Gelen istekleri kısıtlayabilmek, Azure API Management'ın önemli bir rolüdür. API Management, isteklerin oranını veya aktarılan toplam istekleri/verileri denetleyerek API sağlayıcılarının API'lerini kötüye kullanıma karşı korumalarına ve farklı API ürün katmanları için değer oluşturmalarına olanak tanır.
Hız limitleri ve kotaları
Hız sınırları ve kotalar farklı amaçlar için kullanılır.
Hız sınırları
Hız sınırları genellikle kısa ve yoğun hacim artışlarına karşı koruma sağlamak amacıyla kullanılır. Örneğin, arka uç hizmetinizin veritabanında yüksek çağrı hacmine sahip bir performans sorunu olduğunu biliyorsanız, bu ayarı kullanarak bir rate-limit-by-key
ilkeyi yüksek çağrı hacmine izin vermeyecek şekilde ayarlayabilirsiniz.
Dikkat
Azaltma mimarisinin dağıtılmış yapısı nedeniyle hız sınırlaması hiçbir zaman tam olarak doğru değildir. Yapılandırılan ve izin verilen gerçek istek sayısı arasındaki fark, istek hacmine ve hızına, arka uç gecikme süresine ve diğer faktörlere göre değişiklik gösterir.
Kotalar
Kotalar genellikle daha uzun bir süre boyunca çağrı sınırlarını denetlemek için kullanılır. Örneğin, belirli bir abonenin belirli bir ay içinde gerçekleştirebileceği toplam çağrı sayısını ayarlayabilir. API'nizden para kazanmak için, katman tabanlı abonelikler için kotalar farklı ayarlanabilir. Örneğin, Bir Temel katman aboneliği ayda en fazla 10.000 çağrı yapabilirken Premium katmanı her ay 100.000.000'e kadar çağrı yapabilir.
Azure API Management'ta hız sınırları genellikle ani artışlara karşı koruma sağlamak için düğümler arasında daha hızlı yayılır. Buna karşılık, kullanım kotası bilgileri daha uzun bir süre boyunca kullanılır ve bu nedenle uygulanması farklıdır.
Not
Hizmet platformunda temel işlem kaynakları yeniden başlatıldığında API Management, kotaya ulaşıldıktan sonra kısa bir süre için istekleri işlemeye devam edebilir.
Ürün tabanlı azaltma
Belirli bir abonelik kapsamındaki hız azaltma özellikleri, API sağlayıcısının API'sini kullanmak üzere kaydolan geliştiricilere sınırlar uygulaması için yararlıdır. Ancak, örneğin API'nin tek tek son kullanıcılarını azaltmaya yardımcı olmaz. Geliştiricinin uygulamasının tek bir kullanıcısının kotanın tamamını kullanması ve ardından geliştiricinin diğer müşterilerinin uygulamayı kullanabilmesini engellemesi mümkündür. Ayrıca, yüksek hacimli istekler oluşturabilen birkaç müşteri, erişimi zaman zaman kullanıcılarla sınırlayabilir.
Özel anahtar tabanlı azaltma
Not
rate-limit-by-key
ve quota-by-key
ilkeleri, Azure API Management'ın Tüketim katmanında kullanılamaz. İlke quota-by-key
şu anda v2 katmanlarında da kullanılamaz.
Anahtara göre hız sınırı ve anahtara göre kota ilkeleri, trafik denetimi için daha esnek bir çözüm sağlar. Bu ilkeler, trafik kullanımını izlemek için kullanılan anahtarları tanımlamak için ifadeler tanımlamanıza olanak sağlar. Bunun çalışma şekli bir örnekle en kolay şekilde gösterilmiştir.
IP adresi azaltma
Aşağıdaki ilkeler, tek bir istemci IP adresini dakikada yalnızca 10 çağrıyla kısıtlar ve ayda toplam 1.000.000 çağrı ve 10.000 kilobayt bant genişliği sağlar.
<rate-limit-by-key calls="10"
renewal-period="60"
counter-key="@(context.Request.IpAddress)" />
<quota-by-key calls="1000000"
bandwidth="10000"
renewal-period="2629800"
counter-key="@(context.Request.IpAddress)" />
İnternet'te tüm istemciler benzersiz bir IP adresi kullandıysa, bu kullanıcı tarafından kullanımı sınırlamanın etkili bir yolu olabilir. Ancak, bir NAT cihazı aracılığıyla İnternet'e erişmeleri nedeniyle birden çok kullanıcının tek bir genel IP adresi paylaşması olasıdır. Buna rağmen, kimliği doğrulanmamış erişime izin veren API'ler IpAddress
için en iyi seçenek olabilir.
Kullanıcı kimliği azaltma
Bir son kullanıcının kimliği doğrulanmışsa, söz konusu kullanıcıyı benzersiz olarak tanımlayan bilgilere göre bir azaltma anahtarı oluşturulabilir.
<rate-limit-by-key calls="10"
renewal-period="60"
counter-key="@(context.Request.Headers.GetValueOrDefault("Authorization","").AsJwt()?.Subject)" />
Bu örnekte Yetkilendirme üst bilgisini ayıklama, nesneye JWT
dönüştürme ve belirtecin konusunu kullanarak kullanıcıyı tanımlama ve bunu hız sınırlama anahtarı olarak kullanma gösterilmektedir. Kullanıcı kimliği içinde JWT
diğer taleplerden biri olarak depolanıyorsa, bu değer yerine kullanılabilir.
Birleştirilmiş ilkeler
Kullanıcı tabanlı azaltma ilkeleri abonelik tabanlı azaltma ilkelerine göre daha fazla denetim sağlasa da, her iki özelliği de birleştiren değer vardır. Ürün abonelik anahtarına göre azaltma (Çağrı oranını aboneliğe göre sınırla ve Aboneliğe göre kullanım kotasını ayarla), kullanım düzeylerine göre ücretlendirilerek BIR API'den para kazanmayı etkinleştirmenin harika bir yoludur. Kullanıcı tarafından kısıtlayabilmenin daha ayrıntılı denetimi tamamlayıcıdır ve bir kullanıcının davranışının başka bir kullanıcının deneyimini düşürmesini önler.
İstemci tabanlı azaltma
Azaltma anahtarı bir ilke ifadesi kullanılarak tanımlandığında, azaltmanın kapsamını seçen API sağlayıcısıdır. Ancak, bir geliştirici kendi müşterilerini nasıl sınırladıklarını denetlemek isteyebilir. Bu, geliştiricinin istemci uygulamasının anahtarı API'ye iletmesine izin veren özel bir üst bilgi getirilerek API sağlayıcısı tarafından etkinleştirilebilir.
<rate-limit-by-key calls="100"
renewal-period="60"
counter-key="@(request.Headers.GetValueOrDefault("Rate-Key",""))"/>
Bu, geliştiricinin istemci uygulamasının hız sınırlama anahtarını nasıl oluşturmak istediğini seçmesini sağlar. İstemci geliştiriciler, kullanıcılara anahtar kümeleri ayırarak ve anahtar kullanımını döndürerek kendi hız katmanlarını oluşturabilir.
Özet
Azure API Management, API hizmetinizi korumak ve buna değer katmak için hız ve kotada azaltma sağlar. Özel kapsam belirleme kurallarıyla yeni azaltma ilkeleri, müşterilerinizin çok daha iyi uygulamalar oluşturmasını sağlamak için bu ilkeler üzerinde daha ayrıntılı denetime sahip olmanıza olanak tanır. Bu makaledeki örnekler, anahtarları istemci IP adresleri, kullanıcı kimliği ve istemci tarafından oluşturulan değerlerle sınırlayan anahtarları üreterek bu yeni ilkelerin kullanımını göstermektedir. Ancak, iletinin kullanıcı aracısı, URL yolu parçaları, ileti boyutu gibi kullanılabilecek başka birçok bölümü vardır.
Sonraki adımlar
Lütfen bu konu için GitHub sorunu olarak bize geri bildiriminizi gönderin. Senaryolarınızda mantıksal bir seçim olan diğer olası anahtar değerlerini duymak harika olacaktır.