Freigeben über


Migrieren einer Anwendung zur Verwendung kennwortloser Verbindungen mit Azure Service Bus

Anwendungsanforderungen an Azure Service Bus müssen mithilfe von Kontozugriffsschlüsseln oder kennwortlosen Verbindungen authentifiziert werden. Sie sollten jedoch kennwortlose Verbindungen in Ihren Anwendungen priorisieren, wenn möglich. In diesem Tutorial wird erläutert, wie Sie von herkömmlichen Authentifizierungsmethoden zu sichereren, kennwortlosen Verbindungen migrieren.

Sicherheitsrisiken im Zusammenhang mit Zugriffsschlüsseln

Das folgende Codebeispiel zeigt, wie Sie mithilfe einer Verbindungszeichenfolge, die einen Zugriffsschlüssel enthält, eine Verbindung mit Azure Service Bus herstellen. Wenn Sie eine Service Bus-Instanz erstellen, generiert Azure diese Schlüssel und Verbindungszeichenfolgen automatisch. Viele Entwickler neigen zu dieser Lösung, weil sie in der Vergangenheit bereits mit ähnlichen Optionen gearbeitet haben. Wenn Ihre Anwendung derzeit Verbindungszeichenfolgen verwendet, sollten Sie die Migration zu kennwortlosen Verbindungen anhand der in diesem Dokument beschriebenen Schritte in Betracht ziehen.

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

Verbindungszeichenfolgen sollten mit Bedacht verwendet werden. Entwickler müssen darauf achten, dass die Schlüssel nicht an einem unsicheren Ort offengelegt werden. Jeder Benutzer, der Zugriff auf den Schlüssel erhält, kann sich authentifizieren. Wenn ein Kontoschlüssel beispielsweise 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 diese Berechtigung verfügen sollte, besteht die Gefahr, dass ein böswilliger Benutzer auf die Anwendung zugreifen kann. Erwägen Sie stattdessen, Ihre Anwendung so zu aktualisieren, dass kennwortlose Verbindungen verwendet werden.

Migrieren zu kennwortlosen Verbindungen

Viele Azure-Dienste unterstützen kennwortlose Verbindungen über Microsoft Entra ID und RBAC (Role Based Access Control, rollenbasierte Zugriffssteuerung). Diese Techniken bieten robuste Sicherheitsfunktionen und können mit DefaultAzureCredential aus den Azure Identity-Clientbibliotheken implementiert werden.

Wichtig

Einige Sprachen müssen DefaultAzureCredential explizit in ihrem Code implementieren, während andere Sprachen DefaultAzureCredential intern durch zugrunde liegende Plug-Ins oder Treiber nutzen.

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, an denen DefaultAzureCredential nach Anmeldeinformationen sucht, sind in der Azure Identity-Bibliotheksübersicht zu finden und unterscheiden sich je nach Sprache. Wenn Sie beispielsweise lokal mit .NET arbeiten, führt DefaultAzureCredential im Allgemeinen eine Authentifizierung mit dem Konto durch, das der Entwickler für die Anmeldung bei Visual Studio, Azure CLI oder Azure PowerShell verwendet hat. Wenn die App in Azure bereitgestellt wird, ermittelt und verwendet DefaultAzureCredential automatisch die verwaltete Identität des zugeordneten Hostingdiensts, z. B. Azure App Service. Für diesen Übergang sind keine Änderungen am Code erforderlich.

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.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie sich über kennwortlose Verbindungen mit Service Bus verbinden. Im nächsten Abschnitt wird ausführlicher beschrieben, wie Sie für einen bestimmten Dienst zu diesem Setup migrieren.

Eine .NET-Anwendung kann eine Instanz von DefaultAzureCredential an den Konstruktor einer Dienstclientklasse übergeben. DefaultAzureCredential erkennt automatisch die Anmeldeinformationen, die in dieser Umgebung verfügbar sind.

client = new ServiceBusClient(
    "<NAMESPACE-NAME>.servicebus.windows.net",
    new DefaultAzureCredential());

Schritte zum Migrieren einer App zur Verwendung von kennwortloser Authentifizierung

In den folgenden Schritten wird erläutert, wie Sie eine vorhandene Anwendung migrieren, um kennwortlose Verbindungen anstelle einer schlüsselbasierten Lösung zu verwenden. Sie konfigurieren zunächst eine lokale Entwicklungsumgebung und wenden diese Konzepte dann auf eine Azure App-Hostingumgebung an. Die gleichen Migrationsschritte gelten auch für die direkte Verwendung von Zugriffsschlüsseln oder für die Verwendung von Verbindungszeichenfolgen.

Konfigurieren von Rollen und Benutzern für Authentifizierung bei lokaler Entwicklung

Stellen Sie bei der lokalen Entwicklung sicher, dass das Benutzerkonto für den Zugriff auf Service Bus über die richtigen Berechtigungen verfügt. In diesem Beispiel verwenden Sie die Rolle Azure Service Bus-Datenbesitzer, um Daten zu senden und zu empfangen, aber es stehen auch differenziertere Rollen zur Verfügung. Um sich selbst diese Rolle zuweisen zu können, benötigen Sie die Rolle Benutzerzugriffsadministrator oder eine andere Rolle, die die Aktion Microsoft.Authorization/roleAssignments/write enthält. Sie können einem Benutzer Azure RBAC-Rollen über das Azure-Portal, die Azure CLI oder mit Azure PowerShell zuweisen. Weitere Informationen zu den verfügbaren Bereichen für Rollenzuweisungen finden Sie auf der Seite Bereichsübersicht.

In diesem Szenario weisen Sie Ihrem Benutzerkonto Berechtigungen für einen bestimmten Service Bus-Namespace zu, um das Prinzip der geringsten Rechte zu befolgen. Auf diese Weise erhalten Benutzer nur die erforderlichen Mindestberechtigungen, und es entstehen sicherere Produktionsumgebungen.

Im folgenden Beispiel wird Ihrem Benutzerkonto die Rolle Azure Service Bus-Datenbesitzer zugewiesen, mit der Sie Daten senden und empfangen können.

Wichtig

In den meisten Fällen dauert es eine oder zwei Minute(n), bis die Rollenzuweisung in Azure weitergegeben wird. In seltenen Fällen kann es aber bis zu acht Minuten dauern. Wenn bei der ersten Ausführung Ihres Codes Authentifizierungsfehler auftreten, warten Sie einige Momente, und versuchen Sie es dann erneut.

  1. Navigieren Sie im Azure-Portal zu Ihrem Service Bus-Namespace. Verwenden Sie dazu entweder die Hauptsuchleiste oder die linke Navigationsleiste.

  2. Wählen Sie auf der Übersichtsseite für Service Bus im linken Menü die Option Zugriffssteuerung (IAM) aus.

  3. Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Registerkarte Rollenzuweisungen aus.

  4. Wählen Sie im oberen Menü + Hinzufügen und aus dem dann angezeigten Dropdownmenü die Option Rollenzuweisung hinzufügen aus.

    Ein Screenshot zeigt, wie eine Rolle zugewiesen wird.

  5. Über das Suchfeld können Sie die Ergebnisse für die gewünschte Rolle filtern. Suchen Sie für dieses Beispiel nach Azure Service Bus-Datenbesitzer, wählen Sie das entsprechende Ergebnis und dann Weiter aus.

  6. Wählen Sie unter Zugriff zuweisen zu die Option Benutzer, Gruppe oder Dienstprinzipal und dann die Option + Mitglieder auswählen aus.

  7. Suchen Sie im Dialogfeld nach Ihrem Microsoft Entra-Benutzernamen (normalerweise Ihre E-Mail-Adresse benutzer@domäne), und wählen Sie unten im Dialogfeld Auswählen aus.

  8. Wählen Sie Überprüfen und zuweisen aus, um zur letzten Seite zu gelangen, und wählen Sie erneut Überprüfen und zuweisen aus, um den Vorgang abzuschließen.

Anmelden und Migrieren des App-Codes zur Verwendung kennwortloser Verbindungen

Stellen Sie für die lokale Entwicklung sicher, dass Sie mit demselben Microsoft Entra-Konto authentifiziert sind, dem Sie die Rolle für den Service Bus-Namespace zugewiesen haben. Sie können sich über die Azure CLI, Visual Studio, Azure PowerShell oder andere Tools wie IntelliJ authentifizieren.

Stellen Sie für die lokale Entwicklung sicher, dass Sie mit demselben Microsoft Entra-Konto authentifiziert sind, dem Sie die Rolle zugewiesen haben. Sie können sich über gängige Entwicklungstools wie die Azure-Befehlszeilenschnittstelle (CLI) oder Azure PowerShell authentifizieren. Die Entwicklungstools, mit denen Sie sich authentifizieren können, variieren je nach Sprache.

Melden Sie sich mit dem folgenden Befehl über die Azure-Befehlszeilenschnittstelle bei Azure an:

az login

Als Nächstes aktualisieren Sie Ihren, um kennwortlose Verbindungen zu verwenden.

  1. Um in einer .NET-Anwendung DefaultAzureCredential zu verwenden, installieren Sie das Azure.Identity-Paket:

    dotnet add package Azure.Identity
    
  2. Fügen Sie am Anfang der Datei den folgenden Code hinzu:

    using Azure.Identity;
    
  3. Ermitteln Sie den Code, der ein ServiceBusClient-Objekt zur Verbindungsherstellung mit Azure Service Bus erstellt. Aktualisieren Sie Ihren Code wie im folgenden Beispiel gezeigt:

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

Lokales Ausführen der App

Führen Sie die Anwendung lokal aus, nachdem Sie diese Codeänderungen vorgenommen haben. Die neue Konfiguration sollte Ihre lokalen Anmeldeinformationen abrufen, z. B. mit der Azure CLI, mit Visual Studio oder IntelliJ. Die Rollen, die Sie Ihrem lokalen Entwicklerbenutzer in Azure zugewiesen haben, ermöglichen es Ihrer App, eine lokale Verbindung mit dem Azure-Dienst herzustellen.

Konfigurieren der Azure-Hostingumgebung

Sobald Ihre Anwendung für die Verwendung kennwortloser Verbindungen konfiguriert ist und lokal ausgeführt wird, kann sich derselbe Code nach der Bereitstellung in Azure bei Azure-Diensten authentifizieren. Beispielsweise kann eine Anwendung, die in einer Azure App Service-Instanz bereitgestellt wird, für die eine verwaltete Identität aktiviert ist, eine Verbindung mit Azure Service Bus herstellen.

Erstellen der verwalteten Identität mithilfe des Azure-Portals

Die folgenden Schritte zeigen, wie Sie eine systemseitig zugewiesene verwaltete Identität für verschiedene Webhostingdienste erstellen. Die verwaltete Identität kann mithilfe der zuvor eingerichteten App-Konfigurationen auf sichere Weise eine Verbindung mit anderen Azure-Diensten herstellen.

Einige App-Hostingumgebungen unterstützen den Dienstconnector, mit dem Sie Azure-Computedienste mit anderen Sicherungsdiensten verbinden können. Der Dienstconnector konfiguriert automatisch Netzwerkeinstellungen und Verbindungsinformationen. Weitere Informationen zum Dienstconnector und zu den unterstützten Szenarien finden Sie aufder Übersichtsseite.

Die folgenden Computedienste werden derzeit unterstützt:

  • Azure App Service
  • Azure Spring Cloud
  • Azure Container Apps (Vorschau)

Im Rahmen dieses Migrationsleitfadens verwenden Sie App Service, aber die Schritte für Azure Spring Apps und Azure Container Apps sind ähnlich.

Hinweis

Azure Spring Apps unterstützt derzeit nur den Dienstconnector mit Verbindungszeichenfolgen.

  1. Wählen Sie auf der Hauptübersichtsseite Ihrer App Service-Instanz den Dienstconnector auf der linken Navigationsleiste aus.

  2. Wählen Sie im oberen Menü + Erstellen aus. Der Bereich Verbindung erstellen wird geöffnet. Geben Sie die folgenden Werte ein:

    • Diensttyp: Wählen Sie Service Bus aus.
    • Abonnement: Wählen Sie das Abonnement aus, das Sie verwenden möchten.
    • Verbindungsname: Geben Sie einen Namen für Ihre Verbindung ein, z. B. connector_appservice_servicebus.
    • Clienttyp: Lassen Sie den Standardwert ausgewählt, oder wählen Sie den jeweiligen Client aus, den Sie verwenden möchten.

    Wählen Sie Weiter: Authentifizierung aus.

  3. Stellen Sie sicher, dass Systemseitig zugewiesene verwaltete Identität (empfohlen) ausgewählt ist, und wählen Sie dann Weiter: Netzwerk aus.

  4. Lassen Sie die Standardwerte ausgewählt, und wählen Sie dann Weiter: Überprüfen und erstellen aus.

  5. Nachdem Azure Ihre Einstellungen überprüft hat, wählen Sie Erstellen aus.

Der Dienstconnector erstellt automatisch eine systemseitig zugewiesene verwaltete Identität für den App-Dienst. Der Connector weist der verwalteten Identität außerdem die Rolle Azure Service Bus-Datenbesitzer für die ausgewählte Service Bus-Instanz zu.

Alternativ können Sie eine verwaltete Identität für eine Azure-Hostingumgebung auch über die Azure CLI aktivieren.

Sie können den Dienstconnector verwenden, um eine Verbindung zwischen einer Azure-Computehostingumgebung und einem Zieldienst mithilfe der Azure CLI herzustellen. Die CLI verarbeitet automatisch das Erstellen einer verwalteten Identität und weist die richtige Rolle zu, wie in den Portalanweisungen erläutert.

Wenn Sie eine Azure App Service-Instanz nutzen, verwenden Sie den az webapp connection-Befehl:

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

Wenn Sie Azure Spring Apps nutzen, verwenden Sie den az spring connection-Befehl:

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

Wenn Sie Azure Container Apps nutzen, verwenden Sie den az containerapp connection-Befehl:

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

Zuweisen einer Rolle zur verwalteten Identität

Als Nächstes müssen Sie der verwalteten Identität, die Sie für den Service Bus-Zugriff erstellt haben, Berechtigungen erteilen. Sie können der verwalteten Identität zu diesem Zweck eine Rolle zuweisen, genau wie bei Ihrem lokalen Entwicklungsbenutzer.

Wenn Sie Ihre Dienste mit dem Dienstconnector verbunden haben, müssen Sie diesen Schritt nicht ausführen. Die erforderlichen Konfigurationen wurden für Sie ausgeführt:

  • Wenn Sie beim Erstellen der Verbindung eine verwaltete Identität ausgewählt haben, wurde eine systemseitig zugewiesene verwaltete Identität für Ihre App erstellt und dieser die Rolle Azure Service Bus-Datenbesitzer für die Service Bus-Instanz zugewiesen.

  • Wenn Sie Verbindungszeichenfolgenoption ausgewählt haben, wurde die Verbindungszeichenfolge als App-Umgebungsvariable hinzugefügt.

Testen der App

Nachdem Sie diese Codeänderungen vorgenommen haben, navigieren Sie im Browser zu Ihrer gehosteten Anwendung. Ihre App sollte die Verbindung mit der Service Bus-Instanz erfolgreich 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.