Pomoc se zabezpečením robota kanálu Microsoft Teams a webové aplikace za bránou firewall

Azure App Service
Azure Web Application Firewall

Tento ukázkový scénář pomáhá zabezpečit připojení k webové aplikaci robota kanálu Microsoft Teams pomocí služby Azure Private Link a privátního koncového bodu Azure. Zároveň umožňuje kanálům v klientovi Teams komunikovat s robotem prostřednictvím IP adresy, která je vystavená prostřednictvím instance služby Azure Firewall.

Architektura

Diagram znázorňující vývojový diagram Teams-to-Azure Firewall

Stáhněte si soubor aplikace Visio s touto architekturou.

Tok dat

  • Azure Virtual Network umožňuje komunikaci mezi prostředky Azure. Virtuální síť v tomto příkladu používá adresní prostor 10.0.0.0/16 a obsahuje tři podsítě pro použití požadovanými komponentami scénáře:

    • Podsíť služby Azure Firewall (10.0.1.0/26).

    • Podsíť integrace virtuální sítě (10.0.2.0/24), která slouží ke směrování provozu z privátního koncového bodu robota do brány firewall.

    • Podsíť privátního koncového bodu (10.0.3.0/24), která slouží ke směrování provozu z brány firewall do privátního koncového bodu robota.

  • Azure Firewall zveřejňuje jednu veřejnou IP adresu, kterou můžou klienti používat ke komunikaci se základními službami robotů. Brána firewall je obvykle umístěná ve vlastní virtuální síti, což je běžný vzor pro hvězdicovou architekturu, ale tento zjednodušený příklad nasadí všechny služby a prostředky do jedné virtuální sítě. Instance služby Azure Firewall je umístěná ve vlastní podsíti.

  • Směrovací tabulka definuje trasy, které provoz přebírá v rámci virtuální sítě. Zajišťuje, že provoz přicházející do a z robota prochází bránou firewall.

    • Výchozí trasa s předponou adresy 0.0.0.0/0 dává Azure pokyn ke směrování provozu, který není v předponě adresy žádné jiné trasy do podsítě, ve které je nasazená instance služby Azure Firewall. V tomto příkladu je to jediná trasa.

    • Podsíť integrace virtuální sítě a podsíť privátního koncového bodu jsou přidružené ke směrovací tabulce, aby se veškerý provoz procházející přes ně směroval přes bránu firewall.

  • Služba Bot Service se skládá z plánu služby Bot App Service, služby App Service a registrace kanálů robotů.

    • App Service má zaregistrovanou vlastní doménu, která odkazuje na IP adresu brány firewall. Tímto způsobem je služba App Service přístupná pouze přes bránu firewall.
  • Služba Azure Private Link pro příchozí přístup ke službě App Service robota přes privátní koncový bod Azure.

  • Integrace virtuální sítě propojuje službu App Service s virtuální sítí a zajišťuje, aby odchozí provoz ze služby Bot App Service procházel bránou firewall.

Komponenty

Alternativy

  • App Service Environment může poskytovat plně izolované a vyhrazené prostředí pro bezpečné spouštění aplikací App Service ve velkém měřítku. Tento příklad nevyužívá službu App Service Environment ke snížení nákladů, ale ukázková architektura ji může podporovat s úpravami.

Podrobnosti scénáře

Roboti umožňují uživatelům Teams pracovat s webovými službami prostřednictvím textových, interaktivních karet a modulů úkolů. Microsoft Bot Framework a Azure Bot Services poskytují snadno použitelnou sadu nástrojů pro vytváření a správu těchto robotů.

Roboty můžete vyvíjet pomocí různých jazyků, jako jsou C#, JavaScript a Python. Po jejich vývoji je můžete nasadit do Azure. Klíčovou součástí robota je webová aplikace, která obsahuje základní logiku a rozhraní, se kterým uživatelé komunikují. Jedním z klíčových požadavků robota, aby fungoval, je, že musí zveřejnit veřejně přístupný koncový bod HTTPS.

Zásady InfoSec obvykle vyžadují, aby veškerý příchozí provoz do webových aplikací procházel přes podnikovou bránu firewall. To znamená, že veškerý provoz, který směřuje do robota a odpovědi z robota, musí směrovat přes podnikovou bránu firewall, stejně jako u jakékoli jiné webové aplikace.

Potenciální případy použití

Organizace můžou roboty využívat pro mobilní a desktopové uživatele. Mezi některé příklady patří:

  • Jednoduché dotazy. Roboti můžou poskytovat přesnou shodu dotazu nebo skupině souvisejících shod, aby pomohli s nejednoznačností.
  • Interakce s vícenásobným otáčením Díky tomu, že pomáhá předvídat možné další kroky, roboti usnadňují uživatelům kompletní tok úkolů.
  • Oslovení uživatelů Roboti můžou odeslat zprávu, když se něco v dokumentu změnilo nebo je pracovní položka zavřená.

Důležité informace

Sledování

I když se monitorování v tomto ukázkovém scénáři neimplementuje, služba App Service robota může ke sledování dostupnosti a výkonu využít služby Azure Monitor .

Škálovatelnost

Roboti, kteří se v tomto scénáři používají, jsou hostovaní ve službě Aplikace Azure Service. V důsledku toho můžete pomocí standardních funkcí automatického škálování služby App Service automaticky škálovat počet instancí spuštěných robotem, což robotovi umožní držet krok s poptávkou. Další informace o automatickém škálování najdete v tématu Osvědčené postupy automatického škálování.

Další témata týkající se škálovatelnosti najdete v kontrolním seznamu efektivity centra architektury Azure.

DevOps

Běžným postupem je nasazení webových aplikací, aplikací API a mobilních aplikací do plánu služby Aplikace Azure Service pomocí kanálů průběžného nasazování. Vzhledem k tomu, že zabezpečená služba App Service robota je chráněná privátním koncovým bodem, nemají externě hostovaní agenti sestavení přístup, který je nutný k nasazení aktualizací. Abyste to mohli obejít, možná budete muset použít řešení, jako jsou agenti DevOps v místním prostředí Azure Pipeline.

Zabezpečení

Azure DDoS Protection v kombinaci s osvědčenými postupy návrhu aplikací poskytuje vylepšené funkce pro zmírnění rizik DDoS, které poskytují větší ochranu před útoky DDoS. Službu Azure DDOS Protection byste měli povolit v jakékoli hraniční virtuální síti.

Nasazení tohoto scénáře

Požadavky

Musíte mít existující účet Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Názorný postup

  1. Ve službě Azure Cloud Shell nebo v upřednostňovaném prostředí nasazení spusťte následující příkazy Azure CLI.

    Tato sada příkazů vytvoří potřebnou skupinu prostředků, virtuální síť a podsítě vyžadované pro tento názorný postup. Rozsah IP adres používaný teams je 52.112.0.0/14,52.122.0.0/15.

    # 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
    

    Při vytváření podsítě privátního koncového bodu jsou zásady privátního koncového bodu ve výchozím nastavení zakázané.

    Po dokončení nasazení by se ve vaší virtuální síti měly zobrazit následující podsítě:

    Snímek obrazovky s podoknem podsítí vnet-SecureBot

  2. Spuštěním následujících příkazů rozhraní příkazového řádku nasaďte instanci služby Azure Firewall do podsítě brány firewall, kterou jste vytvořili v kroku 1:

    # 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}
    

    Konfigurace brány firewall by měla vypadat přibližně takto:

    Snímek obrazovky s konfigurací brány firewall fw-SecureBot

  3. Vytvořte základního robota.

  4. Nasaďte základního robota do skupiny prostředků, kterou jste vytvořili v kroku 1.

    V rámci tohoto procesu vytvoříte registraci aplikace, kterou potřebujete k interakci s robotem prostřednictvím kanálů. Během tohoto procesu nasadíte také potřebný plán služby App Service, službu App Service a robota webové aplikace.

    Poznámka:

    Vyberte plán služby App Service, který podporuje Azure Private Link.

  5. Namapujte vlastní doménu na službu App Service, kterou jste nasadili do skupiny prostředků v kroku 3.

    Tento krok vyžaduje přístup k doménovému registrátorovi a vyžaduje, abyste do vlastní domény přidali záznam A, který odkazuje na veřejnou IP adresu brány firewall, kterou jste vytvořili v kroku 2.

  6. Zabezpečte namapovanou vlastní doménu tak, že buď nahrajete existující certifikát pro doménu, nebo si v Azure koupíte certifikát služby App Service a importujete ji. Můžete to provést pomocí kroků v části Zabezpečení vlastního názvu DNS pomocí vazby TLS/SSL ve službě Aplikace Azure Service.

    Teď byste měli mít plně funkčního robota, kterého můžete přidat do kanálu v Teams nebo testovat prostřednictvím Webový chat pomocí pokynů v dokumentaci k sadě SDK služby Bot Framework.

    Poznámka:

    V tuto chvíli je služba App Service robota stále veřejně přístupná přes azurewebsites.net adresu URL i přes vlastní adresu URL, kterou jste nakonfigurovali. V dalších krocích použijete privátní koncové body k zakázání veřejného přístupu. Nakonfigurujete také bránu firewall tak, aby služba bot service mohla komunikovat pouze s klienty Teams.

  7. Spuštěním následujícího skriptu Azure CLI nasaďte a nakonfigurujte privátní koncový bod. Tento krok také implementuje integraci virtuální sítě pro službu App Service robota, která ji připojí k podsíti integrace vaší virtuální sítě.

    # 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}
    

    Po spuštění těchto příkazů by se ve skupině prostředků měly zobrazit následující prostředky:

    Snímek obrazovky zobrazující seznam prostředků ve skupině prostředků

    Možnost Integrace virtuální sítě v části Sítě vaší služby App Service by měla vypadat takto:

    Snímek obrazovky s možnostmi wapp-securebot

    Snímek obrazovky s možností Integrace virtuální sítě

    Snímek obrazovky s podoknem Připojení privátního koncového bodu

  8. Dále vytvoříte směrovací tabulku, která zajistí, že provoz do a z každé podsítě prochází bránou firewall. Budete potřebovat privátní IP adresu brány firewall, kterou jste vytvořili v předchozím kroku.

    # 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
    

    Po spuštění příkazů by prostředek směrovací tabulky měl vypadat takto:

    Snímek obrazovky s podoknem Rt-SecureBotRouteTable

    Po vytvoření směrovací tabulky přidáte do brány firewall pravidla pro doručování provozu z veřejné IP adresy do služby Bot App Service a omezení provozu z jakéhokoli jiného koncového bodu než Microsoft Teams. Kromě toho povolíte provoz mezi virtuální sítí a Azure Bot Services nebo ID Microsoft Entra pomocí značek služeb.

  9. Spusťte následující příkazy:

    # 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
    

    Po spuštění příkazů budou pravidla brány firewall vypadat přibližně takto:

    Snímek obrazovky s podoknem Upravit kolekci pravidel NAT

    Snímek obrazovky s podoknem Upravit kolekci pravidel sítě

  10. Ověřte, že je robot přístupný jenom z kanálu v Teams a že veškerý provoz do a ze služby App Service robota prochází bránou firewall.

Přispěvatelé

Tento článek spravuje Microsoft. Původně byla napsána následujícími přispěvateli.

Hlavní autor:

  • Ali Jafry | Architekt cloudového řešení

Další kroky