Migrowanie aplikacji Java do używania połączeń bez hasła z usługą Azure SQL Database

W tym artykule wyjaśniono, jak przeprowadzić migrację z tradycyjnych metod uwierzytelniania do bezpieczniejszych połączeń bez hasła z usługą Azure SQL Database.

Żądania aplikacji do usługi Azure SQL Database muszą być uwierzytelnione. Usługa Azure SQL Database oferuje kilka różnych sposobów bezpiecznego łączenia aplikacji. Jednym ze sposobów jest użycie haseł. Jednak w miarę możliwości należy określić priorytety połączeń bez hasła w aplikacjach.

Porównanie opcji uwierzytelniania

Gdy aplikacja uwierzytelnia się w usłudze Azure SQL Database, udostępnia parę nazw użytkowników i haseł w celu nawiązania połączenia z bazą danych. W zależności od tego, gdzie są przechowywane tożsamości, istnieją dwa typy uwierzytelniania: uwierzytelnianie firmy Microsoft Entra i uwierzytelnianie usługi Azure SQL Database.

Uwierzytelnianie Microsoft Entra

Uwierzytelnianie entra firmy Microsoft to mechanizm nawiązywania połączenia z usługą Azure SQL Database przy użyciu tożsamości zdefiniowanych w identyfikatorze Entra firmy Microsoft. Dzięki uwierzytelnieniu firmy Microsoft Entra można zarządzać tożsamościami użytkowników bazy danych i innymi usługi firmy Microsoft w centralnej lokalizacji, co upraszcza zarządzanie uprawnieniami.

Korzystanie z identyfikatora Entra firmy Microsoft do uwierzytelniania zapewnia następujące korzyści:

  • Uwierzytelnianie użytkowników w usługach platformy Azure w jednolity sposób.
  • Zarządzanie zasadami haseł i rotacją haseł w jednym miejscu.
  • Wiele form uwierzytelniania obsługiwanych przez identyfikator Entra firmy Microsoft, co może wyeliminować konieczność przechowywania haseł.
  • Klienci mogą zarządzać uprawnieniami bazy danych przy użyciu grup zewnętrznych (Microsoft Entra ID).
  • Uwierzytelnianie entra firmy Microsoft używa użytkowników usługi Azure SQL Database do uwierzytelniania tożsamości na poziomie bazy danych.
  • Obsługa uwierzytelniania opartego na tokenach dla aplikacji łączących się z usługą Azure SQL Database.

Uwierzytelnianie usługi Azure SQL Database

Konta można tworzyć w usłudze Azure SQL Database. Jeśli zdecydujesz się używać haseł jako poświadczeń dla kont, te poświadczenia będą przechowywane w sys.database_principals tabeli. Ponieważ te hasła są przechowywane w usłudze Azure SQL Database, musisz samodzielnie zarządzać rotacją haseł.

Chociaż istnieje możliwość nawiązania połączenia z usługą Azure SQL Database przy użyciu haseł, należy ich używać ostrożnie. Musisz być sumienny, aby nigdy nie ujawniać haseł w niezabezpieczonej lokalizacji. Każdy, kto uzyskuje dostęp do haseł, może się uwierzytelnić. Istnieje na przykład ryzyko, że złośliwy użytkownik może uzyskać dostęp do aplikacji, jeśli parametry połączenia 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ń. Zamiast tego rozważ zaktualizowanie aplikacji w celu korzystania z połączeń bez hasła.

Wprowadzenie do połączeń bez hasła

Za pomocą połączenia bez hasła można nawiązać połączenie z usługami platformy Azure bez przechowywania poświadczeń w kodzie aplikacji, jego plikach konfiguracji lub zmiennych środowiskowych.

Wiele usług platformy Azure obsługuje połączenia bez hasła, na przykład za pośrednictwem tożsamości zarządzanej platformy Azure. Te techniki zapewniają niezawodne funkcje zabezpieczeń, które można zaimplementować przy użyciu wartości DefaultAzureCredential z bibliotek klienckich tożsamości platformy Azure. Z tego samouczka dowiesz się, jak zaktualizować istniejącą aplikację do użycia DefaultAzureCredential zamiast alternatyw, takich jak parametry połączenia.

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. Na przykład podczas pracy lokalnie DefaultAzureCredential zazwyczaj uwierzytelnia się przy użyciu konta, które deweloper użył do logowania się w programie Visual Studio. Po wdrożeniu aplikacji na platformie Azure DefaultAzureCredential nastąpi automatyczne przełączenie w celu użycia tożsamości zarządzanej. Do tego przejścia nie są wymagane żadne zmiany kodu.

Aby upewnić się, że połączenia są bez hasła, należy wziąć pod uwagę zarówno lokalne programowanie, jak i środowisko produkcyjne. Jeśli parametry połączenia jest wymagana w obu miejscach, aplikacja nie jest bez hasła.

W lokalnym środowisku projektowym możesz uwierzytelnić się za pomocą interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell, programu Visual Studio lub wtyczek platformy Azure dla programu Visual Studio Code lub IntelliJ. W takim przypadku można użyć tego poświadczenia w aplikacji zamiast konfigurowania właściwości.

Podczas wdrażania aplikacji w środowisku hostingu platformy Azure, takim jak maszyna wirtualna, można przypisać tożsamość zarządzaną w tym środowisku. Następnie nie trzeba podawać poświadczeń w celu nawiązania połączenia z usługami platformy Azure.

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 .

Uwaga

Ponieważ sterownik JDBC dla usługi Azure SQL Database nie obsługuje jeszcze połączeń bez hasła ze środowisk lokalnych, ten artykuł koncentruje się tylko na aplikacjach wdrożonych w środowiskach hostingu platformy Azure i sposobie ich migracji do korzystania z połączeń bez hasła.

Migrowanie istniejącej aplikacji do korzystania z połączeń bez hasła

W poniższych krokach wyjaśniono, jak przeprowadzić migrację istniejącej aplikacji w celu używania połączeń bez hasła zamiast rozwiązania opartego na hasłach.

0) Przygotowywanie środowiska roboczego

Najpierw użyj następującego polecenia, aby skonfigurować niektóre zmienne środowiskowe.

export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --output tsv)

Zastąp symbole zastępcze następującymi wartościami, które są używane w tym artykule:

  • <YOUR_RESOURCE_GROUP>: nazwa grupy zasobów, w których znajdują się zasoby.
  • <YOUR_DATABASE_SERVER_NAME>: nazwa serwera usługi Azure SQL Database. Powinna być ona unikatowa w obrębie platformy Azure.

1) Konfigurowanie usługi Azure SQL Database

1.1) Włączanie uwierzytelniania opartego na identyfikatorze Entra firmy Microsoft

Aby użyć dostępu do identyfikatora Entra firmy Microsoft w usłudze Azure SQL Database, należy najpierw ustawić użytkownika administratora firmy Microsoft Entra. Tylko użytkownik firmy Microsoft Entra Administracja może tworzyć/włączać użytkowników na potrzeby uwierzytelniania opartego na identyfikatorze Entra firmy Microsoft.

Jeśli używasz interfejsu wiersza polecenia platformy Azure, uruchom następujące polecenie, aby upewnić się, że ma wystarczające uprawnienia:

az login --scope https://graph.microsoft.com/.default

Następnie uruchom następujące polecenie, aby ustawić administratora firmy Microsoft Entra:

az sql server ad-admin create \
    --resource-group $AZ_RESOURCE_GROUP \
    --server $AZ_DATABASE_SERVER_NAME \
    --display-name $CURRENT_USERNAME \
    --object-id $CURRENT_USER_OBJECTID

To polecenie spowoduje ustawienie administratora firmy Microsoft Entra na bieżącego zalogowanego użytkownika.

Uwaga

Można utworzyć tylko jednego administratora usługi Microsoft Entra na serwer usługi Azure SQL Database. Wybór innego spowoduje zastąpienie istniejącego administratora firmy Microsoft entra skonfigurowanego dla serwera.

2) Migrowanie kodu aplikacji w celu korzystania z połączeń bez hasła

Następnie wykonaj następujące kroki, aby zaktualizować kod w celu używania połączeń bez hasła. Chociaż koncepcyjnie podobne, każdy język używa różnych szczegółów implementacji.

  1. W projekcie dodaj następujące odwołanie do azure-identity pakietu. Ta biblioteka zawiera wszystkie jednostki niezbędne do zaimplementowania połączeń bez hasła.

    <dependency>
         <groupId>com.azure</groupId>
         <artifactId>azure-identity</artifactId>
         <version>1.5.4</version>
    </dependency>
    
  2. Włącz uwierzytelnianie tożsamości zarządzanej firmy Microsoft w adresie URL JDBC.v Zidentyfikuj lokalizacje w kodzie, które obecnie tworzą element java.sql.Connection , aby nawiązać połączenie z usługą Azure SQL Database. Zaktualizuj kod, aby był zgodny z następującym przykładem:

    String url = "jdbc:sqlserver://$AZ_DATABASE_SERVER_NAME.database.windows.net:1433;databaseName=$AZ_DATABASE_NAME;authentication=ActiveDirectoryMSI;"   
    Connection con = DriverManager.getConnection(url);
    
  3. Zastąp dwie $AZ_DATABASE_SERVER_NAME zmienne i jedną $AZ_DATABASE_NAME zmienną wartościami skonfigurowanymi na początku tego artykułu.

  4. Usuń element user i password z adresu URL JDBC.

3) Konfigurowanie środowiska hostingu platformy Azure

Po skonfigurowaniu aplikacji do korzystania z połączeń bez hasła 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 przypisaną tożsamością zarządzaną może łączyć się z usługą Azure Storage.

W tej sekcji wykonasz dwa kroki, aby umożliwić uruchamianie aplikacji w środowisku hostingu platformy Azure w sposób bez hasła:

  • Przypisz tożsamość zarządzaną dla środowiska hostingu platformy Azure.
  • Przypisz role do tożsamości zarządzanej.

Uwaga

Platforma Azure udostępnia również usługę service Połączenie or, która może pomóc w połączeniu usługi hostingowej z programem SQL Server. Za pomocą Połączenie usługi w celu skonfigurowania środowiska hostingu można pominąć krok przypisywania ról do tożsamości zarządzanej, ponieważ usługa Połączenie or zrobi to za Ciebie. W poniższej sekcji opisano sposób konfigurowania środowiska hostingu platformy Azure na dwa sposoby: jeden za pośrednictwem usługi Połączenie or i drugi przez bezpośrednie skonfigurowanie każdego środowiska hostingu.

Ważne

Polecenia usługi Połączenie or wymagają interfejsu wiersza polecenia platformy Azure w wersji 2.41.0 lub nowszej.

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

W poniższych krokach pokazano, jak przypisać 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.

  1. Na stronie głównej przeglądu wystąpienia usługi aplikacja systemu Azure wybierz pozycję Tożsamość w okienku nawigacji.

  2. Na karcie Przypisane przez system upewnij się, że pole Stan ma wartość włączone. Tożsamość przypisana przez system jest zarządzana przez platformę Azure wewnętrznie i obsługuje zadania administracyjne. Szczegóły i identyfikatory tożsamości nigdy nie są ujawniane w kodzie.

    Screenshot of Azure portal Identity page of App Service resource with System assigned tab showing and Status field highlighted.

Tożsamość zarządzaną można również przypisać w środowisku hostingu platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

Tożsamość zarządzaną można przypisać do wystąpienia usługi aplikacja systemu Azure za pomocą polecenia az webapp identity assign, jak pokazano w poniższym przykładzie:

export AZ_MI_OBJECT_ID=$(az webapp identity assign \
    --resource-group $AZ_RESOURCE_GROUP \
    --name <service-instance-name> \
    --query principalId \
    --output tsv)

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

Następnie przyznaj uprawnienia do tożsamości zarządzanej utworzonej w celu uzyskania dostępu do bazy danych SQL.

Jeśli usługi zostały połączone przy użyciu usługi service Połączenie or, polecenia poprzedniego kroku już przypisano rolę, aby pominąć ten krok.

Testowanie aplikacji

Po wprowadzeniu tych zmian w kodzie możesz skompilować i ponownie wdrożyć aplikację. Następnie przejdź do aplikacji hostowanej w przeglądarce. Aplikacja powinna mieć możliwość pomyślnego nawiązania połączenia z bazą danych Azure SQL Database. 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.

Aby zapoznać się z pojęciami omówionymi w tym artykule, zapoznaj się z następującymi zasobami: