Dela via


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.

Diagram som visar arkitekturen för att använda SignalR Service med 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: ServerdelarSkärmbild av hur du skapar Application Gateway-instansen med fliken Klientdelar.
  • 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 exempelasrs1.service.signalr.net
    • Välj Nästa: Konfiguration

    Skärmbild av hur du konfigurerar programgatewayens serverdelspool för SignalR Service.

  • 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 Skärmbild av hur du konfigurerar fliken för lyssningsregel för application gateway-routning för SignalR Service.
    • 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

        Skärmbild av konfigurationen av serverdelsinställningen för programgatewayen för SignalR Service.

      Skärmbild av att skapa serverdelsmål för application gateway.

  • Granska och skapa tillgänglighetsgruppen1 Skärmbild av granskning och skapande av application gateway-instansen.

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

Skärmbild av hur du konfigurerar programgatewayens hälsoavsökning för SignalR Service.

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

    Skärmbild av snabbtestning av SignalR Tjänststatus slutpunkt via Application Gateway.

  • 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 ett ClientEndpoint avsnitt.
      • Kopiera anslutningssträngen Skärmbild av att hämta anslutningssträng för SignalR Service med klientslutpunkten.
  • 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

    Skärmbild av att köra chattprogram lokalt med App Gateway och SignalR Service.

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 :

    • 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

      Skärmbild av inaktivering av offentlig åtkomst för SignalR Service.

    • fliken Privat åtkomst väljer du + Privat slutpunkt:

      • 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
      • fliken Resurser
        • Behåll standardvärden
        • Välj Nästa: Virtuellt nätverk
      • 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
      • fliken DNS
        • Integrering med privat DNS-zon: Ja
      • Granska och skapa den privata slutpunkten

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.nettill 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>/clientoch 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
    • Virtuellt nätverk: välj VN1 som vi skapade tidigare
    • Aktivera VNet-integrering:
    • 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

    Skärmbild av hur du konfigurerar anslutningssträng för webbappar.

  • 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.nettill 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.

    Skärmbild av att köra chattprogram i Azure med App Gateway och SignalR Service.

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.