Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 Microsoft Entra to mechanizm służący do nawiązywania połączenia z usługą Azure SQL Database przy użyciu tożsamości zdefiniowanych w usłudze Microsoft Entra ID. Korzystając z uwierzytelniania 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 Microsoft Entra wykorzystuje 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, sys.database_principals tabela przechowuje te poświadczenia. Ponieważ Azure SQL Database przechowuje te hasła, musisz samodzielnie zarządzać rotacją haseł.
Mimo że można nawiązać połączenie z Azure SQL Database przy użyciu haseł, należy ich używać ostrożnie. Zadbaj o to, aby nigdy nie ujawniać haseł w niezabezpieczonym miejscu. Każdy, kto uzyskuje dostęp do haseł, może się uwierzytelnić. Jeśli na przykład przypadkowo zapiszesz parametry połączenia w systemie kontroli wersji, wyślesz je w niezabezpieczonej wiadomości e-mail, wkleisz je do niewłaściwego czatu albo zobaczy je osoba, która nie powinna mieć do nich uprawnień, złośliwy użytkownik może uzyskać dostęp do aplikacji. Zamiast tego rozważ zaktualizowanie aplikacji w celu korzystania z połączeń bez hasła.
Przedstawiamy połączenia 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ą solidne mechanizmy zabezpieczeń, które można wdrożyć przy użyciu DefaultAzureCredential z bibliotek klienckich Azure Identity. W tym samouczku dowiesz się, jak zaktualizować istniejącą aplikację, aby używała DefaultAzureCredential zamiast rozwiązań alternatywnych, takich jak ciągi 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 wyszukuje poświadczenia, można znaleźć w omówieniu biblioteki Azure Identity. 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 są wymagane 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 / Notatka
Tożsamość zarządzana udostępnia tożsamość zabezpieczającą służącą do reprezentowania aplikacji lub usługi. Tożsamość jest zarządzana przez platformę Azure i nie wymaga od Ciebie tworzenia ani rotacji kluczy tajnych. Więcej informacji o tożsamościach zarządzanych można znaleźć w dokumentacji Omówienie.
Uwaga / Notatka
Ponieważ sterownik JDBC dla 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 Azure i sposobie ich migracji w celu 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 dla Twoich zasobów. -
<YOUR_DATABASE_SERVER_NAME>: nazwa serwera usługi Azure SQL Database. Powinna być unikatowa na platformie Azure.
1) Konfigurowanie usługi Azure SQL Database
1.1) Włączanie uwierzytelniania opartego na identyfikatorze Entra firmy Microsoft
Aby używać dostępu do Azure SQL Database przy użyciu identyfikatora Microsoft Entra ID, najpierw skonfiguruj administratora Microsoft Entra. Tylko administrator Microsoft Entra może tworzyć lub włączać użytkowników na potrzeby uwierzytelniania opartego na Microsoft Entra ID.
Jeśli używasz Azure CLI, 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 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 ustawia administratora Microsoft Entra jako obecnie zalogowanego użytkownika.
Uwaga / Notatka
Można utworzyć tylko jednego administratora usługi Microsoft Entra na serwer usługi Azure SQL Database. Wybranie innego administratora zastępuje istniejący administrator Microsoft Entra skonfigurowany 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.
W projekcie dodaj następujące odwołanie do
azure-identitypakietu. 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>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);Zastąp dwie
$AZ_DATABASE_SERVER_NAMEzmienne i jedną$AZ_DATABASE_NAMEzmienną wartościami skonfigurowanymi na początku tego artykułu.Usuń element
useripasswordz adresu URL JDBC.
3) Konfigurowanie środowiska hostingu platformy Azure
Po skonfigurowaniu aplikacji do używania połączeń bez hasła ten sam kod może uwierzytelniać się w usługach Azure po wdrożeniu jej w Azure. Na przykład aplikacja wdrożona w wystąpieniu usługi Azure App Service 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 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 / Notatka
Platforma Azure udostępnia również łącznik usług, który może pomóc w połączeniu usługi hostingowej z programem SQL Server. Za pomocą łącznika usługi w celu skonfigurowania środowiska hostingu można pominąć krok przypisywania ról do tożsamości zarządzanej, ponieważ łącznik usługi wykonuje je za Ciebie. W poniższej sekcji opisano sposób konfigurowania środowiska hostingu platformy Azure na dwa sposoby: jeden za pośrednictwem łącznika usługi i drugi przez bezpośrednie skonfigurowanie każdego środowiska hostingu.
Ważne
Polecenia łącznika usług wymagają interfejsu wiersza polecenia platformy Azure w wersji 2.41.0 lub nowszej.
Przypisz tożsamość zarządzaną za pomocą 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 Azure przy użyciu skonfigurowanych wcześniej konfiguracji aplikacji.
Na głównej stronie przeglądu wystąpienia Azure App Service wybierz pozycję Tożsamość w panelu nawigacyjnym.
Na karcie Przypisane przez system upewnij się, że pole Status jest ustawione na Włączone. Tożsamość przypisana przez system jest zarządzana wewnętrznie przez platformę Azure i wykonuje za Ciebie zadania administracyjne. Szczegóły i identyfikatory tożsamości nigdy nie są ujawniane w kodzie.
Tożsamość zarządzaną można również przypisać w środowisku hostingu platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Do wystąpienia usługi Azure App Service można przypisać tożsamość zarządzaną 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 połączono usługi przy użyciu narzędzia Service Connector, polecenia z poprzedniego kroku już przypisały rolę, więc możesz 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. Propagowanie przypisań ról za pośrednictwem środowiska Azure może potrwać kilka minut. Aplikacja jest teraz skonfigurowana tak, aby działała zarówno lokalnie, jak i w środowisku produkcyjnym, bez konieczności zarządzania sekretami przez programistów w samej aplikacji.
Dalsze kroki
W tym samouczku przedstawiono sposób migrowania aplikacji do połączeń bez hasła.
Aby dokładniej zapoznać się z pojęciami omówionymi w tym artykule, zobacz następujące zasoby: