Freigeben über


Migrieren einer Java-Anwendung zur Verwendung von kennwortlosen Verbindungen mit Azure SQL-Datenbank

In diesem Artikel wird erläutert, wie Sie von herkömmlichen Authentifizierungsmethoden zu sichereren, kennwortlosen Verbindungen mit Azure SQL-Datenbank migrieren.

Anwendungsanforderungen an Azure SQL-Datenbank müssen authentifiziert werden. Azure SQL-Datenbank bietet verschiedene Möglichkeiten, wie Apps eine sichere Verbindung herstellen können. Eine der Möglichkeiten besteht darin, Kennwörter zu verwenden. Sie sollten jedoch kennwortlose Verbindungen in Ihren Anwendungen priorisieren, wenn möglich.

Vergleichen von Authentifizierungsoptionen

Wenn sich die Anwendung bei Azure SQL-Datenbank authentifiziert, stellt sie ein Benutzernamen- und Kennwortpaar bereit, um eine Verbindung mit der Datenbank herzustellen. Je nachdem, wo die Identitäten gespeichert sind, gibt es zwei Authentifizierungstypen: Microsoft Entra-Authentifizierung und Azure SQL-Datenbank Authentifizierung.

Microsoft Entra-Authentifizierung

Die Microsoft Entra-Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit Azure SQL-Datenbank mithilfe von In Microsoft Entra ID definierten Identitäten. Mit der Microsoft Entra-Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.

Die Verwendung der Microsoft Entra-ID für die Authentifizierung bietet die folgenden Vorteile:

  • Authentifizierung von Benutzern über Azure Services hinweg auf einheitliche Weise.
  • Verwaltung von Kennwortrichtlinien und Kennwortrotation an einem zentralen Ort.
  • Mehrere Von Microsoft Entra ID unterstützte Authentifizierungsformen, die die Notwendigkeit zum Speichern von Kennwörtern vermeiden können.
  • Kunden können Datenbankberechtigungen mithilfe externer Gruppen (Microsoft Entra ID) verwalten.
  • Die Microsoft Entra-Authentifizierung verwendet Azure SQL-Datenbankbenutzer, um Identitäten auf Datenbankebene zu authentifizieren.
  • Unterstützung der tokenbasierten Authentifizierung für Anwendungen, die eine Verbindung mit Azure SQL-Datenbank herstellen.

Authentifizierung für Azure SQL-Datenbank

Sie können Konten in Azure SQL-Datenbank erstellen. Wenn Sie Kennwörter als Anmeldeinformationen für die Konten verwenden möchten, werden diese Anmeldeinformationen in der sys.database_principals-Tabelle gespeichert. Da diese Kennwörter in Azure SQL-Datenbank gespeichert sind, müssen Sie die Drehung der Kennwörter selbst verwalten.

Obwohl es möglich ist, eine Verbindung mit Azure SQL-Datenbank mit Kennwörtern herzustellen, sollten Sie sie mit Vorsicht verwenden. Sie müssen fleißig sein, die Kennwörter niemals an einem unsicheren Speicherort verfügbar zu machen. Jeder, der Zugriff auf die Kennwörter erhält, kann sich authentifizieren. So besteht beispielsweise das Risiko, dass ein böswilliger Benutzer auf die Anwendung zugreifen kann, wenn ein Verbindungszeichenfolge versehentlich in die Quellcodeverwaltung eingecheckt, über eine unsichere E-Mail gesendet, in den falschen Chat eingefügt oder von jemandem angezeigt wird, der nicht über die Berechtigung verfügen sollte. Erwägen Sie stattdessen, Ihre Anwendung so zu aktualisieren, dass kennwortlose Verbindungen verwendet werden.

Einführung kennwortloser Verbindungen

Mit einer kennwortlosen Verbindung können Sie eine Verbindung mit Azure-Diensten herstellen, ohne Anmeldeinformationen im Anwendungscode, den zugehörigen Konfigurationsdateien oder in Umgebungsvariablen zu speichern.

Viele Azure-Dienste unterstützen kennwortlose Verbindungen, z. B. über Azure Managed Identity. Diese Techniken bieten robuste Sicherheitsfeatures, die Sie mithilfe von DefaultAzureCredential aus den Azure Identity-Clientbibliotheken implementieren können. In diesem Lernprogramm erfahren Sie, wie Sie eine vorhandene Anwendung aktualisieren, um sie anstelle von Alternativen wie Verbindungszeichenfolge zu verwendenDefaultAzureCredential.

DefaultAzureCredential unterstützt mehrere Authentifizierungsmethoden und bestimmt automatisch, welche Methode zur Laufzeit verwendet werden soll. Mit diesem Ansatz kann Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen (lokale Entwicklung gegenüber Produktion) verwenden, ohne umgebungsspezifischen Code zu implementieren.

Die Reihenfolge und Die Speicherorte, in denen nach Anmeldeinformationen gesucht wird, DefaultAzureCredential finden Sie in der Übersicht über die Azure Identity-Bibliothek. Wenn Sie beispielsweise lokal arbeiten, authentifiziert sich der Entwickler in der Regel mithilfe des Kontos, DefaultAzureCredential das der Entwickler für die Anmeldung bei Visual Studio verwendet hat. Wenn die App in Azure bereitgestellt wird, wechselt DefaultAzureCredential automatisch zur Verwendung einer verwalteten Identität. Für diesen Übergang sind keine Änderungen am Code erforderlich.

Um sicherzustellen, dass Verbindungen kennwortlos sind, müssen Sie sowohl die lokale Entwicklung als auch die Produktionsumgebung berücksichtigen. Wenn an beiden Stellen ein Verbindungszeichenfolge erforderlich ist, ist die Anwendung nicht kennwortlos.

In Ihrer lokalen Entwicklungsumgebung können Sie sich mit Azure CLI, Azure PowerShell, Visual Studio oder Azure-Plug-Ins für Visual Studio Code oder IntelliJ authentifizieren. In diesem Fall können Sie diese Anmeldeinformationen in Ihrer Anwendung verwenden, anstatt Eigenschaften zu konfigurieren.

Wenn Sie Anwendungen in einer Azure-Hostingumgebung bereitstellen, z. B. einem virtuellen Computer, können Sie verwaltete Identitäten in dieser Umgebung zuweisen. Anschließend müssen Sie keine Anmeldeinformationen angeben, um eine Verbindung mit Azure-Diensten herzustellen.

Hinweis

Eine verwaltete Identität bietet eine Sicherheitsidentität zur Darstellung einer App oder eines Diensts. Da die Identität von der Azure-Plattform verwaltet wird, müssen Sie keine Geheimnisse bereitstellen oder rotieren. Weitere Informationen zu verwalteten Identitäten finden Sie in der Übersichtsdokumentation.

Hinweis

Da der VORGANGstreiber für Azure SQL-Datenbank noch keine kennwortlosen Verbindungen aus lokalen Umgebungen unterstützt, konzentriert sich dieser Artikel nur auf Anwendungen, die in Azure-Hostingumgebungen bereitgestellt werden, und wie sie migriert werden, um kennwortlose Verbindungen zu verwenden.

Migrieren einer vorhandenen Anwendung zur Verwendung kennwortloser Verbindungen

In den folgenden Schritten wird erläutert, wie Sie eine vorhandene Anwendung migrieren, um kennwortlose Verbindungen anstelle einer kennwortbasierten Lösung zu verwenden.

0) Vorbereiten der Arbeitsumgebung

Richten Sie zunächst mithilfe des folgenden Befehls einige Umgebungsvariablen ein.

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)

Ersetzen Sie die Platzhalter durch die folgenden Werte, die in diesem Artikel verwendet werden:

  • <YOUR_RESOURCE_GROUP>: Der Name der Ressourcengruppe, in der sich Die Ressourcen befinden.
  • <YOUR_DATABASE_SERVER_NAME>: Der Name für den Azure SQL-Datenbank-Server. Er muss innerhalb von Azure eindeutig sein.

1) Konfigurieren von Azure SQL-Datenbank

1.1) Aktivieren der microsoft Entra ID-basierten Authentifizierung

Um den Zugriff auf Microsoft Entra-ID mit Azure SQL-Datenbank zu verwenden, sollten Sie zuerst den Microsoft Entra-Administratorbenutzer festlegen. Nur Microsoft Entra-Administratorbenutzer können Benutzer für die Microsoft Entra ID-basierte Authentifizierung erstellen/aktivieren.

Wenn Sie die Azure CLI verwenden, führen Sie den folgenden Befehl aus, um sicherzustellen, dass sie über ausreichende Berechtigungen verfügt:

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

Führen Sie dann den folgenden Befehl aus, um den Microsoft Entra-Administrator festzulegen:

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

Mit diesem Befehl wird der Microsoft Entra-Administrator auf den aktuellen angemeldeten Benutzer festgelegt.

Hinweis

Sie können nur einen Microsoft Entra-Administrator pro Azure SQL-Datenbank Server erstellen. Die Auswahl eines anderen Kontos überschreibt den vorhandenen Microsoft Entra-Administrator, der für den Server konfiguriert ist.

2) Migrieren des App-Codes zur Verwendung kennwortloser Verbindungen

Führen Sie als Nächstes die folgenden Schritte aus, um Ihren Code so zu aktualisieren, dass kennwortlose Verbindungen verwendet werden. Obwohl konzeptionell ähnlich, verwendet jede Sprache unterschiedliche Implementierungsdetails.

  1. Fügen Sie in Ihrem Projekt den folgenden Verweis auf das azure-identity Paket hinzu. Diese Bibliothek enthält alle Entitäten, die zum Implementieren kennwortloser Verbindungen erforderlich sind.

    <dependency>
         <groupId>com.azure</groupId>
         <artifactId>azure-identity</artifactId>
         <version>1.5.4</version>
    </dependency>
    
  2. Aktivieren Sie die von Microsoft Entra verwaltete Identitätsauthentifizierung in der URL.v IDENTIFIZIEREN Sie die Speicherorte in Ihrem Code, die derzeit eine java.sql.Connection Verbindung mit Azure SQL-Datenbank erstellen. Aktualisieren Sie Ihren Code wie im folgenden Beispiel gezeigt:

    String url = "jdbc:sqlserver://$AZ_DATABASE_SERVER_NAME.database.windows.net:1433;databaseName=$AZ_DATABASE_NAME;authentication=ActiveDirectoryMSI;"   
    Connection con = DriverManager.getConnection(url);
    
  3. Ersetzen Sie die beiden $AZ_DATABASE_SERVER_NAME Variablen und eine $AZ_DATABASE_NAME Variable durch die Werte, die Sie am Anfang dieses Artikels konfiguriert haben.

  4. Entfernen Sie die user UND password aus der URL DES VORGANGS.

3) Konfigurieren der Azure-Hostingumgebung

Nachdem Ihre Anwendung für die Verwendung kennwortloser Verbindungen konfiguriert ist, kann sich derselbe Code bei Azure-Diensten authentifizieren, nachdem sie in Azure bereitgestellt wurde. Beispielsweise kann eine Anwendung, die in einer Azure-App Dienstinstanz bereitgestellt wird, die über eine verwaltete Identität verfügt, eine Verbindung mit Azure Storage herstellen.

In diesem Abschnitt führen Sie zwei Schritte aus, um die Ausführung Ihrer Anwendung in einer Azure-Hostingumgebung auf kennwortlose Weise zu ermöglichen:

  • Weisen Sie die verwaltete Identität für Ihre Azure-Hostingumgebung zu.
  • Weisen Sie der verwalteten Identität Rollen zu.

Hinweis

Azure stellt auch Service Connector bereit, der Ihnen dabei helfen kann, Ihren Hostingdienst mit SQL Server zu verbinden. Mit Service Connector zum Konfigurieren Ihrer Hostingumgebung können Sie den Schritt zum Zuweisen von Rollen zu Ihrer verwalteten Identität weglassen, da Service Connector dies für Sie tut. Im folgenden Abschnitt wird beschrieben, wie Sie Ihre Azure-Hostingumgebung auf zwei Arten konfigurieren: eine über Service Connector und die andere, indem Sie jede Hostingumgebung direkt konfigurieren.

Wichtig

Die Befehle von Service Connector erfordern Azure CLI 2.41.0 oder höher.

Zuweisen der verwalteten Identität mithilfe der Azure-Portal

Die folgenden Schritte zeigen, wie Sie eine vom System zugewiesene verwaltete Identität für verschiedene Webhostingdienste zuweisen. Die verwaltete Identität kann mithilfe der zuvor eingerichteten App-Konfigurationen sicher eine Verbindung mit anderen Azure-Diensten herstellen.

  1. Wählen Sie auf der Hauptübersichtsseite Ihrer Azure-App Dienstinstanz die Option "Identität" im Navigationsbereich aus.

  2. Stellen Sie auf der Registerkarte "System zugewiesen" sicher, dass das Feld "Status" aktiviert ist. Eine systemseitig zugewiesene Identität wird von Azure intern verwaltet und führt administrative Aufgaben für Sie aus. Die Details und IDs der Identität werden in Ihrem Code nie offengelegt.

Sie können auch verwaltete Identitäten in einer Azure-Hostingumgebung mithilfe der Azure CLI zuweisen.

Sie können einer Azure-App Dienstinstanz eine verwaltete Identität mit dem Befehl az webapp identity assign zuweisen, wie im folgenden Beispiel gezeigt:

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

Zuweisen einer Rolle zur verwalteten Identität

Erteilen Sie als Nächstes Berechtigungen für die verwaltete Identität, die Sie erstellt haben, um auf Ihre SQL-Datenbank zuzugreifen.

Wenn Sie Ihre Dienste mit Service Connector verbunden haben, haben ihnen die Befehle des vorherigen Schritts bereits die Rolle zugewiesen, sodass Sie diesen Schritt überspringen können.

Testen der App

Nachdem Sie diese Codeänderungen vorgenommen haben, können Sie die Anwendung erstellen und erneut bereitstellen. Navigieren Sie dann im Browser zu Ihrer gehosteten Anwendung. Ihre App sollte eine erfolgreiche Verbindung mit der Azure SQL-Datenbank herstellen können. Denken Sie daran, dass es einige Minuten dauern kann, bis die Rollenzuweisungen in der Azure-Umgebung weitergegeben werden. Ihre Anwendung ist jetzt so konfiguriert, dass sie lokal und in einer Produktionsumgebung ausgeführt werden kann, ohne dass die Entwickler Geheimnisse in der Anwendung selbst verwalten müssen.

Nächste Schritte

In diesem Tutorial haben Sie gelernt, wie Sie eine Anwendung zu kennwortlosen Verbindungen migrieren.

Sie können die folgenden Ressourcen lesen, um die in diesem Artikel erläuterten Konzepte ausführlicher zu erkunden: