Authentifizieren und Autorisieren von App Service für Azure OpenAI mit Microsoft Entra und dem Semantic Kernel SDK
In diesem Artikel wird die Verwendung von verwalteten Microsoft Entra-Identitäten zum Authentifizieren und Autorisieren einer App Service-Anwendung für eine Azure OpenAI-Ressource veranschaulicht.
In diesem Artikel wird außerdem die Verwendung des Semantic Kernel SDK zum einfachen Implementieren der Microsoft Entra-Authentifizierung in Ihrer .NET-Anwendung veranschaulicht.
Mithilfe einer verwalteten Identität von Microsoft Entra kann Ihre App Service-Anwendung einfach auf geschützte Azure OpenAI-Ressourcen zugreifen, ohne dass Sie Geheimnisse manuell bereitstellen oder rotieren müssen.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- .NET SDK
- NuGet-Paket „
Microsoft.SemanticKernel
“ - NuGet-Paket „
Azure.Identity
“ - Erstellen und Bereitstellen einer Azure OpenAI Service-Ressource
- Erstellen und Bereitstellen einer .NET-Anwendung in App Service
Hinzufügen einer verwalteten Identität zu App Service
Ihrer Anwendung können zwei Arten von Identitäten zugewiesen werden:
- Eine systemseitig zugewiesene Identität ist an Ihre Anwendung gebunden und wird gelöscht, wenn Ihre App gelöscht wird. Eine App kann nur eine systemseitig zugewiesene Identität haben.
- Eine benutzerseitig zugewiesene Identität ist eine eigenständige Azure-Ressource, die Ihrer App zugewiesen werden kann. Eine App kann über mehrere benutzerseitig zugewiesene Identitäten verfügen.
Hinzufügen einer systemseitig zugewiesenen Identität
- Navigieren Sie im Azure-Portal zur Seite Ihrer App, und scrollen Sie dann nach unten zur Gruppe Einstellungen.
- Wählen Sie Identität aus.
- Schalten Sie auf der Registerkarte Systemseitig zugewiesen den Status auf Ein um, und wählen Sie dann Speichern aus.
Führen Sie den Befehl az webapp identity assign
aus, um eine vom System zugewiesene Identität zu erstellen:
az webapp identity assign --name <appName> --resource-group <groupName>
Hinzufügen einer benutzerseitig zugewiesenen Identität
Um Ihrer App eine benutzerseitig zugewiesene Identität hinzuzufügen, erstellen Sie die Identität, und fügen Sie dann der App-Konfiguration den Ressourcenbezeichner hinzu.
Erstellen Sie anhand dieser Anweisungen eine Ressource für eine benutzerseitig zugewiesene verwaltete Identität.
Scrollen Sie im linken Navigationsbereich der App-Seite nach unten zur Gruppe Einstellungen.
Wählen Sie Identität aus.
Wählen Sie Benutzerseitig zugewiesen>Hinzufügen aus.
Suchen Sie die Identität, die Sie zuvor erstellt haben, wählen Sie sie aus, und wählen Sie dann Hinzufügen aus.
Wichtig
Nach dem Auswählen von Hinzufügen wird die App neu gestartet.
Erstellen einer benutzerseitig zugewiesenen Identität:
az identity create --resource-group <groupName> --name <identityName>
Zuweisen der Identität zu Ihrer App:
az webapp identity assign --resource-group <groupName> --name <appName> --identities <identityId>
Hinzufügen einer Azure OpenAI-Benutzerrolle zu Ihrer verwalteten Identität
- Navigieren Sie im Azure Portal zu dem Bereich, auf den Sie Zugriff für Azure OpenAI gewähren möchten. Der Bereich kann eine Verwaltungsgruppe, ein Abonnement, eine Ressourcengruppe oder eine bestimmte Azure OpenAI-Ressource sein.
- Wählen Sie im linken Navigationsbereich Zugriffssteuerung (IAM) aus.
- Wählen Sie Hinzufügen und dann Rollenzuweisung hinzufügen aus.
- Wählen Sie auf der Registerkarte Rolle die Rolle Cognitive Services OpenAI-Benutzer aus.
- Wählen Sie auf der Registerkarte Mitglieder die verwaltete Identität aus.
- Wählen Sie auf der Registerkarte Überprüfen und zuweisen die Option Überprüfen und zuweisen aus, um die Rolle zuzuweisen.
Ressourcenbereich
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>"
Ressourcengruppenbereich
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>"
Abonnementbereich
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>"
Verwaltungsgruppenbereich
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupName>"
Implementieren der tokenbasierten Authentifizierung mithilfe des Semantic Kernel SDK
Initialisieren Sie ein
DefaultAzureCredential
-Objekt, um die verwaltete Identität Ihrer App anzunehmen:// Initialize a DefaultAzureCredential. // This credential type will try several authentication flows in order until one is available. // Will pickup Visual Studio or Azure CLI credentials in local environments. // Will pickup managed identity credentials in production deployments. TokenCredential credentials = new DefaultAzureCredential( new DefaultAzureCredentialOptions { // If using a user-assigned identity specify either: // ManagedIdentityClientId or ManagedIdentityResourceId. // e.g.: ManagedIdentityClientId = "myIdentityClientId". } );
Erstellen Sie ein
Kernel
-Objekt, das den Azure OpenAI-Dienst zur Chatvervollständigung enthält, und verwenden Sie die zuvor erstellten Anmeldeinformationen:// Retrieve the endpoint and deployment obtained from the Azure OpenAI deployment. // Must use the deployment name not the underlying model name. IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]!; string deployment = config["AZURE_OPENAI_GPT_NAME"]!; // Build a Kernel that includes the Azure OpenAI Chat Completion Service. // Include the previously created token credential. Kernel kernel = Kernel .CreateBuilder() .AddAzureOpenAIChatCompletion(deployment, endpoint, credentials) .Build();
Verwenden Sie das
Kernel
-Objekt, um die Vervollständigung einer Eingabeaufforderung über Azure OpenAI aufzurufen:// Use the Kernel to invoke prompt completion through Azure OpenAI. // The Kernel response will be null if the model can't be reached. string? result = await kernel.InvokePromptAsync<string>("Please list three Azure services"); Console.WriteLine($"Output: {result}"); // Continue sending and receiving messages between the user and AI. // ...