Como usar o Serviço Azure SignalR com o Azure Application Gateway
O Application Gateway é um balanceador de carga de tráfego da Web que permite gerenciar o tráfego para seus aplicativos Web. O uso do Application Gateway com o Serviço SignalR permite que você faça o seguinte:
- Proteja as suas aplicações de vulnerabilidades comuns da Web.
- Obtenha balanceamento de carga no nível do aplicativo para seus aplicativos escaláveis e altamente disponíveis.
- Configure a segurança de ponta a ponta.
- Personalize o nome de domínio.
Este artigo contém duas partes,
- A primeira parte mostra como configurar o Application Gateway para que os clientes possam acessar o SignalR por meio do Application Gateway.
- A segunda parte mostra como proteger o Serviço SignalR adicionando controle de acesso ao Serviço SignalR e permitir apenas o tráfego do Application Gateway.
As cadeias de conexão brutas aparecem neste artigo apenas para fins de demonstração. Em ambientes de produção, proteja sempre as suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança e proteger sua cadeia de conexão usando a ID do Microsoft Entra e autorizar o acesso com a ID do Microsoft Entra.
Definir e configurar o Gateway de Aplicação
Criar uma instância do Serviço SignalR
- Siga o artigo e crie uma instância do Serviço SignalR ASRS1
Criar uma instância do Application Gateway
Crie a partir do portal uma instância AG1 do Application Gateway:
No portal do Azure, procure Gateway de Aplicativo e Criar.
Na guia Noções básicas, use esses valores para as seguintes configurações de gateway de aplicativo:
Grupo de Assinatura e Recursos e Região: o mesmo que você escolhe para o Serviço SignalR
Nome do gateway do aplicativo: AG1
Rede virtual, selecione Criar novo e, na janela Criar rede virtual que se abre, insira os seguintes valores para criar a rede virtual e duas sub-redes, uma para o gateway de aplicativo e outra para os servidores back-end.
Nome: Digite VN1 para o nome da rede virtual.
Sub-redes: Atualize a grade Sub-redes com menos de 2 sub-redes
Nome da sub-rede Intervalo de endereços Nota myAGSubnet (intervalo de endereços) Sub-rede para o gateway de aplicativo. A sub-rede do gateway de aplicativo pode conter apenas gateways de aplicativo. Não são permitidos outros recursos. myBackendSubnet (outro intervalo de endereços) Sub-rede para a instância do Azure SignalR.
Aceite os valores padrão para as outras configurações e selecione Next: Frontends
Na guia Frontends:
- Tipo de endereço IP frontend: Público.
- Selecione Adicionar novo para o endereço IP público e digite myAGPublicIPAddress para o nome do endereço IP público e, em seguida, selecione OK.
- Selecione Next: Backends
Na guia Back-ends, selecione Adicionar um pool de back-ends:
- Nome: insira signalr para o pool de back-end de recursos do Serviço SignalR.
- Destinos de back-end Destino: o nome do host da instância do Serviço SignalR ASRS1, por exemplo
asrs1.service.signalr.net
- Selecione Next: Configuração
Na guia Configuração, selecione Adicionar uma regra de roteamento na coluna Regras de roteamento:
Nome da regra: myRoutingRule
Prioridade: 1
Na guia Ouvinte na janela Adicionar uma regra de roteamento, insira os seguintes valores para o ouvinte:
- Nome do ouvinte: digite myListener para o nome do ouvinte.
- IP Frontend: Selecione Público para escolher o IP público que você criou para o frontend.
- Protocolo: HTTP
- Usamos o protocolo frontend HTTP no Application Gateway neste artigo para simplificar a demonstração e ajudá-lo a começar mais facilmente. Mas, na realidade, você pode precisar habilitar HTTPs e Customer Domain nele com cenário de produção.
- Aceite os valores padrão para as outras configurações na guia Ouvinte
Na guia Destinos de back-end , use os seguintes valores:
Tipo de destino: Pool de back-end
Alvo de back-end: selecione o sinalizador que criamos anteriormente
Configurações de back-end: selecione Adicionar novo para adicionar uma nova configuração.
- Nome das configurações de back-end: mySetting
- Protocolo de back-end: HTTPS
- Usar certificado de autoridade de certificação bem conhecido: Sim
- Substituir por novo nome de host: Sim
- Substituição do nome do host: escolha o nome do host do destino de back-end
- Outros mantêm os valores padrão
Rever e criar o AG1
Configurar a sonda de integridade do Application Gateway
Quando o AG1 for criado, vá para a guia Sondas de integridade na seção Configurações no portal, altere o caminho da sonda de integridade para /api/health
Teste rápido
Tente com uma solicitação
https://asrs1.service.signalr.net/client
de cliente inválida e retorna 400 com mensagem de erro 'hub' parâmetro de consulta é necessário. Isso significa que a solicitação chegou ao Serviço SignalR e fez a validação da solicitação.curl -v https://asrs1.service.signalr.net/client
devoluções
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.
Vá para a guia Visão geral do AG1 e descubra o endereço IP público do Frontend
Visite o ponto de extremidade de integridade através do AG1
http://<frontend-public-IP-address>/client
e ele também retorna 400 com a mensagem de erro 'hub' parâmetro de consulta é necessário. Isso significa que a solicitação passou com êxito pelo Application Gateway para o Serviço SignalR e fez a validação da solicitação.curl -I http://<frontend-public-IP-address>/client
devoluções
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.
Execute o bate-papo por meio do Application Gateway
Agora, o tráfego pode chegar ao Serviço SignalR através do Application Gateway. O cliente pode usar o endereço IP público do Application Gateway ou o nome de domínio personalizado para acessar o recurso. Vamos usar este aplicativo de bate-papo como exemplo. Vamos começar por executá-lo localmente.
As cadeias de conexão brutas aparecem neste artigo apenas para fins de demonstração. Em ambientes de produção, proteja sempre as suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança e proteger sua cadeia de conexão usando a ID do Microsoft Entra e autorizar o acesso com a ID do Microsoft Entra.
Primeiro, vamos obter a cadeia de conexão do ASRS1
- Na guia Cadeias de conexão do ASRS1
- Ponto de extremidade do cliente: insira a URL usando o endereço IP público frontend do AG1, por exemplo
http://20.88.8.8
. É um gerador de cadeia de conexão ao usar proxies reversos e o valor não é preservado na próxima vez que você voltar a essa guia. Quando o valor é inserido, a cadeia de conexão acrescenta umaClientEndpoint
seção. - Copie a cadeia de conexão
- Ponto de extremidade do cliente: insira a URL usando o endereço IP público frontend do AG1, por exemplo
- Na guia Cadeias de conexão do ASRS1
Clone o repositório GitHub https://github.com/aspnet/AzureSignalR-samples
Vá para a pasta samples/Chatroom:
Defina a cadeia de conexão copiada e execute o aplicativo localmente, você pode ver que há uma
ClientEndpoint
seção no ConnectionString.cd samples/Chatroom dotnet restore dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-connection-string-with-client-endpoint>" dotnet run
Abra http://localhost:5000 a partir do navegador e use F12 para visualizar os rastreamentos de rede, você pode ver que a conexão WebSocket é estabelecida através de AG1
Serviço Secure SignalR
Na seção anterior, configuramos com êxito o Serviço SignalR como o serviço de back-end do Application Gateway, podemos chamar o Serviço SignalR diretamente da rede pública ou através do Application Gateway.
Nesta seção, vamos configurar o Serviço SignalR para negar todo o tráfego da rede pública e aceitar apenas o tráfego do Application Gateway.
Configurar o serviço SignalR
Vamos configurar o Serviço SignalR para permitir apenas acesso privado. Você pode encontrar mais detalhes em Usar ponto de extremidade privado para o Serviço SignalR.
Vá para a instância do Serviço SignalR ASRS1 no portal.
Vá para a guia Rede :
Na guia Acesso público: Acesso à rede pública muda para Desabilitado e Salvar, agora você não pode mais acessar o Serviço SignalR da rede pública
Na guia Acesso privado , selecione + Ponto de extremidade privado:
- Na guia Noções básicas :
- Designação: PE1
- Nome da interface de rede: PE1-nic
- Região: certifique-se de escolher a mesma região do seu Application Gateway
- Selecione Seguinte: Recursos
- Na guia Recursos
- Manter valores padrão
- Selecione Next: Rede Virtual
- No separador Rede Virtual
- Rede virtual: Selecione VN1 criada anteriormente
- Sub-rede: Selecione VN1/myBackendSubnet criada anteriormente
- Outros mantêm as configurações padrão
- Selecione Next: DNS
- No separador DNS
- Integração com zona DNS privada: Sim
- Revisar e criar o ponto de extremidade privado
- Na guia Noções básicas :
Atualizar pool de back-end do Application Gateway
Como o Application Gateway foi configurado antes de haver um ponto de extremidade privado para ele usar, precisamos atualizar o pool de back-end para que ele examine a Zona DNS Privada e descubra se ele deve rotear o tráfego para o ponto de extremidade privado em vez do endereço público. Fazemos a atualização definindo o FQDN de back-end para algum outro valor e, em seguida, alterando-o novamente.
Vá para a guia Pools de back-end para AG1 e selecione signalr:
- Etapa 1: altere Target para algum outro valor, por exemplo,
x.service.signalr.net
e selecione Salvarasrs1.service.signalr.net
- Passo 2: alterar o destino de volta para
asrs1.service.signalr.net
Teste rápido
Agora vamos visitar
https://asrs1.service.signalr.net/client
novamente. Com o acesso público desativado, ele retorna 403 em vez disso.curl -v https://asrs1.service.signalr.net/client
devoluções
< HTTP/1.1 403 Forbidden
Visite o ponto de extremidade através do AG1
http://<frontend-public-IP-address>/client
e ele retorna 400 com a mensagem de erro 'hub' parâmetro de consulta é necessário. Isso significa que a solicitação passou com êxito pelo Application Gateway para o Serviço SignalR.curl -I http://<frontend-public-IP-address>/client
devoluções
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.
Agora, se você executar o aplicativo de bate-papo localmente novamente, verá mensagens Failed to connect to .... The server returned status code '403' when status code '101' was expected.
de erro, é porque o acesso público está desativado para que as conexões do servidor localhost possam se conectar mais tempo ao serviço SignalR.
Vamos implantar o aplicativo de bate-papo na mesma VNet com ASRS1 para que o bate-papo possa falar com ASRS1.
Implantar o aplicativo de chat no Azure
No portal do Azure, procure Serviços de aplicativo e Criar aplicativo Web.
Na guia Noções básicas, use estes valores para as seguintes configurações do aplicativo Web:
- Grupo de Assinatura e Recursos e Região: o mesmo que você escolhe para o Serviço SignalR
- Designação: WA1
- Publicar: Código
- Pilha de tempo de execução: .NET 6 (LTS)
- Sistema Operacional: Linux
- Região: Certifique-se de que é o mesmo que você escolhe para o Serviço SignalR
- Selecione Next: Deployment, mantenha tudo como padrão e selecione Next:Networking
Na guia Rede
- Ativar injeção de rede: selecione Ativado
- Rede Virtual: selecione VN1 que criamos anteriormente
- Habilite a integração de VNet: Ativado
- Sub-rede de saída: crie uma nova sub-rede
- Selecione Rever + criar
Agora vamos implantar nosso aplicativo de chat no Azure. Abaixo
Usamos a CLI do Azure para implantar nosso aplicativo de chat no Azure. Verifique Guia de início rápido: implante um aplicativo Web ASP.NET para outros ambientes de implantação implantados no Azure.
Em Exemplos de pasta/Sala de chat, execute os comandos abaixo:
# Build and publish the assemblies to publish folder
dotnet publish --os linux -o publish
# zip the publish folder as app.zip
cd publish
zip -r app.zip .
# use az CLI to deploy app.zip to our webapp
az login
az account set -s <your-subscription-name-used-to-create-WA1>
az webapp deploy -g <resource-group-of-WA1> -n WA1 --src-path app.zip
Agora que o aplicativo Web está implantado, vamos para o portal do WA1 e fazer as seguintes atualizações:
Na guia Configuração:
Novas configurações do aplicativo:
Nome Valor WEBSITE_DNS_SERVER 168.63.129.16 WEBSITE_VNET_ROUTE_ALL 1 Nova cadeia de conexão:
Nome Valor Type AzureSignalRConnectionString A cadeia de conexão copiada com o valor ClientEndpoint selecione Personalizado
Na guia Configurações de TLS/SSL:
- Somente HTTPS: Desativado. Para simplificar a demonstração, usamos o protocolo HTTP frontend no Application Gateway. Portanto, precisamos desativar essa opção para evitar alterar a URL HTTP para HTTPs automaticamente.
Vá para a guia Visão geral e obtenha o URL do WA1.
Obter o URL, e substituir esquema https por http, por exemplo,
http://wa1.azurewebsites.net
abra o URL no navegador, agora você pode começar a conversar! Use F12 para abrir rastreamentos de rede, e você pode ver que a conexão SignalR é estabelecida através de AG1.Nota
Às vezes, você precisa desativar o redirecionamento automático https do navegador e o cache do navegador para evitar que o URL redirecione para HTTPS automaticamente.
Próximos passos
Agora, você criou com sucesso um aplicativo de bate-papo em tempo real com o Serviço SignalR e usou o Application Gateway para proteger seus aplicativos e configurar a segurança de ponta a ponta. Saiba mais sobre o Serviço SignalR.