Ters ara sunucu aracılığıyla Azure Spring Apps'i kullanıma sunma

Azure Spring Apps
Azure Application Gateway
Azure Front Door

Uygulamalarınızı veya mikro hizmetlerinizi Azure Spring Apps'te barındırdığınızda, bunları her zaman doğrudan İnternet'te yayımlamak istemezsiniz. Bunun yerine bunları ters ara sunucu aracılığıyla kullanıma sunmanız gerekebilir. Bu yaklaşım, uygulamalarınızın önüne bir hizmet yerleştirmenizi sağlar. Hizmet, uygulamalarınızın güvenliğini sağlamaya yardımcı olmak için web uygulaması güvenlik duvarı (WAF) özellikleri, yük dengeleme, yönlendirme, istek filtreleme ve hız sınırlama gibi çapraz kesme işlevleri tanımlayabilir.

Azure Spring Apps'in önünde Azure Uygulaması Lication Gateway veya Azure Front Door gibi yaygın bir ters proxy hizmeti dağıttığınızda, uygulamalarınıza yalnızca ters ara sunucu üzerinden ulaşıldığından emin olmanız gerekir. Bu koruma, kötü amaçlı kullanıcıların WAF'yi atlamaya veya azaltma sınırlarını aşmaya çalışmalarını önlemeye yardımcı olur.

Uygulama tasarımı en iyi yöntemleriyle birlikte Azure DDoS Koruması, DDoS saldırılarına karşı daha fazla savunma sağlamak için gelişmiş DDoS azaltma özellikleri sağlar. Herhangi bir çevre sanal ağında Azure DDOS Koruması'nı etkinleştirmeniz gerekir.

Bu makalede, Azure Spring Apps'te barındırılan uygulamaların yalnızca ters ara sunucu hizmeti aracılığıyla erişilebilir olması için erişim kısıtlamalarının nasıl zorunlu kılındığı açıklanır. Bu kısıtlamaları zorunlu kılmanın önerilen yolu, Azure Spring Apps örneğinizi nasıl dağıttığınıza ve hangi ters proxy'yi kullandığınıza bağlıdır. , sanal ağın içinde veya dışında dağıtım yapıp yapmadığınız bağlı olarak dikkate alınması gereken farklı noktalardır. Bu makalede dört senaryo hakkında bilgi verilmektedir.

  • Azure Spring Apps'i bir sanal ağ içinde dağıtın ve uygulamalarınıza ağ içinden özel olarak erişin.

    • Uygulamalarınızın çalıştırıldığı sanal ağ üzerinde denetime sahipsiniz. Erişimi yalnızca ters ara sunucunuza izin verecek şekilde kilitlemek için ağ güvenlik grupları (NSG) gibi yerel Azure ağ özelliklerini kullanın.

    • Azure Uygulaması lication Gateway kullanarak uygulamalarınızı genel olarak İnternet'te kullanıma sunabilir ve ardından kilitlemek için uygun erişim kısıtlamalarını uygulayabilirsiniz. Bu yaklaşım, bu makalenin devamında Senaryo 1'de açıklanmıştır.

    • Özel sanal ağınızdaki Azure Spring Apps örneğine ulaşamadığından Azure Front Door'un doğrudan kullanımına açık değildir. Azure Front Door arka uçlara yalnızca bir genel IP adresi aracılığıyla veya özel uç nokta kullanan hizmetler aracılığıyla bağlanabilir. Azure Spring Apps'in çok bölgeli dağıtımına sahip olduğunuzda ve genel yük dengelemeye ihtiyacınız varsa, Application Gateway aracılığıyla Azure Spring Apps örneklerinizi kullanıma sunmanıza devam edebilirsiniz. Bu senaryoya ulaşmak için Azure Front Door'ı Application Gateway'in önüne yerleştirirsiniz. Bu yaklaşım, bu makalenin devamında senaryo 2'de açıklanmıştır.

  • Azure Spring Apps'i sanal ağ dışında dağıtın ve uygulamalarınızı bir uç nokta atarsanız doğrudan İnternet'te yayımlayın.

    • Ağı denetlemezsiniz ve erişimi kısıtlamak için NSG'leri kullanamazsınız. Yalnızca ters proxy'nin uygulamalarınıza erişmesine izin vermek için Azure Spring Apps'in içinde bir yaklaşım gerekir.

    • Uygulamalarınıza genel olarak erişilebilir olduğundan, ters ara sunucu olarak Application Gateway veya Azure Front Door kullanabilirsiniz. Application Gateway yaklaşımı, bu makalenin devamında senaryo 3'te açıklanmıştır. Azure Front Door yaklaşımı, bu makalenin devamında senaryo 4'te açıklanmıştır.

    • Gerektiğinde her iki yaklaşımın birleşimini de kullanabilirsiniz. Hem Application Gateway hem de Azure Front Door kullanıyorsanız, Senaryo 2'de kullanılan iki ters proxy arasında aynı erişim kısıtlamalarını kullanın.

Dekont

Application Gateway veya Azure Front Door yerine diğer ters proxy hizmetlerini kullanabilirsiniz. Azure API Management gibi bir Azure sanal ağını temel alan bölgesel hizmetler için bu kılavuz, Application Gateway kılavuzuna benzer. Azure dışı hizmetler kullanıyorsanız, bu kılavuz Azure Front Door kılavuzuna benzer.

Senaryo karşılaştırması

Aşağıdaki tabloda, Azure Spring Apps için dört ters proxy yapılandırma senaryosunun kısa bir karşılaştırması sağlanmaktadır. Her senaryoyla ilgili tüm ayrıntılar için bu makalenin uygun bölümüne bakın.

Senaryo Dağıtım Hizmetler Yapılandırma
1 Sanal ağın içinde Application Gateway - Kullanıma açmak istediğiniz her uygulama için bir uç nokta atayın ve uygun özel etki alanını veya etki alanlarını bu uygulamayla eşleyin.
- Application Gateway'deki arka uç havuzu için her uygulamanın atanan uç noktasını kullanın.
- Hizmet çalışma zamanı alt ağına yalnızca Application Gateway alt ağından, uygulamalar alt ağından ve Azure yük dengeleyiciden gelen trafiğe izin vermek için bir NSG ekleyin. Diğer tüm trafiği engelleyin.
2 Sanal ağın içinde Azure Front Door ve Application Gateway - Senaryo 1'de açıklanan yaklaşımı kullanarak Application Gateway ile Azure Spring Apps arasındaki erişimi kısıtlayın.
- Application Gateway alt ağına yalnızca hizmet etiketine sahip AzureFrontDoor.Backend trafiğe izin vermek için bir NSG oluşturun.
- HTTP üst bilgisinin belirli Azure Front Door örnek kimliğinizi içerdiğini doğrulamak X-Azure-FDID için Application Gateway'de özel bir WAF kuralı oluşturun.
3 Dış sanal ağ Spring Cloud Gateway ile Application Gateway - Arka uç uygulamalarınızı kullanıma açmak için Spring Cloud Gateway'i kullanın. Yalnızca Spring Cloud Gateway uygulaması için atanmış bir uç nokta gerekir. Tüm arka uç uygulamalarının özel etki alanları bu tek Spring Cloud Gateway uygulamasıyla eşlenmelidir.
- Application Gateway'deki arka uç havuzu için Spring Cloud Gateway uygulamasının atanan uç noktasını kullanın.
- Spring Cloud Gateway'de yol koşulunu XForwarded Remote Addr Application Gateway'in genel IP adresine ayarlayın.
- İsteğe bağlı olarak, Spring Framework uygulamalarınızda uygulama özelliğini olarak FRAMEWORKayarlayınserver.forward-headers-strategy.
4 Dış sanal ağ Spring Cloud Gateway ile Azure Front Door - Arka uç uygulamalarınızı kullanıma açmak için Spring Cloud Gateway'i kullanın. Yalnızca Spring Cloud Gateway uygulaması için atanmış bir uç nokta gerekir. Tüm arka uç uygulamalarının özel etki alanları bu tek Spring Cloud Gateway uygulamasıyla eşlenmelidir.
- Azure Front Door'daki arka uç havuzu veya kaynağı için Spring Cloud Gateway uygulamasının atanan uç noktasını kullanın.
- Spring Cloud Gateway'de yol koşulunu XForwarded Remote Addr Azure Front Door'un tüm giden IP aralıklarına ayarlayın ve bu ayarı güncel tutun. HTTP üst bilgisinin Header benzersiz Azure Front Door kimliğinizi içerdiğinden X-Azure-FDID emin olmak için yol koşulunu ayarlayın.
- İsteğe bağlı olarak, Spring Framework uygulamalarınızda uygulama özelliğini olarak FRAMEWORKayarlayınserver.forward-headers-strategy.

Dekont

Yapılandırmanızı ayarladıktan sonra ters proxy'nin atlanmasına ve uygulamanın doğrudan kullanıma açık hale gelmesini sağlayan yanlışlıkla veya kötü amaçlı değişiklikleri önlemek için Azure İlkesi veya kaynak kilitleri kullanmayı göz önünde bulundurun. Azure Spring Apps içindeki yapılandırma Azure denetim düzlemi tarafından görülemediğinden bu koruma yalnızca Azure kaynakları (özellikle NSG'ler) için geçerlidir.

Sanal ağınızın içinde dağıtım

Azure Spring Apps bir sanal ağa dağıtıldığında iki alt ağ kullanır:

  • İlgili ağ kaynaklarını içeren bir hizmet çalışma zamanı alt ağı
  • Kodunuzu barındıran uygulamalar alt ağı

Hizmet çalışma zamanı alt ağı uygulamalarınıza bağlanmak için yük dengeleyiciyi içerdiğinden, yalnızca ters ara sunucunuzdan gelen trafiğe izin vermek için bu hizmet çalışma zamanı alt ağından bir NSG tanımlayabilirsiniz. Diğer tüm trafiği engellediğinizde, sanal ağdaki hiç kimse ters ara sunucuya gitmeden uygulamalarınıza erişemez.

Önemli

Alt ağ erişiminin yalnızca ters ara sunucuyla kısıtlanması, istemci cihazdan uygulamaya doğrudan bağlantıya bağlı olan özelliklerde hatalara neden olabilir (örneğin , günlük akışı). NSG kurallarını özellikle bu istemci cihazlar için ve yalnızca belirli bir doğrudan erişim gerektiğinde eklemeyi göz önünde bulundurun.

Ters proxy'niz aracılığıyla kullanıma açmak istediğiniz her uygulamanın, sanal ağdaki uygulamaya ulaşabilmesi için atanmış bir uç noktası olmalıdır. Her uygulama için, http üst bilgisini ters proxy'de geçersiz kılmayı Host önlemek ve özgün ana bilgisayar adını olduğu gibi tutmak için kullandığı özel etki alanlarını da eşlemeniz gerekir. Bu yöntem bozuk tanımlama bilgileri veya düzgün çalışmayan yeniden yönlendirme URL'leri gibi sorunları önler. Daha fazla bilgi için bkz . Konak adı koruma.

Dekont

Alternatif olarak (veya derinlemesine savunma için, muhtemelen NSG'ye ek olarak) Azure Spring Apps'i sanal ağınızın dışına dağıttığınızda yönergeleri izleyebilirsiniz. Bu bölümde erişim kısıtlamalarının genellikle Spring Cloud Gateway kullanılarak nasıl gerçekleştirildiği açıklanır. Bu, artık atanmış bir uç noktaya veya özel etki alanına ihtiyaç duymadıkları için arka uç uygulamaları da etkiler.

Senaryo 1: Application Gateway'i ters ara sunucu olarak kullanma

Senaryo 1'de Application Gateway kullanarak uygulamalarınızı genel olarak İnternet'te kullanıma sunma ve ardından kilitlemek için uygun erişim kısıtlamalarını uygulama açıklanmaktadır.

Aşağıdaki diyagramda Senaryo 1 için mimari gösterilmiştir:

Diagram that shows the use of Azure Application Gateway with Azure Spring Apps in a virtual network.

Bu mimarinin bir Visio dosyasını indirin.

Application Gateway, Azure Spring Apps örneğinizin önünde durduğunda arka uç havuzu olarak Spring Cloud Gateway uygulamasının atanan uç noktasını kullanırsınız. Örnek uç nokta: myspringcloudservice-myapp.private.azuremicroservices.io. Uç nokta, hizmet çalışma zamanı alt ağındaki bir özel IP adresine çözümler. Bu nedenle, erişimi kısıtlamak için hizmet çalışma zamanı alt ağına aşağıdaki gelen güvenlik kurallarıyla bir NSG yerleştirebilirsiniz (Reddetme kuralına en düşük önceliği vererek):

Eylem Source type Kaynak değer Protokol Hedef bağlantı noktası aralıkları
İzin ver IP adresleri Application Gateway alt ağdaki özel IP aralığı (örneğin, 10.1.2.0/24). TCP 80, 443 (veya uygun diğer bağlantı noktaları)
İzin ver IP adresleri Azure Spring Apps'teki uygulamalar alt ağdaki özel IP aralığı (örneğin, 10.1.1.0/24). TCP *
İzin ver Hizmet etiketi AzureLoadBalancer Any *
Reddet Hizmet etiketi Any Any *

Senaryo 1 yapılandırması, hizmet çalışma zamanı alt ağından yalnızca aşağıdaki kaynaklardan gelen trafiğe izin verdiğinden emin olur:

  • Ayrılmış Application Gateway alt ağı
  • Uygulamalar alt ağı (iki Azure Spring Apps alt ağı arasında çift yönlü iletişim gereklidir.)
  • Azure yük dengeleyici (genel bir Azure platformu gereksinimidir)

Diğer tüm trafik engellenir.

Senaryo 2: Ters ara sunucu olarak hem Azure Front Door hem de Application Gateway kullanın

Daha önce belirtildiği gibi, özel sanal ağınıza ulaşamadığından Azure Front Door'un doğrudan Azure Spring Apps'in önüne yerleştiremezsiniz. (Azure Front Door Standard veya Premium bir sanal ağdaki özel uç noktalara bağlanabilir, ancak Azure Spring Apps şu anda özel uç nokta desteği sunmaz.) Azure Front Door'un farklı Azure bölgelerindeki birden çok Azure Spring Apps örneğinde genel yük dengelemesi gerektirmesi gibi bir yöntemle azure front door kullanmak istiyorsanız uygulamalarınızı Yine de Application Gateway aracılığıyla kullanıma açabilirsiniz. Bu senaryoya ulaşmak için Azure Front Door'ı Application Gateway'in önüne yerleştirirsiniz.

Aşağıdaki diyagramda Senaryo 2'nin mimarisi gösterilmiştir:

Diagram that shows the use of Azure Front Door and Azure Application Gateway with Azure Spring Apps in a virtual network.

Bu mimarinin bir Visio dosyasını indirin.

Senaryo 2 yapılandırması, Application Gateway ile Azure Spring Apps arasındaki erişim kısıtlamalarını Senaryo 1 ile aynı şekilde uygular. Hizmet çalışma zamanı alt ağına uygun kurallarla bir NSG yerleştirirsiniz.

Senaryo 2'de Application Gateway'in yalnızca Azure Front Door örneğinizden gelen trafiği kabul etmesini de sağlamanız gerekir. Azure Front Door belgelerinde yalnızca Azure Front Door trafiğine izin vermek için arka uç erişiminin nasıl kilit altında bırakılabildiğinden yararlanabilirsiniz. Arka uç Application Gateway olduğunda, bu kısıtlamayı aşağıdaki gibi uygulayabilirsiniz:

  • Application Gateway alt ağına yalnızca hizmet etiketine sahip AzureFrontDoor.Backend trafiğe izin vermek için bir NSG oluşturun (Azure Front Door dışında hiçbir şey Application Gateway'e ulaşamaz). Application Gateway için NSG kısıtlamaları bölümünde açıklandığı gibi diğer gerekli hizmet etiketlerini de eklediğinizden emin olun.
  • HTTP üst bilgisinin belirli Azure Front Door örnek kimliğinize ayarlandığını doğrulamak X-Azure-FDID için Application Gateway'de özel bir WAF kuralı oluşturun. Bu yöntem, aynı IP aralıklarını kullanan başka bir kuruluşun Azure Front Door örneklerinin Application Gateway örneğinize ulaşmasını sağlamaz.

Sanal ağınızın dışında dağıtım

Azure Spring Apps'i sanal ağın dışında dağıttığınızda, ağı denetlemediğiniz için yerel Azure ağ özelliklerini kullanamazsınız. Bunun yerine, yalnızca ters ara sunucudan gelen trafiğe izin vermek için uygulamaların kendilerine gerekli erişim kısıtlamalarını uygulamanız gerekir. Çok sayıda uygulamanız varsa, bu yaklaşım karmaşıklık katabilir ve her uygulamanın uygun şekilde yapılandırılmaması riski vardır.

Uygulamalarınızı kullanıma açmak ve güvenliğini sağlamaya yardımcı olmak için Spring Cloud Gateway'i kullanma

Tek tek uygulamaların geliştiricilerinden erişim denetiminin sorumluluğunu kaldırmak için Spring Cloud Gateway'i kullanarak çapraz kesme kısıtlamaları uygulayabilirsiniz. Spring Cloud Gateway, diğer tüm uygulamalar gibi Azure Spring Apps'e dağıtabileceğiniz yaygın olarak kullanılan bir Spring projesidir. Spring Cloud Gateway'i kullanarak Azure Spring Apps örneğinde kendi uygulamalarınızı gizli tutabilir ve yalnızca paylaşılan Spring Cloud Gateway uygulaması aracılığıyla erişilebildiğinden emin olabilirsiniz. Ardından, Spring Cloud Gateway'in yerleşik bir özelliği olan yol koşullarını kullanarak bu uygulamayı gerekli erişim kısıtlamalarıyla yapılandırabilirsiniz. Yol önkoşulları, isteğin arka uç uygulamasına mı yönlendirileceğini yoksa reddedileceğini belirlemek için gelen HTTP isteğinin farklı özniteliklerini kullanabilir. Koşul, istemci IP adresi, istek yöntemi veya yolu, HTTP üst bilgileri vb. gibi öznitelikleri kullanabilir.

Önemli

Spring Cloud Gateway'i arka uç uygulamalarınızın önüne bu şekilde yerleştirdiğinizde, tüm özel etki alanlarınızı arka uç uygulamaları yerine Spring Cloud Gateway uygulamasına eşlemeniz gerekir. Aksi takdirde Azure Spring Apps, bu özel etki alanlarından herhangi biri için istek geldiğinde gelen trafiği ilk olarak Spring Cloud Gateway'inize yönlendirmez.

Bu yaklaşım, ters proxy'nizin HTTP Host üst bilgisini geçersiz kılmadığını ve özgün ana bilgisayar adını olduğu gibi tuttuğunu varsayar. Daha fazla bilgi için bkz . Konak adı koruma .

Bu desen yaygın olarak kullanılır. Bu makalenin amaçları doğrultusunda, uygulamalarınızı Spring Cloud Gateway aracılığıyla kullanıma sunduğumuzu varsayıyoruz. Yalnızca ters proxy'den gelen isteklere izin verildiğinden emin olmak için gerekli erişim kısıtlamalarını ayarlamak için yol koşullarını kullanmanızı bekliyoruz. Spring Cloud Gateway'i kullanmasanız bile, aynı genel ilkeler geçerlidir. Ancak, bu makalenin devamında açıklanan HTTP üst bilgisini temel alarak X-Forwarded-For uygulamalarınızda kendi istek filtreleme özelliklerinizi oluşturmanız gerekir.

Dekont

Spring Cloud Gateway aynı zamanda yönlendirme, istek filtreleme ve hız sınırlama gibi hizmetler sağlayan bir ters proxy'dir. Bu hizmet senaryonuz için ihtiyacınız olan tüm özellikleri sağlıyorsa Application Gateway veya Azure Front Door gibi ek bir ters ara sunucuya ihtiyacınız olmayabilir. Diğer Azure hizmetlerini kullanmayı göz önünde bulundurmanın en yaygın nedenleri, her ikisinin de sağladığı WAF özellikleri veya Azure Front Door'un sunduğu genel yük dengeleme özellikleridir.

Spring Cloud Gateway'in nasıl çalıştığını açıklama, bu makalenin kapsamı dışındadır. Kod veya yapılandırma aracılığıyla özelleştirebileceğiniz son derece esnek bir hizmettir. İşleri basit tutmak için, bu makalede yalnızca kod değişiklikleri gerektirmeyen yalnızca yapılandırma temelli bir yaklaşım açıklanmaktadır. Dağıtılan Spring Cloud Gateway uygulamasına geleneksel application.properties veya application.yml dosyayı ekleyerek bu yaklaşımı uygulayabilirsiniz. Ayrıca, Azure Spring Apps'te yapılandırma dosyasını bir Git deposuna dışlayan bir Yapılandırma Sunucusu kullanarak da yaklaşımı uygulayabilirsiniz. Aşağıdaki örneklerde YAML söz dizimi yaklaşımını application.yml uygularız, ancak eşdeğer application.properties söz dizimi de çalışır.

İstekleri uygulamalarınıza yönlendirme

Varsayılan olarak, Azure Spring Apps'teki uygulamanıza atanmış bir uç nokta veya bunun için yapılandırılmış özel bir etki alanı yoksa, dışarıdan erişilemez. Bir uygulama Spring Cloud Service Kayıt Defteri'ne kaydolduğunda Spring Cloud Gateway, trafiği doğru hedef uygulamaya iletmek için yönlendirme kurallarını kullanabilmesi için uygulamayı bulabilir.

Sonuç olarak, Azure Spring Apps'te uç noktaya atanması gereken tek uygulama Spring Cloud Gateway uygulamanızdır. Bu uç nokta dışarıdan erişilebilir olmasını sağlar. Diğer uygulamalara uç nokta atamamalısınız. Aksi takdirde, uygulamalara Spring Cloud Gateway yerine doğrudan ulaşılabilir ve bu da ters proxy'nin atlanmasına izin verir.

Spring Cloud Gateway aracılığıyla tüm kayıtlı uygulamaları kullanıma sunmanın kolay bir yolu, DiscoveryClient yol tanımı bulucuyu aşağıdaki gibi kullanmaktır:

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          predicates:
          - Path="/"+serviceId+"/**" # Include the Path predicate to retain default behavior
          - (...)

Alternatif olarak, uygulamaya özgü yollar tanımlayarak Spring Cloud Gateway aracılığıyla belirli uygulamaları seçmeli olarak kullanıma sağlayabilirsiniz:

spring:
  cloud:
    gateway:
      routes:
      - id: my_app1_route
        uri: lb://MY-APP1
        filters:
        - RewritePath=/myapp1(?<segment>/?.*), $\{segment}
        predicates:
        - (...)

Hem bulma bulucu yaklaşımı hem de açık yol tanımlarıyla, geçersiz istekleri reddetmek için yol koşullarını kullanabilirsiniz. Bu durumda, Azure Spring Apps'in önünde yer alan beklenen ters proxy'den gelmeyen istekleri engellemek için bu işlevi kullanırız.

X-Forwarded-For HTTP üst bilgisi ile erişimi kısıtlama

Azure Spring Apps'e bir uygulama dağıttığınızda HTTP istemcisi veya ters ara sunucu doğrudan uygulamaya bağlanmaz. Ağ trafiği önce bir iç giriş denetleyicisinden geçer.

Dekont

Bu yaklaşım, izleyen senaryolarda uygulamanıza ulaşmadan önce istek işlem hattında üç veya dört ters proxy'niz olduğu anlamına gelir. Bunlar olası ters proxy'lerdir: Azure Front Door ve/veya Application Gateway, giriş denetleyicisi ve Spring Cloud Gateway uygulamanız.

Ek hizmet nedeniyle doğrudan ağ istemcisinin IP adresi her zaman bir iç Azure Spring Apps bileşenidir. IP adresi hiçbir zaman uygulamanızı çağırmayı beklediğiniz ters proxy gibi mantıksal istemci değildir. Erişim kısıtlamaları için istemci IP adresini kullanamazsınız. Varsayılan olarak istemci IP adresini kullandığından Spring Cloud Gateway'in RemoteAddr istek filtreleme için yerleşik yol koşulunu da kullanamazsınız.

Neyse ki Azure Spring Apps her zaman mantıksal istemcinin IP adresini istekteki X-Forwarded-For HTTP üst bilgisine uygulamanıza ekler. Üst bilginin son (en sağdaki) değeri X-Forwarded-For her zaman mantıksal istemcinin IP adresini içerir.

İstekleri üst bilgi temelinde X-Forwarded-For filtrelemek için yerleşik XForwarded Remote Addr yol koşulunu kullanabilirsiniz. Bu koşul, en doğru değer olarak izin verilen ters ara sunucunuzun IP adreslerinin veya IP aralıklarının listesini yapılandırmanıza olanak tanır.

Dekont

Yol XForwarded Remote Addr koşulu Spring Cloud Gateway sürüm 3.1.1 veya üzerini gerektirir. Sürüm 3.1.1, Spring Cloud 2021.0.1 sürüm treninde kullanılabilir. Kullanamıyorsanız, rota koşulunun RemoteAddr istemci IP adresini belirleme şeklini değiştirmek için Spring Cloud Gateway uygulamanızda birkaç kod değişikliği yapın. Yol koşuluyla XForwarded Remote Addr elde ettiğiniz sonucu elde edebilirsiniz. Kullanılacak yol koşulunu RemoteAddrXForwardedRemoteAddressResolver yapılandırın ve ikincisini değeriyle maxTrustedIndex1yapılandırın. Bu yaklaşım Spring Cloud Gateway uygulamanızı üst bilginin en doğru değerini X-Forwarded-For mantıksal istemci IP adresi olarak kullanacak şekilde yapılandırıyor.

Uygulamanızı doğru ana bilgisayar adını ve istek URL'sini görecek şekilde yapılandırma

Spring Cloud Gateway'i kullandığınızda dikkate almanız gereken önemli bir faktör vardır. Spring Cloud Gateway, giden istekte HTTP Host üst bilgisini uygulama örneğinizin iç IP adresine ayarlar, örneğin Host: 10.2.1.15:1025. Uygulama kodunuzun gördüğü isteğin ana bilgisayar adı artık tarayıcının gönderdiği isteğin özgün ana bilgisayar adı (gibi contoso.com) değildir. Bazı durumlarda bu sonuç bozuk tanımlama bilgileri veya yeniden yönlendirme URL'lerinin düzgün çalışmaması gibi sorunlara yol açabilir. Bu tür sorunlar hakkında daha fazla bilgi edinmek ve bunlardan kaçınmak için Application Gateway veya Azure Front Door gibi bir ters ara sunucu hizmetini yapılandırma hakkında daha fazla bilgi için bkz . Konak adı koruma.

Spring Cloud Gateway, üst bilgide Forwardedözgün ana bilgisayar adını sağlar. Ayrıca, uygulamanızın özgün istek URL'sini yeniden yapılandırmak için bunları kullanabilmesi için , X-Forwarded-Protove X-Forwarded-Prefix gibi X-Forwarded-Portdiğer üst bilgileri de ayarlar. Spring Framework uygulamalarında, ayarı uygulama özelliklerinizde olarak ayarlayarak bu yapılandırmayı server.forward-headers-strategyFRAMEWORK otomatik olarak gerçekleştirebilirsiniz. (Bu değeri olarak NATIVEayarlamayın. Aksi takdirde, gerekli X-Forwarded-Prefix üst bilgiyi dikkate almayan diğer üst bilgiler kullanılır.) Daha fazla bilgi için bkz . Ön uç proxy sunucusunun arkasında çalıştırma. Bu yapılandırmayla , HttpServletRequest.getRequestURL yöntemi tüm bu üst bilgileri dikkate alır ve tarayıcı tarafından gönderilen tam istek URL'sini döndürür.

Dekont

Spring Cloud Gateway'de giden istekte özgün ana bilgisayar adını koruyan filtreyi kullanmak PreserveHostHeader isteyebilirsiniz. Ancak, bu konak adı Spring Cloud Gateway uygulamasında özel bir etki alanı olarak zaten eşlendiğinden bu yaklaşım çalışmaz. Son arka uç uygulamasında ikinci kez eşlenemez. Arka uç uygulaması gelen isteği reddettiği için bu yapılandırma bir HTTP 404 hataya neden olur. Ana bilgisayar adını tanımıyor.

Senaryo 3: Spring Cloud Gateway ile Application Gateway kullanma

Senaryo 3'te Spring Cloud Gateway uç noktası aracılığıyla herkese açık uygulamalar için ters ara sunucu olarak Application Gateway'in nasıl kullanılacağı açıklanmaktadır.

Aşağıdaki diyagramda Senaryo 3'e yönelik mimari gösterilmiştir:

Diagram that shows the use of Azure Application Gateway with Azure Spring Apps outside of a virtual network.

Bu mimarinin bir Visio dosyasını indirin.

Application Gateway, Azure Spring Apps örneğinizin önünde durduğunda arka uç havuzu olarak Spring Cloud Gateway uygulamasının atanan uç noktasını kullanırsınız. Örnek uç nokta: myspringcloudservice-mygateway.azuremicroservices.io. Azure Spring Apps sanal ağın dışında dağıtıldığından, bu URL genel IP adresine çözümleniyor. Arka uç havuzu genel bir uç nokta olduğunda, Application Gateway arka uç hizmetine ulaşmak için ön uç genel IP adresini kullanır.

Yalnızca Application Gateway örneğinizden gelen isteklerin Spring Cloud Gateway'e ulaşmasına izin vermek için yol koşulunu XForwarded Remote Addr yapılandırabilirsiniz. Koşulunu, aşağıdaki örnekte gösterildiği gibi yalnızca Application Gateway'inizin ayrılmış genel IP adresinden gelen isteklere izin verecek şekilde yapılandırın:

(...)
predicates:
- XForwardedRemoteAddr="20.103.252.85"

Senaryo 4: Spring Cloud Gateway ile Azure Front Door kullanma

Senaryo 4'te, Spring Cloud Gateway uç noktası üzerinden genel olarak erişilebilen uygulamalar için ters ara sunucu olarak Azure Front Door'un nasıl kullanılacağı açıklanır.

Aşağıdaki diyagramda Senaryo 4'e yönelik mimari gösterilmiştir:

Diagram that shows the use of Azure Front Door with Azure Spring Apps outside of a virtual network.

Bu mimarinin bir Visio dosyasını indirin.

Senaryo 3'e benzer şekilde, bu yapılandırma Azure Front Door'da arka uç havuzu veya kaynağı olarak Spring Cloud Gateway uygulamasının genel URL'sini kullanır. Örnek uç nokta: https://myspringcloudservice-mygateway.azuremicroservices.io.

Azure Front Door birçok uç konumu olan genel bir hizmet olduğundan, arka uç havuzuyla iletişim kurmak için birçok IP adresi kullanır. Azure Front Door belgelerinde , yalnızca Azure Front Door trafiğine izin vermek için arka uç erişiminin nasıl kilitlendiği açıklanır. Ancak bu senaryoda, uygulamalarınızın dağıtıldığı Azure ağını denetlemezsiniz. Ne yazık ki hizmet etiketini kullanarak AzureFrontDoor.Backend güncel olması garanti edilen giden Azure Front Door IP adreslerinin tam listesini alamazsınız. Bunun yerine Azure IP aralıklarını ve hizmet etiketlerini indirmeniz, bölümü bulmanız AzureFrontDoor.Backend ve dizideki addressPrefixes tüm IP aralıklarını yol koşulu yapılandırmasına XForwarded Remote Addr kopyalamanız gerekir.

Önemli

Azure Front Door tarafından kullanılan IP aralıkları değişebilir. Yetkili Azure IP aralıkları ve hizmet etiketleri dosyası haftalık olarak yayımlanır ve IP aralıklarında yapılan değişiklikleri kaydeder. Yapılandırmanızın güncel kalmasını sağlamak için IP aralıklarını haftalık olarak doğrulayın ve yapılandırmanızı gerektiği gibi güncelleştirin (ideal olarak, otomatik bir şekilde). Bu yaklaşımın bakım yükünü önlemek için hizmet etiketiyle bir NSG kullanarak Azure Spring Apps'i bir sanal ağda açıklanan diğer senaryolarla AzureFrontDoor.Backend dağıtabilirsiniz.

Azure Front Door IP aralıkları diğer kuruluşlarla paylaşıldığından, benzersiz Front Door IDöğesini içeren HTTP üst bilgisine göre yalnızca belirli Azure Front Door örneğine erişimi kilitlediğinizden X-Azure-FDID de emin olmanız gerekir. Belirtilen HTTP üst bilgisinin Header belirli bir değeri olmadığı sürece isteği reddeden yol koşulunu kullanarak erişimi kısıtlayabilirsiniz.

Bu senaryoda Spring Cloud Gateway yol koşulu yapılandırmanız aşağıdaki örnekteki gibi görünebilir:

(...)
predicates:
- XForwardedRemoteAddr="13.73.248.16/29","20.21.37.40/29","20.36.120.104/29","20.37.64.104/29", ...(and many more)...
- Header="X-Azure-FDID", "e483e3cc-e7f3-4e0a-9eca-5f2a62bde229"

Katkıda Bulunanlar

Microsoft bu içeriği korur. Aşağıdaki katkıda bulunan özgün içeriği geliştirdi.

Asıl yazar:

Nonpublic LinkedIn profillerini görmek için LinkedIn'de oturum açın.

Sonraki adımlar