Migrowanie aplikacji do używania połączeń bez hasła z usługą Azure Service Bus

Żądania aplikacji do usługi Azure Service Bus muszą być uwierzytelniane przy użyciu kluczy dostępu do konta lub połączeń bez hasła. Jednak w miarę możliwości należy określić priorytety połączeń bez hasła w aplikacjach. W tym samouczku przedstawiono sposób migracji z tradycyjnych metod uwierzytelniania do bezpieczniejszych połączeń bez hasła.

Zagrożenia bezpieczeństwa skojarzone z kluczami dostępu

W poniższym przykładzie kodu pokazano, jak nawiązać połączenie z usługą Azure Service Bus przy użyciu parametry połączenia zawierającego klucz dostępu. Podczas tworzenia usługi Service Bus platforma Azure generuje te klucze i automatycznie parametry połączenia. Wielu deweloperów gravitate w kierunku tego rozwiązania, ponieważ czuje się znajome opcje, z którymi pracowali w przeszłości. Jeśli aplikacja używa obecnie parametry połączenia, rozważ migrację do połączeń bez hasła, wykonując kroki opisane w tym dokumencie.

await using ServiceBusClient client = new("<CONNECTION-STRING>");

Ciągi Połączenie ion powinny być używane z ostrożnością. Deweloperzy muszą być sumienni, aby nigdy nie ujawniać kluczy w niezabezpieczonej lokalizacji. Każdy, kto uzyskuje dostęp do klucza, może się uwierzytelnić. Jeśli na przykład klucz konta zostanie przypadkowo zaewidencjonowany w kontroli źródła, wysłany za pośrednictwem niezabezpieczonej wiadomości e-mail, wklejony do nieprawidłowego czatu lub wyświetlony przez osobę, która nie powinna mieć uprawnień, istnieje ryzyko, że złośliwy użytkownik uzyskuje dostęp do aplikacji. Zamiast tego rozważ zaktualizowanie aplikacji w celu korzystania z połączeń bez hasła.

Migrowanie do połączeń bez hasła

Wiele usług platformy Azure obsługuje połączenia bez hasła za pośrednictwem usługi Microsoft Entra ID i kontroli dostępu opartej na rolach (RBAC). Te techniki zapewniają niezawodne funkcje zabezpieczeń i można ich zaimplementować za pomocą DefaultAzureCredential bibliotek klienckich usługi Azure Identity.

Ważne

Niektóre języki muszą implementować DefaultAzureCredential jawnie w kodzie, a inne wykorzystują DefaultAzureCredential wewnętrznie za pośrednictwem bazowych wtyczek lub sterowników.

DefaultAzureCredential obsługuje wiele metod uwierzytelniania i automatycznie określa, które powinny być używane w czasie wykonywania. Takie podejście umożliwia aplikacji używanie różnych metod uwierzytelniania w różnych środowiskach (lokalnych deweloperów i produkcji) bez implementowania kodu specyficznego dla środowiska.

Kolejność i lokalizacje, w których DefaultAzureCredential można wyszukiwać poświadczenia, można znaleźć w przeglądzie biblioteki tożsamości platformy Azure i różni się w zależności od języków. Na przykład podczas pracy lokalnej z platformą .NET DefaultAzureCredential zazwyczaj uwierzytelnia się przy użyciu konta, które deweloper użył do logowania się do programu Visual Studio, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell. Po wdrożeniu aplikacji na platformie Azure DefaultAzureCredential automatycznie odnajduje i używa tożsamości zarządzanej skojarzonej usługi hostingu, takiej jak usługa aplikacja systemu Azure Service. Do tego przejścia nie są wymagane żadne zmiany kodu.

Uwaga

Tożsamość zarządzana zapewnia tożsamość zabezpieczeń reprezentującą aplikację lub usługę. Tożsamość jest zarządzana przez platformę Azure i nie wymaga aprowizacji ani rotacji żadnych wpisów tajnych. Więcej informacji na temat tożsamości zarządzanych można uzyskać w dokumentacji przeglądu .

W poniższym przykładzie kodu pokazano, jak nawiązać połączenie z usługą Service Bus przy użyciu połączeń bez hasła. W następnej sekcji opisano sposób migracji do tej konfiguracji dla określonej usługi bardziej szczegółowo.

Aplikacja .NET może przekazać wystąpienie DefaultAzureCredential klasy klienta usługi do konstruktora. DefaultAzureCredential program automatycznie odnajduje poświadczenia, które są dostępne w tym środowisku.

ServiceBusClient serviceBusClient = new(
    new Uri($"https://{serviceBusNamespace}.blob.core.windows.net"),
    new DefaultAzureCredential());

Procedura migracji aplikacji w celu korzystania z uwierzytelniania bez hasła

W poniższych krokach opisano sposób migrowania istniejącej aplikacji w celu używania połączeń bez hasła zamiast rozwiązania opartego na kluczach. Najpierw skonfigurujesz lokalne środowisko programistyczne, a następnie zastosujesz te pojęcia do środowiska hostingu aplikacji platformy Azure. Te same kroki migracji należy wykonać niezależnie od tego, czy używasz kluczy dostępu bezpośrednio, czy za pośrednictwem parametry połączenia.

Konfigurowanie ról i użytkowników na potrzeby uwierzytelniania programowania lokalnego

Podczas tworzenia aplikacji lokalnie upewnij się, że konto użytkownika, które uzyskuje dostęp do usługi Service Bus, ma odpowiednie uprawnienia. W tym przykładzie użyjesz roli Właściciel danych usługi Azure Service Bus do wysyłania i odbierania danych, choć są również dostępne bardziej szczegółowe role. Aby przypisać sobie tę rolę, musisz przypisać rolę Administracja istratora dostępu użytkowników lub inną rolę obejmującą akcję Microsoft.Authorization/roleAssignments/write. Role RBAC platformy Azure można przypisać użytkownikowi przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell. Więcej informacji na temat dostępnych zakresów przypisań ról można znaleźć na stronie przeglądu zakresu.

W tym scenariuszu przypiszesz uprawnienia do konta użytkownika o określonym zakresie do określonej przestrzeni nazw usługi Service Bus, aby postępować zgodnie z zasadą najniższych uprawnień. Ta praktyka zapewnia użytkownikom tylko minimalne wymagane uprawnienia i tworzy bezpieczniejsze środowiska produkcyjne.

W poniższym przykładzie przypisano rolę właściciela danych usługi Azure Service Bus do konta użytkownika, co umożliwia wysyłanie i odbieranie danych.

Ważne

W większości przypadków propagacja przypisania roli na platformie Azure potrwa minutę lub dwie, ale w rzadkich przypadkach może upłynąć do ośmiu minut. Jeśli podczas pierwszego uruchomienia kodu wystąpią błędy uwierzytelniania, zaczekaj chwilę i spróbuj ponownie.

  1. W witrynie Azure Portal znajdź przestrzeń nazw usługi Service Bus przy użyciu głównego paska wyszukiwania lub nawigacji po lewej stronie.

  2. Na stronie Przegląd usługi Service Bus wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami) z menu po lewej stronie.

  3. Na stronie Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz kartę Przypisania ról.

  4. Wybierz pozycję + Dodaj z górnego menu, a następnie pozycję Dodaj przypisanie roli z wyświetlonego menu rozwijanego.

    A screenshot showing how to assign a role.

  5. Użyj pola wyszukiwania, aby filtrować wyniki do żądanej roli. W tym przykładzie wyszukaj ciąg Właściciel danych usługi Azure Service Bus i wybierz pasujący wynik, a następnie wybierz pozycję Dalej.

  6. W obszarze Przypisz dostęp do wybierz pozycję Użytkownik, grupa lub jednostka usługi, a następnie wybierz pozycję + Wybierz członków.

  7. W oknie dialogowym wyszukaj nazwę użytkownika firmy Microsoft Entra (zazwyczaj adres e-mail user@domain ), a następnie wybierz pozycję Wybierz w dolnej części okna dialogowego.

  8. Wybierz pozycję Przejrzyj i przypisz , aby przejść do ostatniej strony, a następnie ponownie przejrzyj i przypisz, aby ukończyć proces.

Logowanie się i migrowanie kodu aplikacji w celu korzystania z połączeń bez hasła

W przypadku programowania lokalnego upewnij się, że uwierzytelniasz się przy użyciu tego samego konta Microsoft Entra, do którego przypisano rolę dla przestrzeni nazw usługi Service Bus. Możesz uwierzytelnić się za pomocą interfejsu wiersza polecenia platformy Azure, programu Visual Studio, programu Azure PowerShell lub innych narzędzi, takich jak IntelliJ.

W przypadku programowania lokalnego upewnij się, że uwierzytelniasz się przy użyciu tego samego konta Microsoft Entra, do którego przypisano rolę. Możesz uwierzytelnić się za pomocą popularnych narzędzi programistycznych, takich jak interfejs wiersza polecenia platformy Azure lub program Azure PowerShell. Narzędzia programistyczne, za pomocą których można uwierzytelniać się w różnych językach.

Zaloguj się do platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure przy użyciu następującego polecenia:

az login

Następnie zaktualizuj kod, aby używał połączeń bez hasła.

  1. Aby użyć DefaultAzureCredential w aplikacji .NET, zainstaluj Azure.Identity pakiet:

    dotnet add package Azure.Identity
    
  2. W górnej części pliku dodaj następujący kod:

    using Azure.Identity;
    
  3. Zidentyfikuj kod, który tworzy obiekt w celu nawiązania połączenia z usługą ServiceBusClient Azure Service Bus. Zaktualizuj kod, aby był zgodny z następującym przykładem:

     var serviceBusNamespace = $"https://{namespace}.servicebus.windows.net";
     ServiceBusClient client = new(
         serviceBusNamespace,
         new DefaultAzureCredential());
    

Lokalne uruchamianie aplikacji

Po wprowadzeniu tych zmian w kodzie uruchom aplikację lokalnie. Nowa konfiguracja powinna pobierać poświadczenia lokalne, takie jak interfejs wiersza polecenia platformy Azure, program Visual Studio lub IntelliJ. Role przypisane do lokalnego użytkownika deweloperskiego na platformie Azure umożliwiają aplikacji nawiązywanie połączenia z usługą platformy Azure lokalnie.

Konfigurowanie środowiska hostingu platformy Azure

Po skonfigurowaniu aplikacji do korzystania z połączeń bez hasła i uruchamianiu lokalnie ten sam kod może uwierzytelniać się w usługach platformy Azure po jej wdrożeniu na platformie Azure. Na przykład aplikacja wdrożona w wystąpieniu usługi aplikacja systemu Azure z włączoną tożsamością zarządzaną może łączyć się z usługą Azure Service Bus.

Tworzenie tożsamości zarządzanej przy użyciu witryny Azure Portal

W poniższych krokach pokazano, jak utworzyć tożsamość zarządzaną przypisaną przez system dla różnych usług hostingu sieci Web. Tożsamość zarządzana może bezpiecznie łączyć się z innymi usługami platformy Azure przy użyciu skonfigurowanych wcześniej konfiguracji aplikacji.

Niektóre środowiska hostingu aplikacji obsługują usługę Połączenie or, która ułatwia łączenie usług obliczeniowych platformy Azure z innymi usługami pomocniczymi. Usługa Połączenie or automatycznie konfiguruje ustawienia sieci i informacje o połączeniu. Więcej informacji na temat usługi service Połączenie or i scenariuszy obsługiwanych na stronie przeglądu.

Obecnie obsługiwane są następujące usługi obliczeniowe:

  • Azure App Service
  • Azure Spring Cloud
  • Azure Container Apps (wersja zapoznawcza)

W tym przewodniku migracji użyjesz usługi App Service, ale kroki są podobne w usługach Azure Spring Apps i Azure Container Apps.

Uwaga

Usługa Azure Spring Apps obecnie obsługuje tylko Połączenie or usługi przy użyciu parametry połączenia.

  1. Na stronie głównej przeglądu usługi App Service wybierz pozycję Service Połączenie or w obszarze nawigacji po lewej stronie.

  2. Wybierz pozycję + Utwórz z górnego menu i zostanie otwarty panel Tworzenie połączenia . Wprowadź następujące wartości:

    • Typ usługi: wybierz pozycję Service Bus.
    • Subskrypcja: wybierz subskrypcję, której chcesz użyć.
    • nazwa Połączenie ion: wprowadź nazwę połączenia, na przykład connector_appservice_servicebus.
    • Typ klienta: pozostaw wybraną wartość domyślną lub wybierz określonego klienta, którego chcesz użyć.

    Wybierz pozycję Dalej: Uwierzytelnianie.

  3. Upewnij się, że wybrano opcję Tożsamość zarządzana przypisana przez system (zalecana), a następnie wybierz pozycję Dalej: Sieć.

  4. Pozostaw wybrane wartości domyślne, a następnie wybierz pozycję Dalej: Przejrzyj i utwórz.

  5. Po zweryfikowaniu ustawień przez platformę Azure wybierz pozycję Utwórz.

Usługa Połączenie or automatycznie utworzy tożsamość zarządzaną przypisaną przez system dla usługi App Service. Łącznik przypisze również tożsamość zarządzaną rolę właściciela danych usługi Azure Service Bus dla wybranej magistrali usług.

Alternatywnie możesz również włączyć tożsamość zarządzaną w środowisku hostingu platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

Za pomocą Połączenie usługi można utworzyć połączenie między środowiskiem hostingu obliczeniowego platformy Azure i usługą docelową przy użyciu interfejsu wiersza polecenia platformy Azure. Interfejs wiersza polecenia automatycznie obsługuje tworzenie tożsamości zarządzanej i przypisuje odpowiednią rolę zgodnie z opisem w instrukcjach portalu.

Jeśli używasz usługi aplikacja systemu Azure, użyj az webapp connection polecenia :

az webapp connection create servicebus \
    --resource-group <resource-group-name> \
    --name <webapp-name> \
    --target-resource-group <target-resource-group-name> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Jeśli używasz usługi Azure Spring Apps, użyj az spring connection polecenia :

az spring connection create servicebus \
    --resource-group <resource-group-name> \
    --service <service-instance-name> \
    --app <app-name> \
    --deployment <deployment-name> \
    --target-resource-group <target-resource-group> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Jeśli używasz usługi Azure Container Apps, użyj az containerapp connection polecenia :

az containerapp connection create servicebus \
    --resource-group <resource-group-name> \
    --name <webapp-name> \
    --target-resource-group <target-resource-group-name> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Przypisywanie ról do tożsamości zarządzanej

Następnie musisz przyznać uprawnienia tożsamości zarządzanej utworzonej w celu uzyskania dostępu do usługi Service Bus. Możesz to zrobić, przypisując rolę do tożsamości zarządzanej, podobnie jak w przypadku lokalnego użytkownika dewelopera.

Jeśli połączono usługi przy użyciu usługi Połączenie or, nie musisz wykonywać tego kroku. Obsługiwane zostały niezbędne konfiguracje:

  • W przypadku wybrania tożsamości zarządzanej podczas tworzenia połączenia utworzono tożsamość zarządzaną przypisaną przez system dla aplikacji i przypisano rolę Właściciela danych usługi Azure Service Bus w usłudze Service Bus.

  • Jeśli wybrano parametry połączenia, parametry połączenia został dodany jako zmienna środowiskowa aplikacji.

Testowanie aplikacji

Po wprowadzeniu tych zmian w kodzie przejdź do hostowanej aplikacji w przeglądarce. Aplikacja powinna mieć możliwość pomyślnego nawiązania połączenia z usługą Service Bus. Należy pamiętać, że propagowanie przypisań ról za pośrednictwem środowiska platformy Azure może potrwać kilka minut. Aplikacja jest teraz skonfigurowana do uruchamiania zarówno lokalnie, jak i w środowisku produkcyjnym bez konieczności zarządzania wpisami tajnymi w samej aplikacji.

Następne kroki

W tym samouczku przedstawiono sposób migrowania aplikacji do połączeń bez hasła.