Authentifizieren bei Azure für Entwicklungs- und Laufzeitumgebungen

Erstellen Sie für die Authentifizierung bei Azure einen Dienstprinzipal, um die Azure SDKs für JavaScript verwenden zu können.

Authentifizieren bei der Azure-Plattform

Im Allgemeinen müssen Sie sich für die meisten Dienste und Funktionen mit einer Identitätsanmeldeinformationsmethode authentifizieren, um ein Token zu erstellen. Das Token wird an das SDK übergeben, um die Verwendung zu autorisieren. Es gibt mehrere Methoden für Anmeldeinformationen. Einige erfordern eine umfangreichere Einrichtung, sind aber für die Verwendung im Produktionsdienst vorgesehen.

Suchen Sie paketspezifische Anweisungen zur Authentifizierung in den einzelnen npm Azure SDK-Paketenreadme.md.

Interaktive Authentifizierung für Schnellstartanleitungen und Tutorials

Wenn Sie einen Schnellstart oder ein Tutorial für die Azure-Dienste verwenden möchten, ist die schnellste Anmeldeinformationsmethode die interaktive Anmeldung. Mit dieser Methode führen Sie wenige Schritte aus:

  1. Sie führen den Code aus.
  2. Eine Meldung mit einer Authentifizierungs-URL und einem Token wird angezeigt.
  3. Öffnen Sie diese URL in einem Browser, und geben Sie das Token ein. Abhängig von Ihren Azure-Authentifizierungsanforderungen ist möglicherweise ein zweiter Authentifizierungsschritt erforderlich.
  4. Wenn Sie die Authentifizierung abgeschlossen haben, können Sie den Browser schließen.
  5. Der Code wird weiterhin ausgeführt.

Ein Beispiel für die interaktive Anmeldeauthentifizierung in einem Browser erfordert die Konfigurationseinstellung für den Mandanten und die Client-ID für die Azure Active Directory-Anwendung, bei der Sie sich authentifizieren. Beispiel für diesen Code:

function withInteractiveBrowserCredential() {
  const credential = new InteractiveBrowserCredential({
    tenantId: "<YOUR_TENANT_ID>",
    clientId: "<YOUR_CLIENT_ID>"
  });

  const client = new SecretClient("https://key-vault-name.vault.azure.net", credential);
}

Da bei dieser Methode bei jeder Codeausführung eine interaktive Anmeldung erforderlich ist, sollten Sie diese Methode ggf. durch eine nicht interaktive Anmeldeinformationsmethode ersetzen, sobald Sie bereit sind, mit der Entwicklung für die Azure-Plattform zu beginnen.

Dieser Code verwendet keine Authentifizierungsgeheimnisse. Sie können diesen Code daher in die Quellcodeverwaltung einchecken.

Azure-Authentifizierung für die Verwendung in Entwicklung und Produktion

Wenn Sie mit der Entwicklung beginnen möchten, sollten Sie die folgenden Anmeldeinformationen auswählen:

Lokale Entwicklung Bereitgestellte Anwendung
ClientSecretCredential. Nachdem Sie Ihren Dienstprinzipal erstellt und Ihre Client-ID, Die Mandanten-ID und das Geheimnis abgerufen haben, sind diese Anmeldeinformationen schnell einsatzbereit und erfordern keine Umgebungsvariablen. Wenn Sie die Bereitstellung in der Produktion planen, verwenden Sie DefaultAzureCredential. Dafür sind Umgebungsvariablen erforderlich. Diese Anmeldeinformationsmethode bietet den Vorteil, dass Geheimnisse nicht in der Quellcodeverwaltung gespeichert oder verwendet werden müssen.

Es gibt andere Anmeldeinformationsklassen, mit denen Sie die Authentifizierung für bestimmte Zwecke steuern können.

1 Erstellen eines Dienstprinzipals

Erstellen Sie einen Dienstprinzipal, und konfigurieren Sie seinen Zugriff auf Azure-Ressourcen. Der Dienstprinzipal muss „DefaultAzureCredential“ verwenden.

  1. Erstellen Sie den Dienstprinzipal mit dem Azure-Befehl az ad sp create-for-rbac und der Azure CLI oder Cloud Shell.

    az ad sp create-for-rbac --name YOUR-SERVICE-PRINCIPAL-NAME --role Contributor --scopes /subscriptions/mySubscriptionID
    
  2. Die Antwort des Befehls enthält Geheimnisse, die Sie sicher speichern müssen, etwa in Azure Key Vault:

    {
      "appId": "YOUR-SERVICE-PRINCIPAL-ID",
      "displayName": "YOUR-SERVICE-PRINCIPAL-NAME",
      "name": "http://YOUR-SERVICE-PRINCIPAL-NAME",
      "password": "!@#$%",
      "tenant": "YOUR-TENANT-ID"
    }
    

Sie können für die Erstellung eines Dienstprinzipals auch Folgendes verwenden:

2. Konfigurieren von Umgebungsvariablen

In Azure-Cloudumgebungen müssen Sie die folgenden Umgebungsvariablen konfigurieren. Ändern Sie den Namen nicht, da das Azure Identity SDK genau diese Umgebungsnamen erfordert. Diese Umgebungsvariablen sind für die Verwendung von „DefaultAzureCredential“ im Kontext ERFORDERLICH.

  • AZURE_TENANT_ID: tenant aus der obigen Dienstprinzipalausgabe
  • AZURE_CLIENT_ID: appId aus der obigen Dienstprinzipalausgabe
  • AZURE_CLIENT_SECRET: password aus der obigen Dienstprinzipalausgabe

3. Auflisten von Azure-Abonnements mit Dienstprinzipal

Verwenden Sie den neuen Dienstprinzipal, um sich bei Azure zu authentifizieren und Ihre Abonnements aufzulisten.

  1. Installieren Sie die Abhängigkeiten: Azure SDK für die Identität, Azure Subscriptions SDK.

    npm install @azure/identity @azure/arm-subscriptions --save
    
  2. Erstellen Sie eine JavaScript-Datei namens list.js mit dem folgenden Code:

    const {
      ClientSecretCredential,
      DefaultAzureCredential,
    } = require("@azure/identity");
    const { SubscriptionClient } = require("@azure/arm-subscriptions");
    require("dotenv").config();
    
    let credentials = null;
    
    const tenantId = process.env["AZURE_TENANT_ID"];
    const clientId = process.env["AZURE_CLIENT_ID"];
    const secret = process.env["AZURE_CLIENT_SECRET"];
    
    if (process.env.NODE_ENV && process.env.NODE_ENV === "production") {
      // production
      credentials = new DefaultAzureCredential();
    } else {
      // development
      if (tenantId && clientId && secret) {
        console.log("development");
        credentials = new ClientSecretCredential(tenantId, clientId, secret);
      } else {
        credentials = new DefaultAzureCredential();
      }
    }
    
    async function listSubscriptions() {
      try {
        // use credential to authenticate with Azure SDKs
        const client = new SubscriptionClient(credentials);
    
        // get details of each subscription
        for await (const item of client.subscriptions.list()) {
          const subscriptionDetails = await client.subscriptions.get(
            item.subscriptionId
          );
          /* 
            Each item looks like:
          
            {
              id: '/subscriptions/123456',
              subscriptionId: '123456',
              displayName: 'YOUR-SUBSCRIPTION-NAME',
              state: 'Enabled',
              subscriptionPolicies: {
                locationPlacementId: 'Internal_2014-09-01',
                quotaId: 'Internal_2014-09-01',
                spendingLimit: 'Off'
              },
              authorizationSource: 'RoleBased'
            },
        */
          console.log(subscriptionDetails);
        }
      } catch (error) {
        console.error(JSON.stringify(err));
      }
    }
    
    listSubscriptions()
      .then(() => {
        console.log("done");
      })
      .catch((ex) => {
        console.log(ex);
      });
    
  3. Wenn Sie keine Umgebungsvariablen festlegen, ersetzen Sie die Zeichenfolgen für Anmeldeinformationen durch Ihre Werte.

    const tenantId = process.env["AZURE_TENANT_ID"] || "REPLACE-WITH-YOUR-TENANT-ID"; 
    const clientId = process.env["AZURE_CLIENT_ID"] || "REPLACE-WITH-YOUR-CLIENT-ID"; 
    const secret = process.env["AZURE_CLIENT_SECRET"] || "REPLACE-WITH-YOUR-CLIENT-SECRET";
    
  4. Führen Sie die Datei aus, um die Ressourcengruppenliste anzuzeigen:

    node list.js
    
  5. Zeigen Sie den vollständigen Beispielcode und „package.json“ an:

Nächste Schritte