Szerkesztés

Megosztás a következőn keresztül:


A Microsoft Teams csatornarobotjának és webalkalmazásának védelme tűzfal mögött

Azure App Service
Azure Web Application Firewall

Ez a példaforgatókönyv az Azure Private Link és az Azure Private Endpoint használatával segíti a Microsoft Teams-csatornarobot webalkalmazásával való kapcsolat védelmét. Ugyanakkor lehetővé teszi, hogy a Teams-ügyfél csatornái egy Azure Firewall-példányon keresztül közzétett IP-címen keresztül kommunikáljanak a robottal.

Architektúra

A Teams–Azure tűzfal folyamatábra ábrája.

Töltse le az architektúra Visio-fájlját.

Adatfolyam

  • Az Azure Virtual Network lehetővé teszi az Azure-erőforrások közötti kommunikációt. A jelen példában szereplő virtuális hálózat a 10.0.0.0/16 címterét használja, és három alhálózatot tartalmaz, amelyeket a forgatókönyv szükséges összetevői használhatnak:

    • Azure Firewall alhálózat (10.0.1.0/26).

    • Virtuális hálózati integrációs alhálózat (10.0.2.0/24), amely a robot privát végpontjáról a tűzfalra irányítja a forgalmat.

    • Privát végpont alhálózata (10.0.3.0/24), amely a tűzfalról a robot privát végpontjára irányítja a forgalmat.

  • Az Azure Firewall egyetlen nyilvános IP-címet tesz elérhetővé, amellyel az ügyfelek kommunikálhatnak a mögöttes robotszolgáltatásokkal. A tűzfal általában a saját virtuális hálózatába kerül, amely a küllős architektúrák gyakori mintája, de ez az egyszerűsített példa minden szolgáltatást és erőforrást egyetlen virtuális hálózatba helyez üzembe. Az Azure Firewall-példány a saját alhálózatába kerül.

  • Az útvonaltábla határozza meg a virtuális hálózaton belüli forgalom által használt útvonalakat. Biztosítja, hogy a robot felé érkező és onnan érkező forgalom áthaladjon a tűzfalon.

    • A 0.0.0.0/0 címelőtaggal rendelkező alapértelmezett útvonal arra utasítja az Azure-t, hogy a többi útvonal címelőtagjában nem szereplő forgalmat az Azure Firewall-példányt üzembe helyező alhálózatra irányítsa. Ebben a példában ez az egyetlen útvonal.

    • A virtuális hálózat integrációs alhálózata és a privát végpont alhálózata az útvonaltáblához van társítva, biztosítva, hogy a rajtuk áthaladó forgalom a tűzfalon keresztül legyen irányítva.

  • A Bot Service a robotalkalmazás-szolgáltatási csomagból, az App Service-ből és a robotcsatornák regisztrációból áll.

    • Az app service rendelkezik egy regisztrált egyéni tartománnyal, amely a tűzfal IP-címére mutat. Így az app service csak a tűzfalon keresztül érhető el.
  • Azure Private Link szolgáltatás a robotalkalmazás-szolgáltatáshoz való bejövő hozzáféréshez egy Azure-beli privát végponton keresztül.

  • A virtuális hálózati integráció összekapcsolja az App Service-t a virtuális hálózattal, biztosítva, hogy a robotalkalmazás-szolgáltatásból érkező kimenő forgalom áthaladjon a tűzfalon.

Összetevők

Alternatívák

  • Az App Service-környezetek teljesen elkülönített és dedikált környezetet biztosíthatnak az App Service-alkalmazások nagy léptékű biztonságos futtatásához. Ez a példa nem használja az App Service-környezetet a költségek csökkentésére, de a mintaarchitektúra módosításokkal támogathatja azt.

Forgatókönyv részletei

A robotok lehetővé teszik a Teams-felhasználók számára, hogy szöveges, interaktív kártyákon és feladatmodulokon keresztül kommunikáljanak a webszolgáltatásokkal. A Microsoft Bot Framework és az Azure Bot Services segítségével egyszerűen használható eszközökkel hozhatja létre és kezelheti ezeket a robotokat.

A robotokat számos nyelv, például C#, JavaScript és Python használatával fejlesztheti. A fejlesztés után üzembe helyezheti őket az Azure-ban. A robot fő összetevője a webalkalmazás, amely tartalmazza a felhasználók által kommunikáló alapvető logikát és felületet. A robot működésének egyik legfontosabb követelménye, hogy közzé kell tennie egy nyilvánosan elérhető HTTPS-végpontot.

Az InfoSec-szabályzat általában megköveteli, hogy a webalkalmazások felé irányuló összes bejövő forgalom egy vállalati tűzfalon haladjon keresztül. Ez azt jelenti, hogy a robothoz érkező összes forgalomnak és a robottól érkező válaszoknak egy vállalati tűzfalon kell áthaladnia, mint bármely más webalkalmazás esetén.

Lehetséges használati esetek

A szervezetek robotokat használhatnak mobil- és asztali felhasználók számára. Néhány példa:

  • Egyszerű lekérdezések. A robotok pontos egyezést biztosíthatnak egy lekérdezéshez vagy egy kapcsolódó egyezéscsoporthoz, hogy segítsenek a egyértelműségben.
  • Többfordulós interakciók. A lehetséges következő lépések előrejelzésével a robotok sokkal egyszerűbbé teszik az emberek számára a teljes feladatfolyamatot.
  • A felhasználók elérése. A robotok üzenetet küldhetnek, ha valami megváltozott egy dokumentumban, vagy egy munkaelem bezárult.

Megfontolások

Figyelés

Bár a monitorozás ebben a példaforgatókönyvben nincs implementálva, a robot appszolgáltatása az Azure Monitor-szolgáltatásokat használhatja annak rendelkezésre állásának és teljesítményének monitorozására.

Méretezhetőség

Az ebben a forgatókönyvben használt robotok a Azure-alkalmazás Szolgáltatásban találhatók. Ennek eredményeképpen a szabványos App Service automatikus méretezési funkciókkal automatikusan skálázhatja a robotot futtató példányok számát, ami lehetővé teszi, hogy a robot lépést tartson az igényekkel. Az automatikus skálázással kapcsolatos további információkért tekintse meg az automatikus skálázás ajánlott eljárásait.

További skálázhatósági témakörökért tekintse meg az Azure Architecture Center teljesítményhatékonysági ellenőrzőlistát.

DevOps

Gyakori gyakorlat, hogy webalkalmazásokat, API-alkalmazásokat és mobilalkalmazásokat helyez üzembe egy Azure-alkalmazás Service-csomagban folyamatos üzembe helyezési folyamatokkal. Mivel a védett robot appszolgáltatása privát végponttal van védve, a külsőleg üzemeltetett buildügynökök nem rendelkeznek a frissítések telepítéséhez szükséges hozzáféréssel. Ennek megkerüléséhez szükség lehet egy olyan megoldásra, mint az Azure Pipeline saját üzemeltetésű DevOps-ügynökei.

Biztonság

Az Azure DDoS Protection alkalmazástervezési ajánlott eljárásokkal kombinálva továbbfejlesztett DDoS-kockázatcsökkentési funkciókat biztosít, hogy nagyobb védelmet nyújtson a DDoS-támadásokkal szemben. Az Azure DDOS Protectiont minden peremhálózaton engedélyeznie kell.

A forgatókönyv üzembe helyezése

Előfeltételek

Rendelkeznie kell egy meglévő Azure-fiókkal. Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

Útmutatás

  1. Futtassa az alábbi Azure CLI-parancsokat az Azure Cloud Shellben vagy az előnyben részesített üzembehelyezési rendszerhéjban.

    Ez a parancskészlet létrehozza az útmutatóhoz szükséges erőforráscsoportot, virtuális hálózatot és alhálózatokat. A Teams által használt IP-címtartomány: 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
    

    Privát végpont alhálózat létrehozásakor a privát végpont házirendjei alapértelmezés szerint le lesznek tiltva.

    Ha az üzembe helyezés befejeződött, a következő alhálózatokat kell látnia a virtuális hálózaton belül:

    Képernyőkép a vnet-SecureBot

  2. Helyezzen üzembe egy Azure Firewall-példányt az 1. lépésben létrehozott tűzfalalhálózaton a következő PARANCSSOR-parancsok futtatásával:

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

    A tűzfal konfigurációjának így kell kinéznie:

    Képernyőkép az fw-SecureBot tűzfal konfigurációjáról.

  3. Hozzon létre egy alapszintű robotot.

  4. Helyezze üzembe az alaprobotot az 1. lépésben létrehozott erőforráscsoportban.

    Ennek a folyamatnak a részeként létre fog hozni egy alkalmazásregisztrációt, amelyet csatornákon keresztül kell kezelnie a robottal. A folyamat során üzembe helyezi a szükséges App Service-csomagot, app service-t és webalkalmazás-robotot is.

    Feljegyzés

    Válasszon ki egy Azure Private Linket támogató App Service-csomagot.

  5. Rendeljen le egy egyéni tartományt a 3. lépésben az erőforráscsoportban üzembe helyezett app service-hez.

    Ehhez a lépéshez hozzá kell férnie a tartományregisztrálójához, és ehhez hozzá kell adnia egy A-rekordot az egyéni tartományhoz, amely a 2. lépésben létrehozott tűzfal nyilvános IP-címére mutat.

  6. A leképezett egyéni tartomány biztonságossá tételéhez töltsön fel egy meglévő tanúsítványt a tartományhoz, vagy vásároljon egy App Service-tanúsítványt az Azure-ban, és importálja azt. Ehhez kövesse az egyéni DNS-nevek biztonságossá tételét TLS-/SSL-kötéssel a Azure-alkalmazás Szolgáltatásban.

    Most már rendelkeznie kell egy teljesen működőképes robottal, amelyet hozzáadhat egy csatornához a Teamsben, vagy tesztelhet webchat a Bot Framework SDK dokumentációjában található útmutatások segítségével.

    Feljegyzés

    Ezen a ponton a robot appszolgáltatása továbbra is nyilvánosan elérhető mind az azurewebsites.net URL-címen, mind a konfigurált egyéni URL-címen keresztül. A következő lépésekben privát végpontokkal tiltja le a nyilvános hozzáférést. A tűzfalat úgy is konfigurálja, hogy a robotszolgáltatás csak a Teams-ügyfelekkel kommunikáljon.

  7. Futtassa a következő Azure CLI-szkriptet a privát végpont üzembe helyezéséhez és konfigurálásához. Ez a lépés a robot appszolgáltatásának virtuális hálózati integrációját is implementálja, amely a virtuális hálózat integrációs alhálózatához csatlakozik.

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

    A parancsok futtatása után az alábbi erőforrásoknak kell megjelenniük az erőforráscsoportban:

    Képernyőkép egy erőforráscsoport erőforrásainak listájáról.

    Az app service Hálózatkezelés szakaszában a VNet-integráció lehetőségnek a következőképpen kell kinéznie:

    Képernyőkép a wapp-securebot

    Képernyőkép a

    Képernyőkép a

  8. Ezután létrehoz egy útvonaltáblát, amely biztosítja, hogy az egyes alhálózatok felé és onnan érkező forgalom áthaladjon a tűzfalon. Szüksége lesz az előző lépésben létrehozott tűzfal privát IP-címére.

    # 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
    

    A parancsok futtatása után az útvonaltábla-erőforrásnak így kell kinéznie:

    Képernyőkép az rt-SecureBotRouteTable panelről.

    Miután létrehozta az útvonaltáblát, szabályokat kell hozzáadnia a tűzfalhoz a nyilvános IP-címről a robotalkalmazás szolgáltatásba irányuló forgalom továbbításához, valamint a Microsoft Teamsen kívüli végpontok forgalmának korlátozásához. Emellett szolgáltatáscímkék használatával engedélyezheti a virtuális hálózat és az Azure Bot Services vagy a Microsoft Entra ID közötti forgalmat.

  9. Futtassa az alábbi parancsot:

    # 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
    

    A parancsok futtatása után a tűzfalszabályok a következőképpen fognak kinézni:

    Képernyőkép a

    Képernyőkép a

  10. Győződjön meg arról, hogy a robot csak a Teams egyik csatornájáról érhető el, és hogy a robotalkalmazás szolgáltatásba érkező és onnan érkező összes forgalom a tűzfalon keresztül halad át.

Közreműködők

Ezt a cikket a Microsoft tartja karban. Eredetileg a következő közreműködők írták.

Fő szerző:

Következő lépések