Använda Azure SignalR Service med Azure Application Gateway
Application Gateway är en lastbalanserare för webbtrafik som gör att du kan hantera trafik till dina webbprogram. Med Application Gateway med SignalR Service kan du göra följande:
- Skydda dina program mot vanliga webbsårbarheter.
- Få belastningsutjämning på programnivå för dina skalbara och högtillgängliga program.
- Konfigurera säkerhet från slutpunkt till slutpunkt.
- Anpassa domännamnet.
Den här artikeln innehåller två delar,
- Den första delen visar hur du konfigurerar Application Gateway så att klienterna kan komma åt SignalR via Application Gateway.
- Den andra delen visar hur du skyddar SignalR Service genom att lägga till åtkomstkontroll till SignalR Service och endast tillåta trafik från Application Gateway.
Råa anslutningssträng visas endast i den här artikeln i demonstrationssyfte. Skydda alltid dina åtkomstnycklar i produktionsmiljöer. Använd Azure Key Vault för att hantera och rotera dina nycklar på ett säkert sätt och skydda dina anslutningssträng med hjälp av Microsoft Entra-ID och auktorisera åtkomst med Microsoft Entra-ID.
Installera och konfigurera Application Gateway
Skapa en SignalR Service-instans
- Följ artikeln och skapa en SignalR Service-instans ASRS1
Skapa en Application Gateway-instans
Skapa från portalen en Application Gateway-instans AG1:
På Azure Portal söker du efter Application Gateway och Skapa.
På fliken Grundläggande använder du dessa värden för följande inställningar för programgatewayen:
Prenumeration och resursgrupp och region: samma som du väljer för SignalR Service
Namn på programgateway: AG1
Virtuellt nätverk, välj Skapa nytt och i fönstret Skapa virtuellt nätverk som öppnas anger du följande värden för att skapa det virtuella nätverket och två undernät, ett för programgatewayen och ett annat för serverdelsservrarna.
Namn: Ange VN1 som namn på det virtuella nätverket.
Undernät: Uppdatera undernätsrutnätet med under två undernät
Namn på undernät Adressintervall Kommentar myAGSubnet (adressintervall) Undernät för programgatewayen. Undernätet för en programgateway kan endast innehålla programgatewayer. Inga andra resurser är tillåtna. myBackendSubnet (ett annat adressintervall) Undernät för Azure SignalR-instansen.
Acceptera standardvärdena för de andra inställningarna och välj sedan Nästa: Klientdelar
På fliken Klientdelar :
- Ip-adresstyp för klientdelen: Offentlig.
- Välj Lägg till ny för den offentliga IP-adressen och ange myAGPublicIPAddress som namn på den offentliga IP-adressen och välj sedan OK.
- Välj Nästa: Serverdelar
På fliken Serverdelar väljer du Lägg till en serverdelspool:
- Namn: Ange signaler för SignalR Service-resursens serverdelspool.
- Mål för serverdelen: värdnamnet för din SignalR Service-instans ASRS1, till exempel
asrs1.service.signalr.net
- Välj Nästa: Konfiguration
På fliken Konfiguration väljer du Lägg till en routningsregel i kolumnen Routningsregler :
Regelnamn: myRoutingRule
Prioritet: 1
På fliken Lyssnare i fönstret Lägg till en routningsregel anger du följande värden för lyssnaren:
- Lyssnarnamn: Ange myListener som namnet på lyssnaren.
- Klientdels-IP: Välj Offentlig för att välja den offentliga IP-adress som du skapade för klientdelen.
- Protokoll: HTTP
- Vi använder HTTP-klientdelsprotokollet på Application Gateway i den här artikeln för att förenkla demonstrationen och hjälpa dig att komma igång enklare. Men i verkligheten kan du behöva aktivera HTTPs och kunddomän på den med produktionsscenario.
- Acceptera standardvärdena för de andra inställningarna på fliken Lyssnare
Använd följande värden på fliken Serverdelsmål :
Måltyp: Serverdelspool
Serverdelsmål: välj signalr som vi skapade tidigare
Serverdelsinställningar: Välj Lägg till ny för att lägga till en ny inställning.
- Namn på serverdelsinställningar: mySetting
- Serverdelsprotokoll: HTTPS
- Använd välkända CA-certifikat: Ja
- Åsidosätt med nytt värdnamn: Ja
- Åsidosättning av värdnamn: Välj värdnamn från serverdelsmålet
- Andra behåller standardvärdena
Granska och skapa tillgänglighetsgruppen1
Konfigurera Application Gateway-hälsoavsökning
När AG1 skapas går du till fliken Hälsoavsökningar under avsnittet Inställningar i portalen, ändrar sökvägen för hälsoavsökningen till /api/health
Snabbtest
Prova med en ogiltig klientbegäran
https://asrs1.service.signalr.net/client
och returnerar 400 med felmeddelandet "hub" frågeparameter krävs. Det innebär att begäran kom till SignalR Service och gjorde begärandeverifieringen.curl -v https://asrs1.service.signalr.net/client
returer
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.
Gå till fliken Översikt i tillgänglighetsgruppen1 och ta reda på den offentliga IP-adressen för klientdelen
Besök hälsoslutpunkten via AG1
http://<frontend-public-IP-address>/client
och returnerar även 400 med felmeddelandet "hub" frågeparameter krävs. Det innebär att begäran har gått igenom Application Gateway till SignalR Service och verifierat begäran.curl -I http://<frontend-public-IP-address>/client
returer
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.
Köra chatt via Application Gateway
Nu kan trafiken nå SignalR Service via Application Gateway. Kunden kan använda den offentliga IP-adressen för Application Gateway eller det anpassade domännamnet för att få åtkomst till resursen. Vi använder det här chattprogrammet som exempel. Vi börjar med att köra den lokalt.
Råa anslutningssträng visas endast i den här artikeln i demonstrationssyfte. Skydda alltid dina åtkomstnycklar i produktionsmiljöer. Använd Azure Key Vault för att hantera och rotera dina nycklar på ett säkert sätt och skydda dina anslutningssträng med hjälp av Microsoft Entra-ID och auktorisera åtkomst med Microsoft Entra-ID.
Först ska vi ta anslutningssträng av ASRS1
- På fliken Anslutningssträngar i ASRS1
- Klientslutpunkt: Ange URL:en med den offentliga IP-adressen för klientdelen för AG1, till exempel
http://20.88.8.8
. Det är en anslutningssträng generator när du använder omvända proxyservrar och värdet bevaras inte nästa gång du kommer tillbaka till den här fliken. När värdet anges lägger anslutningssträng till ettClientEndpoint
avsnitt. - Kopiera anslutningssträngen
- Klientslutpunkt: Ange URL:en med den offentliga IP-adressen för klientdelen för AG1, till exempel
- På fliken Anslutningssträngar i ASRS1
Klona GitHub-lagringsplatsen https://github.com/aspnet/AzureSignalR-samples
Gå till exempel/chattrumsmapp:
Ange den kopierade anslutningssträng och kör programmet lokalt. Du kan se att det finns ett
ClientEndpoint
avsnitt i ConnectionString.cd samples/Chatroom dotnet restore dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-connection-string-with-client-endpoint>" dotnet run
Öppna http://localhost:5000 från webbläsaren och använd F12 för att visa nätverksspårningarna. Du kan se att WebSocket-anslutningen upprättas via AG1
Säker SignalR-tjänst
I föregående avsnitt har vi konfigurerat SignalR Service som serverdelstjänst för Application Gateway, vi kan anropa SignalR Service direkt från det offentliga nätverket eller via Application Gateway.
I det här avsnittet ska vi konfigurera SignalR Service att neka all trafik från det offentliga nätverket och endast acceptera trafik från Application Gateway.
Konfigurera SignalR Service
Nu ska vi konfigurera SignalR Service för att endast tillåta privat åtkomst. Mer information finns i använda privat slutpunkt för SignalR Service.
Gå till SignalR Service-instansen ASRS1 i portalen.
Gå till fliken Nätverk :
På fliken Offentlig åtkomst : Åtkomst för offentligt nätverk ändras till Inaktiverad och Spara, nu kan du inte längre komma åt SignalR Service från det offentliga nätverket
På fliken Privat åtkomst väljer du + Privat slutpunkt:
- På fliken Grundläggande :
- Namn: PE1
- Nätverksgränssnittsnamn: PE1-nic
- Region: Se till att välja samma region som din Application Gateway
- Välj Nästa: Resurser
- På fliken Resurser
- Behåll standardvärden
- Välj Nästa: Virtuellt nätverk
- På fliken Virtuellt nätverk
- Virtuellt nätverk: Välj VN1 som skapats tidigare
- Undernät: Välj VN1/myBackendSubnet som skapats tidigare
- Andra behåller standardinställningarna
- Välj Nästa: DNS
- På fliken DNS
- Integrering med privat DNS-zon: Ja
- Granska och skapa den privata slutpunkten
- På fliken Grundläggande :
Uppdatera Application Gateway-serverdelspoolen
Eftersom Application Gateway konfigurerades innan det fanns en privat slutpunkt som den skulle använda måste vi uppdatera serverdelspoolen så att den kan titta på Privat DNS-zonen och ta reda på att den ska dirigera trafiken till den privata slutpunkten i stället för den offentliga adressen. Vi gör uppdateringen genom att ställa in serverdels-FQDN till något annat värde och sedan ändra tillbaka det.
Gå till fliken Serverdelspooler för AG1 och välj signalr:
- Steg 1: Ändra Mål
asrs1.service.signalr.net
till något annat värde,x.service.signalr.net
till exempel , och välj Spara - Steg 2: Ändra tillbaka målet till
asrs1.service.signalr.net
Snabbtest
Nu ska vi besöka
https://asrs1.service.signalr.net/client
igen. När offentlig åtkomst är inaktiverad returneras 403 i stället.curl -v https://asrs1.service.signalr.net/client
returer
< HTTP/1.1 403 Forbidden
Besök slutpunkten via AG1
http://<frontend-public-IP-address>/client
och returnerar 400 med felmeddelandet "hub" frågeparameter krävs. Det innebär att begäran har gått igenom Application Gateway till SignalR Service.curl -I http://<frontend-public-IP-address>/client
returer
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.
Om du nu kör chattprogrammet lokalt igen visas felmeddelanden Failed to connect to .... The server returned status code '403' when status code '101' was expected.
, det beror på att offentlig åtkomst är inaktiverad så att localhost-serveranslutningar längre kan ansluta till SignalR-tjänsten.
Nu ska vi distribuera chattprogrammet till samma virtuella nätverk med ASRS1 så att chatten kan kommunicera med ASRS1.
Distribuera chattprogrammet till Azure
På Azure Portal söker du efter App-tjänster och Skapa webbapp.
På fliken Grundläggande använder du dessa värden för följande inställningar för webbappar:
- Prenumeration och resursgrupp och region: samma som du väljer för SignalR Service
- Namn: WA1
- Publicera: Kod
- Körningsstack: .NET 6 (LTS)
- Operativsystem: Linux
- Region: Kontrollera att det är samma som du väljer för SignalR Service
- Välj Nästa: Distribution, behåll alla som standard och välj Nästa:Nätverk
På fliken Nätverk
- Aktivera nätverksinmatning: välj På
- Virtuellt nätverk: välj VN1 som vi skapade tidigare
- Aktivera VNet-integrering: På
- Utgående undernät: skapa ett nytt undernät
- Välj Granska + skapa
Nu ska vi distribuera chattprogrammet till Azure. Under
Vi använder Azure CLI för att distribuera vårt chattprogram till Azure. Läs snabbstart: Distribuera en ASP.NET webbapp för andra distributionsmiljöer som distribueras till Azure.
Under mappexempel/Chatroom kör du kommandona nedan:
# 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
Nu när webbappen har distribuerats går vi till portalen för WA1 och gör följande uppdateringar:
På fliken Konfiguration :
Nya programinställningar:
Name Värde WEBSITE_DNS_SERVER 168.63.129.16 WEBSITE_VNET_ROUTE_ALL 1 Ny anslutningssträng:
Name Värde Typ AzureSignalRConnectionString Den kopierade anslutningssträng med ClientEndpoint-värdet välj Anpassad
På fliken TLS/SSL-inställningar:
- Endast HTTPS: Av. För att förenkla demonstrationen använde vi HTTP-klientdelsprotokollet på Application Gateway. Därför måste vi inaktivera det här alternativet för att undvika att ändra HTTP-URL:en till HTTPs automatiskt.
Gå till fliken Översikt och hämta URL:en för WA1.
Hämta URL:en och ersätt schemat https med http,
http://wa1.azurewebsites.net
till exempel , öppna URL:en i webbläsaren, nu kan du börja chatta! Använd F12 för att öppna nätverksspårningar och du kan se att SignalR-anslutningen upprättas via AG1.Kommentar
Ibland måste du inaktivera webbläsarens automatiska https-omdirigering och webbläsarens cacheminne för att förhindra att URL:en omdirigeras till HTTPS automatiskt.
Nästa steg
Nu har du skapat ett chattprogram i realtid med SignalR Service och använt Application Gateway för att skydda dina program och konfigurera säkerhet från slutpunkt till slutpunkt. Läs mer om SignalR Service.