Este cenário de exemplo ajuda a proteger a conexão com o aplicativo Web de um bot de canal do Microsoft Teams usando o Link Privado do Azure e o Ponto de Extremidade Privado do Azure. Ao mesmo tempo, ele permite que os canais no cliente do Teams se comuniquem com o bot por meio de um IP que é exposto por meio de uma instância do Firewall do Azure.
Arquitetura
Baixe um Arquivo Visio dessa arquitetura.
Fluxo de dados
A Rede Virtual do Azure permite a comunicação entre os recursos do Azure. A rede virtual neste exemplo usa o espaço de endereço 10.0.0.0/16 e contém três sub-redes para uso pelos componentes necessários do cenário:
Sub-rede do Firewall do Azure (10.0.1.0/26).
Sub-rede de integração de rede virtual (10.0.2.0/24), que é usada para rotear o tráfego do ponto de extremidade privado do bot para o firewall.
Sub-rede de ponto de extremidade privado (10.0.3.0/24), que é usada para rotear o tráfego do firewall para o ponto de extremidade privado do bot.
O Firewall do Azure expõe um endereço IP público individual que os clientes podem usar para se comunicar com os serviços de bot subjacentes. Normalmente, um firewall é inserido em sua própria rede virtual, que é um padrão comum para arquiteturas de hub e spoke, mas este exemplo simplificado implanta todos os serviços e recursos em uma única rede virtual. A instância do Firewall do Azure é inserida na própria sub-rede.
A tabela de rotas define as rotas que o tráfego utiliza na rede virtual. Ela garante que o tráfego de entrada e saída do bot passe pelo firewall.
A rota padrão com o prefixo de endereço 0.0.0.0/0 instrui o Azure a rotear o tráfego que não está dentro do prefixo de endereço de nenhuma outra rota para a sub-rede em que a instância do Firewall do Azure está implantada. Neste exemplo, é a rota única.
A Sub-rede de Integração de Rede Virtual e a Sub-rede de Ponto de Extremidade Privado estão associadas à tabela de rotas, garantindo que qualquer tráfego que passe por elas seja roteado pelo firewall.
O Serviço de Bot consiste no plano de serviço de aplicativo de bot, no serviço de aplicativo e no registro de canais de bot.
- O serviço de aplicativo tem um domínio personalizado registrado que aponta para o endereço IP do firewall. Dessa forma, o serviço de aplicativo só pode ser acessado por meio do firewall.
O serviço Link Privado do Azure para acesso de entrada ao serviço de aplicativo de bot em um ponto de extremidade privado do Azure.
A integração de rede virtual conecta o serviço de aplicativo à rede virtual, garantindo que o tráfego de saída do serviço de aplicativo de bot passe pelo firewall.
Componentes
- Rede Virtual
- Firewall do Azure
- Serviços de Bot do Azure
- Serviço de Aplicativo do Azure
- Link Privado do Azure
Alternativas
- Um Ambiente do Serviço de Aplicativo pode fornecer um ambiente totalmente isolado e dedicado para a execução segura de aplicativos do Serviço de Aplicativo em alta escala. Este exemplo não usa um Ambiente do Serviço de Aplicativo para reduzir custos, mas a arquitetura de exemplo poderia suportá-lo com modificações.
Detalhes do cenário
Os Bots permitem que os usuários do Teams interajam com serviços Web por meio de texto, cartões interativos e módulos de tarefa. O Microsoft Bot Framework e os Serviços de Bot do Azure oferecem um conjunto de ferramentas fácil de usar para criar e gerenciar esses bots.
Você pode desenvolver bots usando uma variedade de linguagens, como C#, JavaScript e Python. Depois de serem desenvolvidos, você pode implantá-los no Azure. Um componente-chave de um bot é o aplicativo Web, que contém a lógica e a interface principais com as quais os usuários se comunicam. Um dos principais requisitos para o bot funcionar é que ele deve expor um ponto de extremidade HTTPS publicamente acessível.
A política InfoSec normalmente requer que todo o tráfego de entrada para aplicativos Web passe por um firewall corporativo. Isso significa que todo o tráfego que vai para um bot e as respostas do bot devem passar por um firewall corporativo, como acontece com qualquer outro aplicativo Web.
Possíveis casos de uso
As organizações podem utilizar bots para usuários móveis e de desktop. Alguns exemplos incluem:
- Consultas simples. Os bots podem fornecer uma correspondência exata para uma consulta ou um grupo de correspondências relacionadas para ajudar na desambiguação.
- Interações com várias rodadas. Ao ajudar a prever as possíveis próximas etapas, os bots facilitam muito a conclusão do fluxo de tarefas pelas pessoas.
- Entrando em contato com os usuários. Os bots podem enviar uma mensagem quando algo for alterado em um documento ou quando um item de trabalho for fechado.
Considerações
Monitoramento
Embora o monitoramento não seja implementado neste cenário de exemplo, o serviço de aplicativo de um bot pode utilizar os serviços do Azure Monitor para monitorar sua disponibilidade e desempenho.
Escalabilidade
Os bots usados neste cenário são hospedados no Serviço de Aplicativo do Azure. Como resultado, você pode usar os recursos padrão de dimensionamento automático do Serviço de Aplicativo para dimensionar automaticamente o número de instâncias que executam o bot, o que permite que ele acompanhe a demanda. Para obter mais informações sobre dimensionamento automático, confira Melhores práticas de dimensionamento automático.
Para outros tópicos de escalabilidade, confira a Lista de verificação de eficiência de desempenho do Centro de Arquitetura do Azure.
DevOps
É uma prática comum implantar aplicativos Web, aplicativos de API e aplicativos móveis em um plano do Serviço de Aplicativo do Azure usando pipelines de implantação contínua. Como o serviço de aplicativo de um bot seguro é protegido por um ponto de extremidade privado, os agentes de build hospedados externamente não têm o acesso necessário para implantar atualizações. Para contornar isso, talvez seja necessário usar uma solução como os agentes DevOps auto-hospedados do Pipeline do Azure.
Segurança
A Proteção contra DDoS do Azure, combinada com as práticas recomendadas de design de aplicativos, fornece recursos aprimorados de mitigação de DDoS para fornecer mais defesa contra ataques de DDoS. Você deve habilitar a Proteção contra DDOS do Azure em qualquer rede virtual do perímetro.
Implantar este cenário
Pré-requisitos
Você deve ter uma conta do Azure já criada. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Passo a passo
Execute os comandos de CLI do Azure a seguir no Azure Cloud Shell ou no shell de implantação de sua preferência.
Esse conjunto de comandos cria o grupo de recursos, a rede virtual e as sub-redes necessárias para este passo a passo. O intervalo de IP usado pelo Teams é 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
Ao criar uma sub-rede de ponto de extremidade privado, as políticas de ponto de extremidade privado são desabilitadas por padrão.
Quando a implantação for concluída, você verá as seguintes sub-redes em sua rede virtual:
Implante uma instância do Firewall do Azure na sub-rede do firewall criada na etapa 1, executando os seguintes comandos da CLI:
# 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 configuração do firewall deve ser semelhante a esta:
Implante o bot básico no grupo de recursos criado na etapa 1.
Como parte desse processo, você criará um registro de aplicativo, que será necessário para interagir com o bot por meio de canais. Durante esse processo, você também implantará o plano do Serviço de Aplicativo, o serviço de aplicativo e o bot de aplicativo web necessários.
Observação
Selecione um plano do Serviço de Aplicativo que ofereça suporte ao Link Privado do Azure.
Mapeie um domínio personalizado para o serviço de aplicativo implantado no grupo de recursos na etapa 3.
Essa etapa requer acesso ao seu registrador de domínios e exige que você adicione um registro A ao domínio personalizado que aponta para o IP público do firewall criado na etapa 2.
Proteja o domínio personalizado mapeado fazendo o upload de um certificado existente para o domínio ou adquirindo um Certificado do Serviço de Aplicativo no Azure e importando-o. Você pode fazer isso seguindo as etapas em Proteger um nome DNS personalizado com uma associação TLS/SSL no Serviço de Aplicativo do Azure.
Agora você deve ter um bot totalmente funcional que pode ser adicionado a um canal no Teams ou testado por meio do Webchat usando as instruções encontradas na documentação do SDK do Bot Framework.
Observação
Nesse ponto, o serviço de aplicativo do bot ainda está acessível publicamente tanto pela URL
azurewebsites.net
quanto pela URL personalizada que você configurou. Nas próximas etapas, você usará pontos de extremidade privados para desabilitar o acesso público. Você também configurará o firewall para permitir que o serviço de bot se comunique apenas com os clientes do Teams.Execute o script da CLI do Azure a seguir para implantar e configurar o ponto de extremidade privado. Essa etapa também implementa a integração de rede virtual para o serviço de aplicativo do bot, que o conecta à sub-rede de integração da rede virtual.
# 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}
Depois de executar esses comandos, você deverá ver os seguintes recursos em seu grupo de recursos:
A opção Integração da VNet na seção Rede do seu serviço de aplicativo deve ter a seguinte aparência:
Em seguida, crie uma tabela de rotas para garantir que o tráfego de e para cada sub-rede passe pelo firewall. Você precisará do endereço IP privado do firewall criado na etapa anterior.
# 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
Depois de executar os comandos, o recurso da tabela de rotas deverá ter a seguinte aparência:
Depois de criar a tabela de rotas, adicione regras ao firewall para entregar o tráfego do IP público ao serviço do aplicativo de bot e para restringir o tráfego de qualquer ponto de extremidade que não seja o Microsoft Teams. Além disso, você permitirá o tráfego entre a rede virtual e os Serviços de Bot do Azure ou o Microsoft Entra ID usando marcas de serviço.
Execute os seguintes comandos:
# 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
Depois de executar os comandos, as regras de firewall terão a seguinte aparência:
Confirme se o bot está acessível somente a partir de um canal no Teams e se todo o tráfego de e para o serviço do aplicativo de bot passa pelo firewall.
Colaboradores
Esse artigo é mantido pela Microsoft. Ele foi originalmente escrito pelos colaboradores a seguir.
Autor principal:
- Ali Jafry | Arquiteto de Soluções na Nuvem
Próximas etapas
Examine a Documentação do SDK do Bot Framework para começar a criar bots.
Recursos relacionados
Visite o Centro de Arquitetura do Azure para examinar arquiteturas e guias relacionados.
Guia de Arquitetura do Firewall do Azure – Centro de Arquitetura do Azure
Microsoft Entra IDaaS em operações de segurança – cenários de exemplo do Azure