Freigeben über


Authentifizieren von Azure gehosteten JavaScript-Apps für Azure Ressourcen mithilfe einer vom Benutzer zugewiesenen verwalteten Identität

Der empfohlene Ansatz zum Authentifizieren einer Azure gehosteten App für andere Azure Ressourcen ist die Verwendung einer managed Identity. Dieser Ansatz wird für die meisten Azure Dienste unterstützt, einschließlich apps, die auf Azure App Service, Azure Container Apps und Azure Virtual Machines gehostet werden. Erfahren Sie mehr über verschiedene Authentifizierungstechniken und Ansätze auf der Seite "Authentifizierungsübersicht ". In den folgenden Abschnitten erfahren Sie:

  • Grundlegende Konzepte für verwaltete Identitäten
  • So erstellen Sie eine vom Benutzer zugewiesene verwaltete Identität für Ihre App
  • Zuweisen von Rollen zur vom Benutzer zugewiesenen verwalteten Identität
  • So authentifizieren Sie sich mithilfe der vom Benutzer zugewiesenen verwalteten Identität aus Ihrem App-Code

Grundlegende Konzepte für verwaltete Identitäten

Mit einer verwalteten Identität kann Ihre App sicher eine Verbindung mit anderen Azure Ressourcen herstellen, ohne geheime Schlüssel oder andere geheime Anwendungsschlüssel zu verwenden. Intern verfolgt Azure die Identität und zu welchen Ressourcen es eine Verbindung herstellen darf. Azure verwendet diese Informationen, um automatisch Microsoft Entra Token für die App abzurufen, damit sie eine Verbindung mit anderen Azure-Ressourcen herstellen kann.

Es gibt zwei Arten von verwalteten Identitäten, die Sie beim Konfigurieren Ihrer gehosteten App berücksichtigen sollten:

  • System-assigned verwaltete Identitäten werden direkt auf einer Azure-Ressource aktiviert und sind an deren Lebenszyklus gebunden. Wenn die Ressource gelöscht wird, löscht Azure automatisch die Identität für Sie. Vom System zugewiesene Identitäten bieten einen minimalistischen Ansatz für die Verwendung verwalteter Identitäten.
  • User-assigned verwaltete Identitäten werden als eigenständige Azure Ressourcen erstellt und bieten größere Flexibilität und erweiterte Funktionalitäten. Sie eignen sich ideal für Lösungen mit mehreren Azure Ressourcen, die dieselbe Identität und Berechtigungen gemeinsam nutzen müssen. Wenn beispielsweise mehrere virtuelle Computer auf denselben Satz von Azure Ressourcen zugreifen müssen, bietet eine vom Benutzer zugewiesene verwaltete Identität wiederverwendbarkeit und optimierte Verwaltung.

Tipp

Erfahren Sie mehr über das Auswählen und Verwalten von vom System zugewiesenen und vom Benutzer zugewiesenen verwalteten Identitäten im Empfehlungsartikel zu bewährten Methoden für verwaltete Identitäten .

In den folgenden Abschnitten werden die Schritte zum Aktivieren und Verwenden einer vom Benutzer zugewiesenen verwalteten Identität für eine Azure gehostete App beschrieben. Wenn Sie eine vom System zugewiesene verwaltete Identität verwenden müssen, besuchen Sie den Artikel mit vom System zugewiesenen verwalteten Identitäten , um weitere Informationen zu erhalten.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

Vom Benutzer zugewiesene verwaltete Identitäten werden mithilfe des Azure Portals oder der Azure CLI als eigenständige Ressourcen in Ihrem Azure-Abonnement erstellt. Azure CLI Befehle können im Azure Cloud Shell oder auf einer Arbeitsstation ausgeführt werden, auf der Azure CLI installiert ist.

  1. Geben Sie im Azure Portal Managed-Identitäten in der Hauptsuchleiste ein, und wählen Sie das entsprechende Ergebnis unter dem Abschnitt Services aus.

  2. Wählen Sie auf der Seite "Verwaltete Identitäten " +Erstellen aus.

    Screenshot der Seite zum Verwalten von vom Benutzer zugewiesenen verwalteten Identitäten.

  3. Wählen Sie auf der Seite " Vom Benutzer zugewiesene verwaltete Identität erstellen " ein Abonnement, eine Ressourcengruppe und eine Region für die vom Benutzer zugewiesene verwaltete Identität aus, und geben Sie dann einen Namen an.

  4. Wählen Sie "Überprüfen + Erstellen" aus, um Ihre Eingaben zu überprüfen und zu validieren.

    Screenshot des Formulars zum Erstellen einer vom Benutzer zugewiesenen verwalteten Identität.

  5. Wählen Sie "Erstellen" aus, um die vom Benutzer zugewiesene verwaltete Identität zu erstellen.

  6. Nachdem die Identität erstellt wurde, wählen Sie "Zur Ressource wechseln" aus.

  7. Kopieren Sie auf der Seite "Übersicht" der neuen Identität den Client-ID-Wert , der später verwendet werden soll, wenn Sie den Anwendungscode konfigurieren.

Weisen Sie Ihrer App die verwaltete Identität zu

Eine vom Benutzer zugewiesene verwaltete Identität kann einer oder mehreren Azure Ressourcen zugeordnet werden. Alle Ressourcen, die diese Identität verwenden, erhalten die Berechtigungen, die durch die Rollen der Identität vergeben werden.

  1. Navigieren Sie im Azure-Portal zu der Ressource, die Ihren App-Code hostt, z. B. eine Azure App Service- oder Azure Container Apps Instanz.

  2. Erweitern Sie auf der Seite der Ressource "Übersicht""Einstellungen" und wählen Sie "Identität" in der Navigation aus.

  3. Wechseln Sie auf der Seite Identität zur Registerkarte Benutzerzugewiesen.

  4. Wählen Sie + Hinzufügen aus, um den Bereich Benutzerzugeordnete verwaltete Identität hinzufügen zu öffnen.

  5. Verwenden Sie im Bereich "Vom Benutzer zugewiesene verwaltete Identität hinzufügen " das Dropdownmenü "Abonnement ", um die Suchergebnisse nach Ihren Identitäten zu filtern. Verwenden Sie das Suchfeld Benutzer zugewiesene verwaltete Identitäten, um die vom Benutzer zugewiesene verwaltete Identität zu finden, die Sie für die Azure Ressource aktiviert haben, die Ihre App hosten soll.

  6. Wählen Sie die Identität aus, und wählen Sie "Hinzufügen" am unteren Rand des Bereichs aus, um den Vorgang fortzusetzen.

    Screenshot, der zeigt, wie eine vom Benutzer zugewiesene verwaltete Identität einer App zugeordnet wird.

Rollen an die verwaltete Identität zuweisen

Ermitteln Sie als Nächstes, welche Rollen Ihre App benötigt, und weisen Sie diese Rollen der verwalteten Identität zu. Sie können einer verwalteten Identität rollen in den folgenden Bereichen zuweisen:

  • Ressource: Die zugewiesenen Rollen gelten nur für diese bestimmte Ressource.
  • Ressourcengruppe: Die zugewiesenen Rollen gelten für alle Ressourcen, die in der Ressourcengruppe enthalten sind.
  • Abonnement: Die zugewiesenen Rollen gelten für alle Im Abonnement enthaltenen Ressourcen.

Das folgende Beispiel zeigt, wie Rollen im Ressourcengruppenbereich zugewiesen werden, da viele Apps alle zugehörigen Azure Ressourcen mithilfe einer einzelnen Ressourcengruppe verwalten.

  1. Navigieren Sie zur Übersichtsseite der Ressourcengruppe, die die App mit der vom Benutzer zugewiesenen verwalteten Identität enthält.

  2. Wählen Sie access control (IAM) in der linken Navigation aus.

  3. Wählen Sie auf der Seite access control (IAM)die Option +Hinzufügen im oberen Menü aus, und wählen Sie dann " Rollenzuweisung hinzufügen " aus, um zur Seite " Rollenzuweisung hinzufügen " zu navigieren.

    Screenshot, der zeigt, wie Sie auf die Seite

  4. Auf der Seite " Rollenzuweisung hinzufügen " wird ein mehrstufiger Registerkartenworkflow zum Zuweisen von Rollen zu Identitäten angezeigt. Verwenden Sie auf der ersten Registerkarte " Rolle " das Suchfeld oben, um die Rolle zu suchen, die Sie der Identität zuweisen möchten.

  5. Wählen Sie die Rolle aus den Ergebnissen aus, und wählen Sie dann "Weiter" aus, um zur Registerkarte " Mitglieder " zu wechseln.

  6. Wählen Sie für die Option "Zugriff zuweisen"die Option "Verwaltete Identität" aus.

  7. Wählen Sie für die Option Mitglieder+ Mitglieder auswählen, um den Bereich Verwaltete Identitäten auswählen zu öffnen.

  8. Verwenden Sie im Bereich "Verwaltete Identitäten auswählen " die Dropdowns " Abonnement " und "Verwaltete Identität ", um die Suchergebnisse nach Ihren Identitäten zu filtern. Verwenden Sie das Suchfeld Select, um die vom Benutzer zugewiesene verwaltete Identität zu suchen, die Sie für die Azure Ressource aktiviert haben, die Ihre App hosten soll.

    Screenshot des Prozesses der verwalteten Identitätszuweisung.

  9. Wählen Sie die Identität aus, und wählen Sie unten im Bereich die Option "Auswählen " aus, um den Vorgang fortzusetzen.

  10. Wählen Sie "Überprüfen" und "Zuweisen " am unteren Rand der Seite aus.

  11. Wählen Sie auf der letzten Registerkarte "Überprüfen+ Zuweisen" die Option "Überprüfen" und "Zuweisen" aus, um den Workflow abzuschließen.

Authentifizieren bei Azure Diensten aus Ihrer App

Die Azure Identity Library stellt verschiedene Credentials - Implementierungen von TokenCredential zur Unterstützung verschiedener Szenarien und Microsoft Entra Authentifizierungsflüsse bereit. Da verwaltete Identität bei der lokalen Ausführung nicht verfügbar ist, zeigen die folgenden Schritte, welche Anmeldeinformationen in welchem Szenario verwendet werden sollen:

  • Lokale Entwicklungsumgebung: Verwenden Sie während der lokalen Entwicklung nur eine Klasse namens DefaultAzureCredential für eine meinungsvermerkte, vorkonfigurierte Kette von Anmeldeinformationen. DefaultAzureCredential ermittelt Benutzeranmeldeinformationen aus Ihren lokalen Tools oder IDE, z. B. dem Azure CLI oder Visual Studio Code. Außerdem bietet es Flexibilität und Komfort für Wiederholungen, Wartezeiten für Antworten und Unterstützung für mehrere Authentifizierungsoptionen. Weitere Informationen finden Sie im Artikel Authentifizierung bei Azure-Diensten während der lokalen Entwicklung.
  • Azure gehostete Apps: Wenn Ihre App in Azure ausgeführt wird, verwenden Sie ManagedIdentityCredential, um die für Ihre App konfigurierte verwaltete Identität sicher zu ermitteln. Wenn Sie diesen genauen Anmeldeinformationstyp angeben, wird verhindert, dass andere verfügbare Anmeldeinformationen unerwartet aufgenommen werden.

Implementieren des Codes

Fügen Sie in einem JavaScript-Projekt das @azure/Identitätspaket hinzu. Navigieren Sie in einem Terminal Ihrer Wahl zum Anwendungsprojektverzeichnis, und führen Sie die folgenden Befehle aus:

npm install @azure/identity

auf Azure Dienste wird mithilfe spezieller Clientklassen aus den verschiedenen Azure SDK Clientbibliotheken zugegriffen. index.jsFühren Sie die folgenden Schritte aus, um die tokenbasierte Authentifizierung zu konfigurieren:

  1. Importieren Sie das @azure/identity Paket.
  2. Übergeben Sie eine entsprechende TokenCredential Instanz an den Client:
    • Verwenden Sie DefaultAzureCredential, wenn Ihre App lokal ausgeführt wird.
    • Verwenden Sie ManagedIdentityCredential, wenn Ihre App in Azure ausgeführt wird, und konfigurieren Sie entweder die Client-ID, Ressourcen-ID oder Objekt-ID.

Die Client-ID wird verwendet, um eine verwaltete Identität beim Konfigurieren von Anwendungen oder Diensten zu identifizieren, die sich mithilfe dieser Identität authentifizieren müssen.

  1. Rufen Sie die Client-ID ab, die einer vom Benutzer zugewiesenen verwalteten Identität zugewiesen ist, mithilfe des folgenden Befehls:

    az identity show \
        --resource-group <resource-group-name> \
        --name <identity-name> \
        --query 'clientId'
    
  2. Konfigurieren ManagedIdentityCredential mit der Client-ID:

    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    console.log(process.env);
    
    function createBlobServiceClient() {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            const clientId = process.env.AZURE_CLIENT_ID;
            if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity');
            return new BlobServiceClient(url, new ManagedIdentityCredential(clientId));
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main() {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME);
            // do something with client
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

Implementieren des Codes

Fügen Sie in einem TypeScript-Projekt das @azure/identity-Paket hinzu. Navigieren Sie in einem Terminal Ihrer Wahl zum Anwendungsprojektverzeichnis, und führen Sie die folgenden Befehle aus:

npm install typescript @azure/identity @types/node

auf Azure Dienste wird mithilfe spezieller Clientklassen aus den verschiedenen Azure SDK Clientbibliotheken zugegriffen. index.jsFühren Sie die folgenden Schritte aus, um die tokenbasierte Authentifizierung zu konfigurieren:

  1. Importieren Sie das @azure/identity Paket.
  2. Übergeben Sie eine entsprechende TokenCredential Instanz an den Client:
    • Verwenden Sie DefaultAzureCredential, wenn Ihre App lokal ausgeführt wird.
    • Verwenden Sie ManagedIdentityCredential, wenn Ihre App in Azure ausgeführt wird, und konfigurieren Sie entweder die Client-ID, Ressourcen-ID oder Objekt-ID.

Die Client-ID wird verwendet, um eine verwaltete Identität beim Konfigurieren von Anwendungen oder Diensten zu identifizieren, die sich mithilfe dieser Identität authentifizieren müssen.

  1. Rufen Sie die Client-ID ab, die einer vom Benutzer zugewiesenen verwalteten Identität zugewiesen ist, mithilfe des folgenden Befehls:

    az identity show \
        --resource-group <resource-group-name> \
        --name <identity-name> \
        --query 'clientId'
    
  2. Konfigurieren Sie ManagedIdentityCredential mit der Client-ID:

    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    function createBlobServiceClient(): BlobServiceClient {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            const clientId = process.env.AZURE_CLIENT_ID;
            if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity');
            return new BlobServiceClient(url, new ManagedIdentityCredential(clientId));
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main(): Promise<void> {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME!);
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err: any) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err: Error) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

Der vorangehende Code verhält sich je nach Umgebung, in der er ausgeführt wird, anders:

  • Auf Ihrer lokalen Entwicklungsarbeitsstation sucht DefaultAzureCredential in den Umgebungsvariablen nach einem Service Principal für Anwendungen oder bei lokal installierten Entwicklertools wie Visual Studio Code nach Entwickleranmeldeinformationen.
  • Wenn sie für Azure bereitgestellt wird, ermittelt ManagedIdentityCredential Ihre verwalteten Identitätskonfigurationen für die automatische Authentifizierung bei anderen Diensten.