Jak używać usługi Azure SignalR Service z usługą aplikacja systemu Azure Gateway

Application Gateway to moduł równoważenia obciążenia ruchu internetowego, który umożliwia zarządzanie ruchem do aplikacji internetowych. Korzystanie z usługi Application Gateway z usługą SignalR Service umożliwia wykonanie następujących czynności:

  • Chroń aplikacje przed typowymi lukami w zabezpieczeniach internetowych.
  • Uzyskaj równoważenie obciążenia na poziomie aplikacji dla skalowalnych i wysoce dostępnych aplikacji.
  • Skonfiguruj kompleksowe zabezpieczenia.
  • Dostosuj nazwę domeny.

Ten artykuł zawiera dwie części:

  • W pierwszej części pokazano, jak skonfigurować usługę Application Gateway, aby klienci mogli uzyskiwać dostęp do usługi SignalR za pośrednictwem usługi Application Gateway.
  • W drugiej części pokazano, jak zabezpieczyć usługę SignalR Service przez dodanie kontroli dostępu do usługi SignalR Service i zezwalanie tylko na ruch z usługi Application Gateway.

Diagram that shows the architecture of using SignalR Service with Application Gateway.

Instalowanie i konfigurowanie usługi Application Gateway

Tworzenie wystąpienia usługi SignalR Service

  • Postępuj zgodnie z artykułem i utwórz wystąpienie usługi SignalR Service ASRS1

Tworzenie wystąpienia usługi Application Gateway

Utwórz z poziomu portalu wystąpienie usługi Application Gateway AG1:

  • W witrynie Azure Portal wyszukaj ciąg Application Gateway i Utwórz.

  • Na karcie Podstawowe użyj tych wartości dla następujących ustawień bramy aplikacji:

    • Subskrypcja i grupa zasobów i region: tak samo jak w przypadku usługi SignalR Service

    • Nazwa bramy aplikacji: AG1

    • Sieć wirtualna, wybierz pozycję Utwórz nową, a następnie w wyświetlonym oknie Tworzenie sieci wirtualnej wprowadź następujące wartości, aby utworzyć sieć wirtualną i dwie podsieci, jedną dla bramy aplikacji, a drugą dla serwerów zaplecza.

      • Nazwa: wprowadź VN1 jako nazwę sieci wirtualnej.

      • Podsieci: zaktualizuj siatkę Podsieci przy użyciu poniższych 2 podsieci

        Nazwa podsieci Zakres adresów Uwaga
        myAGSubnet (zakres adresów) Podsieć bramy aplikacji. Podsieć bramy aplikacji może zawierać tylko bramy aplikacji. Inne zasoby nie są dozwolone.
        myBackendSubnet (inny zakres adresów) Podsieć dla wystąpienia usługi Azure SignalR.
    • Zaakceptuj wartości domyślne innych ustawień, a następnie wybierz pozycję Dalej: Frontony

    Screenshot of creating Application Gateway instance with Basics tab.

  • Na karcie Frontony:

    • Typ adresu IP frontonu: Publiczny.
    • Wybierz pozycję Dodaj nowy dla publicznego adresu IP i wprowadź ciąg myAGPublicIPAddress jako nazwę publicznego adresu IP, a następnie wybierz przycisk OK.
    • Wybierz pozycję Dalej: zapleczaScreenshot of creating Application Gateway instance with Frontends tab.
  • Na karcie Zaplecza wybierz pozycję Dodaj pulę zaplecza:

    • Nazwa: wprowadź signalr dla puli zasobów usługi SignalR Service.
    • Docelowy obiekt docelowy zaplecza: nazwa hosta wystąpienia usługi SignalR Service ASRS1, na przykład asrs1.service.signalr.net
    • Wybierz pozycję Dalej: Konfiguracja

    Screenshot of setting up the application gateway backend pool for the SignalR Service.

  • Na karcie Konfiguracja wybierz pozycję Dodaj regułę routingu w kolumnie Reguły routingu:

    • Nazwa reguły: myRoutingRule

    • Priorytet: 1

    • Na karcie Odbiornik w oknie Dodawanie reguły routingu wprowadź następujące wartości dla odbiornika:

      • Nazwa odbiornika: wprowadź wartość myListener jako nazwę odbiornika.
      • Adres IP frontonu: wybierz pozycję Publiczny, aby wybrać publiczny adres IP utworzony dla frontonu.
      • Protokół: HTTP
        • W tym artykule używamy protokołu frontonu HTTP w usłudze Application Gateway, aby uprościć pokaz i ułatwić rozpoczęcie pracy. Jednak w rzeczywistości może być konieczne włączenie protokołu HTTPs i domeny klienta w tym scenariuszu produkcyjnym.
      • Zaakceptuj wartości domyślne innych ustawień na karcie OdbiornikScreenshot of setting up the application gateway routing rule listener tab for the SignalR Service.
    • Na karcie Elementy docelowe zaplecza użyj następujących wartości:

      • Typ docelowy: pula zaplecza

      • Obiekt docelowy zaplecza: wybierz wcześniej utworzony signalr

      • Ustawienia zaplecza: wybierz pozycję Dodaj nowe , aby dodać nowe ustawienie.

        • Nazwa ustawień zaplecza: mySetting
        • Protokół zaplecza: HTTPS
        • Użyj dobrze znanego certyfikatu urzędu certyfikacji: Tak
        • Zastąpij nową nazwą hosta: Tak
        • Zastąpienie nazwy hosta: wybierz nazwę hosta z obiektu docelowego zaplecza
        • Inne przechowują wartości domyślne

        Screenshot of setting up the application gateway backend setting for the SignalR Service.

      Screenshot of creating backend targets for application gateway.

  • Przeglądanie i tworzenie grupy dostępności 1Screenshot of reviewing and creating the application gateway instance.

Konfigurowanie sondy kondycji usługi Application Gateway

Po utworzeniu grupy dostępności AG1 przejdź do karty Sondy kondycji w sekcji Ustawienia w portalu, zmień ścieżkę sondy kondycji na/api/health

Screenshot of setting up the application gateway backend health probe for the SignalR Service.

Szybki test

  • Spróbuj użyć nieprawidłowego żądania https://asrs1.service.signalr.net/client klienta i zwraca błąd 400 z komunikatem o błędzie "hub" parametr zapytania jest wymagany. Oznacza to, że żądanie dotarło do usługi SignalR Service i wykonało walidację żądania.

    curl -v https://asrs1.service.signalr.net/client
    

    zwraca

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    
  • Przejdź do karty Przegląd grupy dostępności AG1 i znajdź publiczny adres IP frontonu

    Screenshot of quick testing SignalR Service health endpoint through Application Gateway.

  • Odwiedź punkt końcowy kondycji za pośrednictwem grupy AG1http://<frontend-public-IP-address>/client, a także zwraca wartość 400 z komunikatem o błędzie "hub" parametr zapytania jest wymagany. Oznacza to, że żądanie pomyślnie przeszedł przez usługę Application Gateway do usługi SignalR Service i wykonał walidację żądania.

    curl -I http://<frontend-public-IP-address>/client
    

    zwraca

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    

Uruchamianie czatu za pośrednictwem usługi Application Gateway

Teraz ruch może dotrzeć do usługi SignalR Service za pośrednictwem usługi Application Gateway. Aby uzyskać dostęp do zasobu, klient może użyć publicznego adresu IP usługi Application Gateway lub niestandardowej nazwy domeny. Użyjmy tej aplikacji do czatu jako przykładu. Zacznijmy od uruchamiania go lokalnie.

  • Najpierw uzyskajmy parametry połączenia usługi ASRS1

    • Na karcie ciągów Połączenie ion usługi ASRS1
      • Punkt końcowy klienta: wprowadź adres URL przy użyciu publicznego adresu IP frontonu grupy DOSTĘPNOŚCI 1, na przykład http://20.88.8.8. Jest to generator parametry połączenia podczas korzystania z odwrotnych serwerów proxy, a wartość nie jest zachowywana po następnym powrocie do tej karty. Po wprowadzeniu wartości parametry połączenia dołącza sekcjęClientEndpoint.
      • Kopiowanie ciągu Połączenie ionScreenshot of getting the connection string for SignalR Service with client endpoint.
  • Klonowanie repozytorium GitHub https://github.com/aspnet/AzureSignalR-samples

  • Przejdź do folderu samples/Chatroom:

  • Ustaw skopiowaną parametry połączenia i uruchom aplikację lokalnie. W Połączenie ionString znajduje ClientEndpoint się sekcja.

    cd samples/Chatroom
    dotnet restore
    dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-onnection-string-with-client-endpoint>"
    dotnet run
    
  • Otwórz http://localhost:5000 plik z przeglądarki i użyj klawisza F12, aby wyświetlić ślady sieci. Zobaczysz, że połączenie protokołu WebSocket zostało nawiązane za pośrednictwem grupy dostępności AG1

    Screenshot of running chat application locally with App Gateway and SignalR Service.

Bezpieczna usługa SignalR Service

W poprzedniej sekcji pomyślnie skonfigurowaliśmy usługę SignalR Service jako usługę zaplecza usługi Application Gateway, możemy wywołać usługę SignalR Service bezpośrednio z sieci publicznej lub za pośrednictwem usługi Application Gateway.

W tej sekcji skonfigurujemy usługę SignalR Service tak, aby blokowała cały ruch z sieci publicznej i akceptowała tylko ruch z usługi Application Gateway.

Konfigurowanie usługi SignalR Service

Skonfigurujmy usługę SignalR Service tak, aby zezwalała tylko na dostęp prywatny. Więcej szczegółów można znaleźć w artykule Use private endpoint for SignalR Service (Używanie prywatnego punktu końcowego dla usługi SignalR Service).

  • Przejdź do wystąpienia usługi SignalR Service ASRS1 w portalu.

  • Przejdź do karty Sieć :

    • Na karcie Dostęp publiczny: Zmiana dostępu do sieci publicznej na Wyłączone i Zapisz, teraz nie możesz już uzyskać dostępu do usługi SignalR Service z sieci publicznej

      Screenshot of disabling public access for SignalR Service.

    • Na karcie Dostęp prywatny wybierz pozycję + Prywatny punkt końcowy:

      • Na karcie Podstawy :
        • Nazwa: PE1
        • Nazwa interfejsu sieciowego: PE1-nic
        • Region: upewnij się, że wybrano ten sam region co usługa Application Gateway
        • Wybierz pozycję Dalej: zasoby
      • Na karcie Zasoby
        • Zachowaj wartości domyślne
        • Wybierz pozycję Dalej: Sieć wirtualna
      • Na karcie Sieć wirtualna
        • Sieć wirtualna: wybierz wcześniej utworzoną sieć VN1
        • Podsieć: wybierz wcześniej utworzoną sieć VN1/myBackendSubnet
        • Inne zachowują ustawienia domyślne
        • Wybierz pozycję Dalej: DNS
      • Na karcie DNS
        • Integracja z prywatną strefą DNS: Tak
      • Przeglądanie i tworzenie prywatnego punktu końcowego

    Screenshot of setting up the private endpoint resource for the SignalR Service.

Odświeżanie puli zaplecza usługi Application Gateway

Ponieważ usługa Application Gateway została skonfigurowana przed użyciem prywatnego punktu końcowego, musimy odświeżyć pulę zaplecza, aby przyjrzeć się strefie Prywatna strefa DNS i ustalić, że powinien kierować ruch do prywatnego punktu końcowego zamiast adresu publicznego. Odświeżamy, ustawiając nazwę FQDN zaplecza na inną wartość, a następnie zmieniając ją z powrotem.

Przejdź do karty Pule zaplecza dla grupy DOSTĘPNOŚCI 1 i wybierz pozycję signalr:

  • Krok 1. Zmień wartość docelową asrs1.service.signalr.net na inną wartość, x.service.signalr.netna przykład , i wybierz pozycję Zapisz
  • Krok2. Zmień element docelowy z powrotem na asrs1.service.signalr.net

Szybki test

  • Teraz odwiedźmy https://asrs1.service.signalr.net/client ponownie. Gdy dostęp publiczny jest wyłączony, zwraca wartość 403 .

    curl -v https://asrs1.service.signalr.net/client
    

    zwraca

    < HTTP/1.1 403 Forbidden
    
  • Odwiedź punkt końcowy za pośrednictwem grupy DOSTĘPNOŚCI1http://<frontend-public-IP-address>/client i zwraca wartość 400 z komunikatem o błędzie "hub" parametr zapytania jest wymagany. Oznacza to, że żądanie pomyślnie przeszedł przez usługę Application Gateway do usługi SignalR Service.

    curl -I http://<frontend-public-IP-address>/client
    

    zwraca

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    

Teraz, jeśli ponownie uruchomisz aplikację czatu, zobaczysz komunikaty Failed to connect to .... The server returned status code '403' when status code '101' was expected.o błędach , ponieważ dostęp publiczny jest wyłączony, aby połączenia serwera localhost mogły dłużej łączyć się z usługą SignalR.

Wdróżmy aplikację Czat w tej samej sieci wirtualnej z usługą ASRS1, aby czat mógł komunikować się z usługą ASRS1.

Wdrażanie aplikacji czatu na platformie Azure

  • W witrynie Azure Portal wyszukaj pozycję App Services i Utwórz.

  • Na karcie Podstawowe użyj tych wartości dla następujących ustawień bramy aplikacji:

    • Subskrypcja i grupa zasobów i region: tak samo jak w przypadku usługi SignalR Service
    • Nazwa: WA1
    • Publikowanie: kod
    • Stos środowiska uruchomieniowego: .NET 6 (LTS)
    • System operacyjny: Linux
    • Region: upewnij się, że jest on taki sam jak wybrany dla usługi SignalR Service
    • Wybierz pozycję Dalej: Platforma Docker
  • Na karcie Sieć

    • Włącz iniekcję sieci: wybierz pozycję Włączone
    • Sieć wirtualna: wybierz pozycję VN1 , która została wcześniej utworzona
    • Włączanie integracji z siecią wirtualną: włączone
    • Podsieć ruchu wychodzącego: utwórz nową podsieć
    • Wybierz pozycję Przejrzyj i utwórz

Teraz wdrożymy naszą aplikację czatu na platformie Azure. Poniżej użyjemy interfejsu wiersza polecenia platformy Azure do wdrożenia aplikacji internetowej, możesz również wybrać inne środowiska wdrażania po opublikowaniu sekcji aplikacji internetowej.

W obszarze przykłady folderów/Chatroom uruchom poniższe polecenia:

# 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 deployment source config-zip -n WA1 -g <resource-group-of-WA1> --src app.zip

Teraz aplikacja internetowa jest wdrażana, przejdźmy do portalu dla usługi WA1 i wprowadźmy następujące aktualizacje:

  • Na karcie Konfiguracja:

    • Nowe ustawienia aplikacji:

      Nazwa/nazwisko Wartość
      WEBSITE_DNS_SERVER 168.63.129.16
      WEBSITE_VNET_ROUTE_ALL 1
    • Nowe parametry połączenia:

      Nazwa/nazwisko Wartość Type
      AzureSignalR Połączenie ionString Skopiowana parametry połączenia z wartością ClientEndpoint wybieranie pozycji Niestandardowe

    Screenshot of configuring web app connection string.

  • Na karcie Ustawienia protokołu TLS/SSL:

    • Tylko https: wyłączone. Aby uprościć pokaz, użyliśmy protokołu frontonu HTTP w usłudze Application Gateway. W związku z tym należy wyłączyć tę opcję, aby uniknąć automatycznego zmieniania adresu URL HTTP na adresy HTTPs.
  • Przejdź do karty Przegląd i uzyskaj adres URL aplikacji WA1.

  • Pobierz adres URL i zastąp schemat https ciągiem http, http://wa1.azurewebsites.netna przykład , otwórz adres URL w przeglądarce, a teraz możesz rozpocząć czatowanie! Użyj klawisza F12, aby otworzyć ślady sieci i zobaczyć, że połączenie usługi SignalR jest ustanawiane za pośrednictwem grupy dostępności AG1.

    Uwaga

    Czasami należy wyłączyć automatyczne przekierowywanie https przeglądarki i pamięć podręczną przeglądarki, aby zapobiec automatycznemu przekierowywaniu adresu URL do protokołu HTTPS.

    Screenshot of running chat application in Azure with App Gateway and SignalR Service.

Następne kroki

Teraz udało Ci się utworzyć aplikację czatu w czasie rzeczywistym z usługą SignalR Service i używać usługi Application Gateway do ochrony aplikacji i konfigurowania kompleksowego zabezpieczeń. Dowiedz się więcej o usłudze SignalR Service.