Microsoft Teams kanal botunuzun ve web uygulamanızın güvenlik duvarı arkasında güvenliğini sağlamaya yardımcı olun

Azure App Service
Azure Web Application Firewall

Bu örnek senaryo, Azure Özel Bağlantı ve Azure Özel Uç Noktası kullanarak Bir Microsoft Teams kanal botunun web uygulamasına bağlantının güvenliğini sağlar. Aynı zamanda Teams istemcisindeki kanalların botla bir Azure Güvenlik Duvarı örneği aracılığıyla kullanıma sunulan bir IP üzerinden iletişim kurmasını sağlar.

Mimari

Teams'Azure Güvenlik Duvarı akış çizelgesini gösteren diyagram.

Bu mimarinin bir Visio dosyasını indirin.

Veri akışı

  • Azure Sanal Ağ, Azure kaynakları arasında iletişim sağlar. Bu örnekteki sanal ağ 10.0.0.0/16 adres alanını kullanır ve senaryonun gerekli bileşenleri tarafından kullanılmak üzere üç alt ağ içerir:

    • Azure Güvenlik Duvarı Alt Ağı (10.0.1.0/26).

    • Sanal Ağ Tümleştirme Alt Ağı (10.0.2.0/24), botunun özel uç noktasından güvenlik duvarına trafiği yönlendirmek için kullanılır.

    • Güvenlik duvarından botunun özel uç noktasına trafiği yönlendirmek için kullanılan Özel Uç Nokta Alt Ağı (10.0.3.0/24).

  • Azure Güvenlik Duvarı istemcilerin temel bot hizmetleriyle iletişim kurmak için kullanabileceği tek bir genel IP adresini kullanıma sunar. Normalde, bir güvenlik duvarı merkez-uç mimarileri için ortak bir desen olan kendi sanal ağına yerleştirilir, ancak bu basitleştirilmiş örnek tüm hizmetleri ve kaynakları tek bir sanal ağa dağıtır. Azure Güvenlik Duvarı örneği kendi alt asına yerleştirilir.

  • Yol tablosu , trafiğin sanal ağ içinde aldığı yolları tanımlar. Bota gelen ve bottan gelen trafiğin güvenlik duvarından geçmesini sağlar.

    • 0.0.0.0/0 adres ön ekine sahip varsayılan yol, Azure'a Azure Güvenlik Duvarı örneğinin dağıtıldığı alt ağa başka bir yolun adres ön eki içinde olmayan trafiği yönlendirmesini bildirir. Bu örnekte tek yol budur.

    • Sanal Ağ Tümleştirme Alt Ağı ve Özel Uç Nokta Alt Ağı, yol tablosuyla ilişkilendirilir ve bu tablolardan geçen trafiğin güvenlik duvarı üzerinden yönlendirildiğinden emin olur.

  • Bot Hizmeti bot app service planı, app service ve bot kanalları kaydından oluşur.

    • Uygulama hizmeti, güvenlik duvarının IP adresine işaret eden kayıtlı bir özel etki alanına sahiptir. Bu şekilde, uygulama hizmetine yalnızca güvenlik duvarı üzerinden erişilebilir.
  • Azure özel uç noktası üzerinden bot uygulama hizmetine gelen erişim için Azure Özel Bağlantı hizmeti.

  • Sanal ağ tümleştirmesi , bot uygulama hizmetinden giden trafiğin güvenlik duvarından geçmesini sağlayarak uygulama hizmetini sanal ağa bağlar.

Bileşenler

Alternatifler

  • App Service Ortamı, App Service uygulamalarını yüksek ölçekte güvenli bir şekilde çalıştırmak için tamamen yalıtılmış ve ayrılmış bir ortam sağlayabilir. Bu örnek, maliyetleri azaltmak için bir App Service Ortamı kullanmaz, ancak örnek mimari değişikliklerle bunu destekleyebilecektir.

Senaryo ayrıntıları

Botlar, Teams kullanıcılarının metin, etkileşimli kartlar ve görev modülleri aracılığıyla web hizmetleriyle etkileşim kurmasına olanak tanır. Microsoft Bot Framework ve Azure Bot Hizmeti, bu botları oluşturmak ve yönetmek için kullanımı kolay bir araç kümesi sağlar.

C#, JavaScript ve Python gibi çeşitli dilleri kullanarak bot geliştirebilirsiniz. Bunlar geliştirildikten sonra Bunları Azure'a dağıtabilirsiniz. Botun önemli bileşenlerinden biri, kullanıcıların iletişim kurabilecekleri temel mantığı ve arabirimi içeren web uygulamasıdır. Botun çalışması için temel gereksinimlerden biri, genel olarak erişilebilen bir HTTPS uç noktasını kullanıma sunması gerektiğidir.

InfoSec ilkesi genellikle web uygulamalarına gelen tüm trafiğin kurumsal bir güvenlik duvarından geçmesini gerektirir. Bu, bota giden tüm trafiğin ve bottan gelen yanıtların, diğer web uygulamaları gibi kurumsal bir güvenlik duvarı üzerinden yönlendirilmelidir.

Olası kullanım örnekleri

Kuruluşlar, mobil ve masaüstü kullanıcıları için botları kullanabilir. Bazı Örnekler:

  • Basit sorgular. Botlar, kesinleştirmeye yardımcı olmak için bir sorguyla veya ilgili eşleşme grubuyla tam eşleşme sunabilir.
  • Çoklu dönüş etkileşimleri. Botlar, olası sonraki adımları tahmin etmeye yardımcı olarak, kişilerin eksiksiz bir görev akışını gerçekleştirmesini çok daha kolay hale getirir.
  • Kullanıcılara ulaşma. Belgedeki bir şey değiştiğinde veya bir iş öğesi kapatıldığında botlar ileti gönderebilir.

Dikkat edilmesi gereken noktalar

İzleme

İzleme bu örnek senaryoda uygulanmasa da bot uygulama hizmeti, kullanılabilirliğini ve performansını izlemek için Azure İzleyici hizmetlerini kullanabilir.

Ölçeklenebilirlik

Bu senaryoda kullanılan botlar Azure Uygulaması Hizmetinde barındırılır. Sonuç olarak, botunuzu çalıştıran örnek sayısını otomatik olarak ölçeklendirmek için standart App Service otomatik ölçeklendirme özelliklerini kullanabilirsiniz. Bu sayede botunuz talebe ayak uydurabilir. Otomatik ölçeklendirme hakkında daha fazla bilgi için bkz . Otomatik ölçeklendirme en iyi yöntemleri.

Diğer ölçeklenebilirlik konuları için bkz. Azure Mimari Merkezi Performans verimliliği denetim listesi.

DevOps

Sürekli dağıtım işlem hatlarını kullanarak web uygulamalarını, API uygulamalarını ve mobil uygulamaları bir Azure Uygulaması Hizmeti planına dağıtmak yaygın bir uygulamadır. Güvenli bot uygulama hizmeti özel bir uç noktayla korunduğundan, harici olarak barındırılan derleme aracılarının güncelleştirmeleri dağıtmak için gereken erişimi yoktur. Bu sorunu geçici olarak çözmek için Azure Pipeline şirket içinde barındırılan DevOps aracıları gibi bir çözüm kullanmanız gerekebilir.

Güvenlik

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 senaryoyu dağıtın

Önkoşullar

Mevcut bir Azure hesabınız olmalıdır. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

İzlenecek yol

  1. Azure Cloud Shell'de veya tercih ettiğiniz dağıtım kabuğunda aşağıdaki Azure CLI komutlarını çalıştırın.

    Bu komut kümesi, bu kılavuz için gereken kaynak grubunu, sanal ağı ve alt ağları oluşturur. Teams tarafından kullanılan IP aralığı 52.112.0.0/14.52.122.0.0/15'tir.

    # Declare variables (bash syntax)
    export PREFIX='SecureBot'
    export RG_NAME='rg-'${PREFIX}
    export VNET_NAME='vnet-'${PREFIX}
    export SUBNET_INT_NAME='VnetIntegrationSubnet'
    export SUBNET_PVT_NAME='PrivateEndpointSubnet'
    export LOCATION='eastus'
    export TEAMS_IP_RANGE='52.112.0.0/14 52.122.0.0/15'
    export FIREWALL_NAME='afw-'${LOCATION}'-'${PREFIX}
    
    # Create a resource group
    az group create --name ${RG_NAME} --location ${LOCATION}
    
    # Create a virtual network with a subnet for the firewall
    az network vnet create \
    --name ${VNET_NAME} \
    --resource-group ${RG_NAME} \
    --location ${LOCATION} \
    --address-prefix 10.0.0.0/16 \
    --subnet-name AzureFirewallSubnet \
    --subnet-prefix 10.0.1.0/26
    
    # Add a subnet for the Virtual network integration
    az network vnet subnet create \
    --name ${SUBNET_INT_NAME} \
    --resource-group ${RG_NAME} \
    --vnet-name ${VNET_NAME} \
    --address-prefix 10.0.2.0/24
    
    # Add a subnet where the private endpoint will be deployed for the app service
    az network vnet subnet create \
    --name ${SUBNET_PVT_NAME} \
    --resource-group ${RG_NAME} \
    --vnet-name ${VNET_NAME} \
    --address-prefix 10.0.3.0/24
    

    Özel uç nokta alt ağı oluşturduğunuzda, özel uç nokta ilkeleri varsayılan olarak devre dışı bırakılır.

    Dağıtım tamamlandığında, sanal ağınızda aşağıdaki alt ağları görmeniz gerekir:

    vnet-SecureBot

  2. Aşağıdaki CLI komutlarını çalıştırarak 1. adımda oluşturduğunuz güvenlik duvarı alt asına bir Azure Güvenlik Duvarı örneği dağıtın:

    # Create a firewall
    az network firewall create \
        --name ${FIREWALL_NAME} \
        --resource-group ${RG_NAME} \
        --location ${LOCATION}
    
    # Create a public IP for the firewall
    az network public-ip create \
        --name ${FIREWALL_NAME}-pip \
        --resource-group ${RG_NAME} \
        --location ${LOCATION} \
        --allocation-method static \
        --sku standard
    
    # Associate the IP with the firewall
    az network firewall ip-config create \
        --firewall-name ${FIREWALL_NAME} \
        --name ${FIREWALL_NAME}-Config \
        --public-ip-address ${FIREWALL_NAME}-pip \
        --resource-group ${RG_NAME} \
        --vnet-name ${VNET_NAME}
    
    # Update the firewall
    az network firewall update \
        --name ${FIREWALL_NAME} \
        --resource-group ${RG_NAME}
    
    # Get the public IP address for the firewall and take note of it for later use
    az network public-ip show \
        --name ${FIREWALL_NAME}-pip \
        --resource-group ${RG_NAME}
    

    Güvenlik duvarı yapılandırmanız şuna benzer olmalıdır:

    fw-SecureBot güvenlik duvarı yapılandırmasının ekran görüntüsü.

  3. Temel bir bot oluşturun.

  4. Temel botu 1. adımda oluşturduğunuz kaynak grubuna dağıtın.

    Bu işlemin bir parçası olarak, kanallar aracılığıyla botla etkileşim kurmanız gereken bir uygulama kaydı oluşturacaksınız. Bu işlem sırasında gerekli App Service planını, app service'i ve web uygulaması botunu da dağıtacaksınız.

    Not

    Azure Özel Bağlantı destekleyen bir App Service planı seçin.

  5. 3. adımda özel etki alanını kaynak grubuna dağıttığınız app service ile eşleyin.

    Bu adım, etki alanı kayıt şirketinize erişim gerektirir ve 2. adımda oluşturduğunuz güvenlik duvarının genel IP'sine işaret eden özel etki alanına bir A kaydı eklemenizi gerektirir.

  6. Etki alanı için mevcut bir sertifikayı karşıya yükleyerek veya Azure'da app service sertifikası satın alıp içeri aktararak eşlenmiş özel etki alanının güvenliğini sağlayın. Bunu, Azure Uygulaması Hizmeti'nde BIR TLS/SSL bağlaması ile özel bir DNS adının güvenliğini sağlama bölümünde yer alan adımları izleyerek yapabilirsiniz.

    Artık Teams'te bir kanala ekleyebileceğiniz veya Bot Framework SDK belgelerinde bulunan yönergeleri kullanarak Web Sohbeti aracılığıyla test yapabileceğiniz tam işlevsel bir bota sahip olmanız gerekir.

    Not

    Bu noktada botun uygulama hizmetine hem URL üzerinden hem de azurewebsites.net yapılandırdığınız özel URL üzerinden genel erişim sağlanır. Sonraki adımlarda, genel erişimi devre dışı bırakmak için özel uç noktaları kullanacaksınız. Ayrıca, bot hizmetinin yalnızca Teams istemcileri ile iletişim kurmasına izin vermek için güvenlik duvarını yapılandıracaksınız.

  7. Özel uç noktayı dağıtmak ve yapılandırmak için aşağıdaki Azure CLI betiğini çalıştırın. Bu adım, botu sanal ağınızın tümleştirme alt ağına bağlayan uygulama hizmeti için sanal ağ tümleştirmesini de uygular.

    # Disable private endpoint network policies (this step is not required if you're using the Azure portal)
    az network vnet subnet update \
      --name ${SUBNET_PVT_NAME} \
      --resource-group ${RG_NAME} \
      --vnet-name ${VNET_NAME} \
      --disable-private-endpoint-network-policies true
    
    # Create the private endpoint, being sure to copy the correct resource ID from your deployment of the bot app service
    # The ID can be viewed by using the following CLI command:
    # az resource show --name wapp-securebot --resource-group rg-securebot --resource-type Microsoft.web/sites --query "id" 
    az network private-endpoint create \
      --name pvt-${PREFIX}Endpoint \
      --resource-group ${RG_NAME} \
      --location ${LOCATION} \
      --vnet-name ${VNET_NAME} \
      --subnet ${SUBNET_PVT_NAME} \
      --connection-name conn-${PREFIX} \
      --private-connection-resource-id /subscriptions/cad87d9e-c941-4519-a638-c9804a0577b9/resourceGroups/rg-securebot/providers/Microsoft.Web/sites/wapp-securebot \
      --group-id sites
    
    # Create a private DNS zone to resolve the name of the app service
    az network private-dns zone create \
      --name ${PREFIX}privatelink.azurewebsites.net \
      --resource-group ${RG_NAME}
    
    az network private-dns link vnet create \
      --name ${PREFIX}-DNSLink \
      --resource-group ${RG_NAME} \
      --registration-enabled false \
      --virtual-network ${VNET_NAME} \
      --zone-name ${PREFIX}privatelink.azurewebsites.net
    
    az network private-endpoint dns-zone-group create \
      --name chatBotZoneGroup \
      --resource-group ${RG_NAME} \
      --endpoint-name pvt-${PREFIX}Endpoint \
      --private-dns-zone ${PREFIX}privatelink.azurewebsites.net \
      --zone-name ${PREFIX}privatelink.azurewebsites.net
    
    # Establish virtual network integration for outbound traffic
    az webapp vnet-integration add \
      -g ${RG_NAME} \
      -n wapp-${PREFIX} \
      --vnet ${VNET_NAME} \
      --subnet ${SUBNET_INT_NAME}
    

    Bu komutları çalıştırdıktan sonra kaynak grubunuzda aşağıdaki kaynakları görmeniz gerekir:

    Kaynak grubundaki kaynakların listesini gösteren ekran görüntüsü.

    Uygulama hizmetinizin Ağ bölümünün altındaki Sanal Ağ Tümleştirme seçeneği şu şekilde görünmelidir:

    wapp-securebot

  8. Ardından, her alt ağa gelen ve giden trafiğin güvenlik duvarından geçtiğinden emin olmak için bir yönlendirme tablosu oluşturacaksınız. Önceki adımda oluşturduğunuz güvenlik duvarının özel IP adresine ihtiyacınız olacaktır.

    # Create a route table
    az network route-table create \
      -g ${RG_NAME} \
      -n rt-${PREFIX}RouteTable
    
    # Create a default route with 0.0.0.0/0 prefix and the next hop as the Azure firewall virtual appliance to inspect all traffic. Make sure you use your firewall's internal IP address instead of 10.0.1.4
    az network route-table route create -g ${RG_NAME} \
      --route-table-name rt-${PREFIX}RouteTable -n default \
      --next-hop-type VirtualAppliance \
      --address-prefix 0.0.0.0/0 \
      --next-hop-ip-address 10.0.1.4
    
    # Associate the two subnets with the route table
    az network vnet subnet update -g ${RG_NAME} \
      -n ${SUBNET_INT_NAME} --vnet-name ${VNET_NAME} \
      --route-table rt-${PREFIX}RouteTable
    
    az network vnet subnet update -g ${RG_NAME} \
      -n ${SUBNET_PVT_NAME} \
      --vnet-name ${VNET_NAME} \
      --route-table rt-${PREFIX}RouteTable
    

    Komutları çalıştırdıktan sonra yol tablosu kaynağınız şu şekilde görünmelidir:

    rt-SecureBotRouteTable bölmesinin ekran görüntüsü.

    Yönlendirme tablosunu oluşturduktan sonra, genel IP'den bot uygulama hizmetine trafik teslim etmek ve Microsoft Teams dışındaki herhangi bir uç noktadan gelen trafiği kısıtlamak için güvenlik duvarınıza kurallar eklersiniz. Ayrıca, hizmet etiketlerini kullanarak sanal ağ ile Azure Bot Hizmeti veya Microsoft Entra ID arasında trafiğe izin vereceksiniz.

  9. Aşağıdaki komutları çalıştırın:

    # Create a NAT rule collection and a single rule. The source address is the public IP range of Microsoft Teams
    # Destination address is that of the firewall. 
    # The translated address is that of the app service's private link.
    az network firewall nat-rule create \
      --resource-group ${RG_NAME} \
      --collection-name coll-${PREFIX}-nat-rules \
      --priority 200 \
      --action DNAT \
      --source-addresses ${TEAMS_IP_RANGE} \
      --dest-addr 23.100.26.84 \
      --destination-ports 443 \
      --firewall-name ${FIREWALL_NAME} \
      --name rl-ip2appservice \
      --protocols TCP \
      --translated-address 10.0.3.4 \
      --translated-port 443
    
    # Create a network rule collection and add three rules to it. 
    # The first one is an outbound network rule to only allow traffic to the Teams IP range.
    # The source address is that of the virtual network address space, destination is the Teams IP range.
    az network firewall network-rule create \
      --resource-group ${RG_NAME} \
      --collection-name coll-${PREFIX}-network-rules \
      --priority 200 \
      --action Allow \
      --source-addresses 10.0.0.0/16 \
      --dest-addr ${TEAMS_IP_RANGE} \
      --destination-ports 443 \
      --firewall-name ${FIREWALL_NAME} \
      --name rl-OutboundTeamsTraffic \
      --protocols TCP
    
    # This rule will enable traffic to all IP addresses associated with Azure AD service tag
    az network firewall network-rule create \
      --resource-group ${RG_NAME} \
      --collection-name coll-${PREFIX}-network-rules \
      --source-addresses 10.0.0.0/16 \
      --dest-addr AzureActiveDirectory \
      --destination-ports '*' \
      --firewall-name ${FIREWALL_NAME} \
      --name rl-AzureAD \
      --protocols TCP
    
    # This rule will enable traffic to all IP addresses associated with Azure Bot Services service tag
    az network firewall network-rule create \
      --resource-group ${RG_NAME} \
      --collection-name coll-${PREFIX}-network-rules \
      --source-addresses 10.0.0.0/16 \
      --dest-addr AzureBotService \
      --destination-ports '*' \
      --firewall-name ${FIREWALL_NAME} \
      --name rl-AzureBotService \
      --protocols TCP
    

    Komutları çalıştırdıktan sonra güvenlik duvarı kurallarınız şuna benzer olacaktır:

  10. Botunuza yalnızca Teams'deki bir kanaldan erişilebildiğini ve bot uygulama hizmetine gelen tüm trafiğin güvenlik duvarınızdan geçtiğini onaylayın.

Katkıda Bulunanlar

Bu makale Microsoft tarafından yönetilir. Başlangıçta aşağıdaki katkıda bulunanlar tarafından yazılmıştır.

Asıl yazar:

Sonraki adımlar