Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Apps, die außerhalb von Azure gehostet werden, z. B. lokal oder in einem Rechenzentrum eines Drittanbieters, sollten einen Anwendungsdienstprinzipal über Microsoft Entra ID verwenden, um sich bei Azure-Diensten zu authentifizieren. In den folgenden Abschnitten lernen Sie Folgendes:
- So registrieren Sie eine Anwendung in Microsoft Entra, um einen Service Principal zu erstellen
- Zuweisung von Rollen zu Bereichsberechtigungen
- So authentifizieren Sie sich über einen Dienstprinzipal von Ihrem Anwendungscode aus
Wenn Sie dedizierte Anwendungsdienstprinzipale verwenden, können Sie das Prinzip der geringsten Rechte beim Zugriff auf Azure-Ressourcen einhalten. Berechtigungen sind auf die spezifischen Anforderungen der App während der Entwicklung beschränkt und verhindern den versehentlichen Zugriff auf Azure-Ressourcen, die für andere Apps oder Dienste vorgesehen sind. Dieser Ansatz hilft auch, Probleme zu vermeiden, wenn die App in die Produktion verschoben wird, indem sichergestellt wird, dass sie in der Entwicklungsumgebung nicht überprivilegiert ist.
Für jede Umgebung, in der die App gehostet wird, sollte eine andere App-Registrierung erstellt werden. Dadurch können umgebungsspezifische Ressourcenberechtigungen für jeden Dienstprinzipal konfiguriert und sichergestellt werden, dass eine in einer Umgebung bereitgestellte App nicht mit Azure-Ressourcen in einer anderen Umgebung spricht.
Registrieren der App in Azure
Anwendungsdienstprinzipalobjekte werden über eine App-Registrierung in Azure mithilfe des Azure-Portals oder der Azure CLI erstellt.
Verwenden Sie im Azure-Portal die Suchleiste, um zur App-Registrierungen Seite zu navigieren.
Wählen Sie auf der Seite „App-Registrierungen“ die Option + Neue Registrierung aus.
Gehen Sie auf der Seite Registrieren einer Anwendung folgendermaßen vor:
- Geben Sie für das Feld Name einen beschreibenden Wert ein, der den App-Namen und die Zielumgebung enthält.
- Wählen Sie unter Unterstützte Kontotypendie Option Nur Konten in diesem Organisationsverzeichnis (nur Microsoft Customer Led - Single Tenant)oder die Option, die Ihren Anforderungen am besten entspricht.
Wählen Sie Registrieren , um Ihre App zu registrieren und den Dienstprinzipal zu erstellen.
Kopieren Sie auf der Seite App-Registrierung Ihrer App die Anwendungs-ID (Client-ID) und Verzeichnis-ID (Mandanten-ID) und fügen Sie sie an einem temporären Speicherort ein, um sie später in Ihren App-Codekonfigurationen zu verwenden.
Wählen Sie Zertifikat oder Geheimnis hinzufügen , um Anmeldedaten für Ihre App einzurichten.
Auf der Seite Zertifikate & Geheimnisse wählen Sie + Neues Client-Geheimnis.
In dem Hinzufügen eines Client-Geheimnisses Flyout-Panel, das sich öffnet:
- Geben Sie für die Beschreibung einen Wert von
Current. - Lassen Sie für den Wert "Expires" den empfohlenen Standardwert von
180 days. - Wählen Sie Hinzufügen aus, um das Geheimnis hinzuzufügen.
- Geben Sie für die Beschreibung einen Wert von
Kopieren Sie auf der Seite Zertifikate & Geheimnisse die Eigenschaft Wert des Client-Geheimnisses zur Verwendung in einem späteren Schritt.
Hinweis
Der Wert des geheimen Clientschlüssels wird nur einmal angezeigt, nachdem die App-Registrierung erstellt wurde. Sie können weitere geheime Clientschlüssel hinzufügen, ohne diesen geheimen Clientschlüssel ungültig zu machen, aber es gibt keine Möglichkeit, diesen Wert erneut anzuzeigen.
Zuweisen von Rollen zum Anwendungsdienstprinzipal
Ermitteln Sie als Nächstes, welche Rollen (Berechtigungen) Ihre App für welche Ressourcen benötigt, und weisen Sie diese Rollen dem von Ihnen erstellten Dienstprinzipal zu. Rollen können auf Ressourcen-, Ressourcengruppen- oder Abonnementebene zugewiesen werden. In diesem Beispiel wird gezeigt, wie Rollen im Ressourcengruppenbereich zugewiesen werden, da die meisten Apps alle ihre Azure-Ressourcen in einer einzelnen Ressourcengruppe gruppieren.
Navigieren Sie im Azure-Portal zur Seite "Übersicht" der Ressourcengruppe, die Ihre App enthält.
Wählen Sie im linken Navigationsbereich die Option Zugriffssteuerung (IAM).
Wählen Sie auf der Seite access control (IAM)+ Hinzufügen und dann im Dropdownmenü " Rollenzuweisung hinzufügen " aus. Die Seite " Rollenzuweisung hinzufügen " bietet mehrere Registerkarten zum Konfigurieren und Zuweisen von Rollen.
Verwenden Sie auf der Registerkarte " Rolle " das Suchfeld, um die Rolle zu suchen, die Sie zuweisen möchten. Wählen Sie die Rolle und dann "Weiter" aus.
Auf der Registerkarte „Mitglieder“
- Wählen Sie für den Wert "Zugriff zuweisen""Benutzer", "Gruppe" oder "Dienstprinzipal" aus.
- Wählen Sie für den Wert " Mitglieder " die Option "Mitglieder auswählen " aus, um den Flyoutbereich " Mitglieder auswählen " zu öffnen.
- Suchen Sie nach dem Zuvor erstellten Dienstprinzipal, und wählen Sie ihn aus den gefilterten Ergebnissen aus. Wählen Sie Auswählen aus, um die Gruppe auszuwählen und das Flyout-Panel zu schließen.
- Wählen Sie "Überprüfen" und "Zuweisen " am unteren Rand der Registerkarte " Mitglieder " aus.
Wählen Sie auf der Registerkarte " Überprüfen+ Zuweisen " die Option "Überprüfen" und "Zuweisen " am unteren Rand der Seite aus.
Festlegen der App-Umgebungsvariablen
Zur Laufzeit suchen bestimmte Anmeldeinformationen aus der Azure Identity Bibliothek, wie z.B. DefaultAzureCredential, EnvironmentCredentialund ClientSecretCredential, per Konvention in den Umgebungsvariablen nach Dienstprinzipalinformationen. Es gibt mehrere Möglichkeiten zum Konfigurieren von Umgebungsvariablen beim Arbeiten mit JavaScript, je nach Tool und Umgebung.
Konfigurieren Sie unabhängig vom gewählten Ansatz die folgenden Umgebungsvariablen für einen Dienstprinzipal:
-
AZURE_CLIENT_ID: Wird verwendet, um die registrierte App in Azure zu identifizieren. -
AZURE_TENANT_ID: Die ID des Microsoft Entra-Mandanten. -
AZURE_CLIENT_SECRET: Die geheimen Anmeldeinformationen, die für die App generiert wurden.
In Visual Studio Code können Umgebungsvariablen in der launch.json Datei Ihres Projekts festgelegt werden. Diese Werte werden automatisch abgerufen, wenn die App gestartet wird. Diese Konfigurationen reisen jedoch während der Bereitstellung nicht mit Ihrer App zusammen, daher müssen Sie Umgebungsvariablen in Ihrer Zielhostingumgebung einrichten.
"configurations": [
{
"env": {
"NODE_ENV": "development",
"AZURE_CLIENT_ID": "<your-client-id>",
"AZURE_TENANT_ID":"<your-tenant-id>",
"AZURE_CLIENT_SECRET": "<your-client-secret>"
}
}
Authentifizieren von Azure-Diensten aus Ihrer App
Die Azure Identity-Bibliothek stellt verschiedene Berechtigungsnachweise bereit – Implementierungen, die TokenCredential zur Unterstützung verschiedener Szenarien und Microsoft Entra-Authentifizierungsflüsse angepasst sind. Die vorausstehenden Schritte veranschaulichen die Verwendung von ClientSecretCredential beim lokalen Arbeiten mit Dienstprinzipalen und in der Produktion.
Implementieren des Codes
Fügen Sie das @azure-/Identitätspaket im Node.js Projekt hinzu:
npm install @azure/identity
Auf Azure-Dienste wird mithilfe spezieller Clientklassen aus den verschiedenen Azure SDK-Clientbibliotheken zugegriffen. Führen Sie für jeden JavaScript-Code, der ein Azure SDK-Clientobjekt in Ihrer App erstellt, die folgenden Schritte aus:
- Importieren Sie die
ClientSecretCredential-Klasse aus dem@azure/identity-Modul. - Erstellen Sie ein
ClientSecretCredential-Objekt mit demtenantId,clientIdundclientSecret. - Übergeben Sie die
ClientSecretCredentialInstanz an den Azure SDK-Clientobjektkonstruktor.
Ein Beispiel für diesen Ansatz wird im folgenden Codesegment gezeigt:
import { BlobServiceClient } from '@azure/storage-blob';
import { ClientSecretCredential } from '@azure/identity';
// Authentication
const tenantId = process.env.AZURE_TENANT_ID;
const clientId = process.env.AZURE_CLIENT_ID;
const clientSecret = process.env.AZURE_CLIENT_SECRET;
// Azure Storage account name
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!tenantId || !clientId || !clientSecret || !accountName) {
throw Error('Required environment variables not found');
}
const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
credential
);
Ein alternativer Ansatz besteht darin, das ClientSecretCredential Objekt direkt an den Azure SDK-Clientkonstruktor zu übergeben:
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
new ClientSecretCredential(tenantId, clientId, clientSecret)
);