Aracılığıyla paylaş


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.