Anleitung: Sichere Verbindung zu Foundry Tools von .NET App Service mithilfe von Key Vault

Azure App Service kann verwaltete Identitäten verwenden, um eine Verbindung mit Back-End-Diensten ohne Verbindungszeichenfolge herzustellen. Bei diesem Ansatz werden die Verbindungsgeheimnisse, die für die Verwaltung erforderlich sind, eliminiert, sodass Ihre Back-End-Konnektivität in einer Produktionsumgebung sicher bleibt. Wenn Sie fertig sind, verfügen Sie über eine App, die programmgesteuerte Aufrufe an Foundry Tools sendet, ohne Verbindungsschlüssel in App Service zu speichern.

Für Back-End-Dienste, die verwaltete Identitäten nicht unterstützen und dennoch Verbindungsgeheimnisse erfordern, können Sie Azure Key Vault zum Verwalten von Verbindungsgeheimnissen verwenden. In diesem Lernprogramm werden Foundry Tools als Beispiel verwendet. Wenn Sie fertig sind, verfügen Sie über eine App, die programmgesteuerte Aufrufe an Foundry Tools sendet, ohne verbindungsgeheimnisse innerhalb von App Service zu speichern.

Tipp

Foundry Tools unterstützt die Authentifizierung über verwaltete Identitäten. In diesem Lernprogramm wird die Abonnementschlüsselauthentifizierung verwendet, um zu veranschaulichen, wie Sie eine Verbindung mit einem Azure-Dienst herstellen können, der keine verwalteten Identitäten von App Service unterstützt.

Diagramm, das zeigt, dass der Benutzer eine Verbindung mit einem Dienst herstellt, der wiederum eine Verbindung mit einem Schlüsseltresor für den Zugriff auf Cognitive Services herstellt.

In diesem Architekturmodell:

  • Verwaltete Identitäten sichern die Konnektivität mit dem Schlüsseltresor.
  • Der App-Dienst greift auf die geheimen Schlüssel mithilfe von Key Vault-Verweisen als App-Einstellungen zu.
  • Der Zugriff auf den Schlüsseltresor ist auf die App beschränkt. App-Mitwirkende, wie z. B. Administratoren, könnten vollständige Kontrolle über die App Service-Ressourcen haben und gleichzeitig keinen Zugriff auf die Geheimnisse des Schlüsseltresors.
  • Wenn Ihr Anwendungscode bereits über die Anwendungseinstellungen auf Verbindungsgeheimnisse zugreift, ist keine Änderung erforderlich.

In diesem Tutorial erfahren Sie Folgendes:

  • Aktivieren von verwalteten Identitäten
  • Verwenden von verwalteten Identitäten zum Herstellen einer Verbindung mit Key Vault
  • Verwenden Sie Key Vault Verweise
  • Zugriff auf Foundry-Tools

Voraussetzungen

Bereiten Sie Ihre Umgebung auf die Azure CLI vor.

Erstellen einer App mit Konnektivität zu Foundry Tools

  1. Erstellen Sie eine Ressourcengruppe, die alle Ihre Ressourcen enthält:

    # Save the resource group name as a variable for convenience
    groupName=myKVResourceGroup
    region=canadacentral
    
    az group create --name $groupName --location $region
    
  2. Erstellen Sie eine Foundry-Tools-Ressource. Ersetzen Sie <den Cs-Ressourcennamen> durch einen eindeutigen Namen.

    # Save the resource name as a variable for convenience. 
    csResourceName=<cs-resource-name>
    
    az cognitiveservices account create --resource-group $groupName --name $csResourceName --location $region --kind TextAnalytics --sku F0 --custom-domain $csResourceName
    

    Hinweis

    --sku F0 erstellt eine kostenlose Foundry Tools-Ressource. Jedes Abonnement ist auf ein Kontingent von einer Ressource der freien Ebene TextAnalytics beschränkt. Wenn Sie Ihr Kontingent bereits verwendet haben, verwenden Sie --sku S stattdessen.

Konfigurieren einer .NET-App

Klonen Sie das Beispiel-Repository lokal und stellen Sie die Beispielanwendung im App Service bereit. Ersetzen Sie <app-name> durch einen eindeutigen Namen.

# Save the app name as a variable for convenience
appName=<app-name>

# Clone the sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/dotnet

az webapp up --sku F1 --resource-group $groupName --name $appName --plan $appName --location $region

Konfigurieren von Geheimnissen als App-Einstellungen

  1. Konfigurieren Sie die Geheimnisse der Foundry Tools als App-Einstellungen CS_ACCOUNT_NAME und CS_ACCOUNT_KEY.

    # Get the subscription key for the Foundry Tools resource
    csKey1=$(az cognitiveservices account keys list --resource-group $groupName --name $csResourceName --query key1 --output tsv)
    
    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="$csResourceName" CS_ACCOUNT_KEY="$csKey1"
    
  2. Wechseln Sie in einem Browser zu Ihrer bereitgestellten App unter <app-name>.azurewebsites.net. Probieren Sie den Sprachdetektor aus, indem Sie Zeichenfolgen in verschiedenen Sprachen eingeben.

    Screenshot der bereitgestellten Sprachdetektor-App in App Service.

    Wenn Sie den Anwendungscode betrachten, befindet sich die Debugausgabe für die Erkennungsergebnisse möglicherweise in derselben Schriftfarbe wie der Hintergrund. Sie können die Ausgabe sehen, indem Sie den Leerraum direkt unterhalb des Resultats hervorheben.

Sichere Backend-Konnektivität

Verbindungsgeheimnisse werden jetzt als App-Einstellungen in Ihrer App Service-App gespeichert. Durch diesen Ansatz werden verbindungsgeheimnisse bereits von Ihrer Anwendungscodebasis gesichert. Allerdings kann jeder Mitwirkende, der Ihre App verwalten kann, auch die App-Einstellungen einsehen. In diesem Abschnitt verschieben Sie die geheimen Verbindungsschlüssel in einen Schlüsseltresor. Sie sperren den Zugriff, sodass nur Sie ihn verwalten können und nur die App Service-App sie mithilfe ihrer verwalteten Identität lesen kann.

  1. Erstellen eines Schlüsseltresors Ersetzen Sie <vault-name> durch einen eindeutigen Namen.

    # Save the key vault name as a variable for convenience
    vaultName=<vault-name>
    
    az keyvault create --resource-group $groupName --name $vaultName --location $region --sku standard --enable-rbac-authorization
    

    Der Parameter legt die Azure rollenbasierte Zugriffssteuerung (RBAC) als Berechtigungsmodell fest. Durch diese Einstellung werden standardmäßig alle Zugriffsrichtlinienberechtigungen ungültig.

  2. Geben Sie sich selbst die Key Vault Secrets Officer RBAC-Rolle für den Tresor.

    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    myId=$(az ad signed-in-user show --query id --output tsv)
    az role assignment create --role "Key Vault Secrets Officer" --assignee-object-id $myId --assignee-principal-type User --scope $vaultResourceId
    
  3. Aktivieren Sie die vom System zugewiesene verwaltete Identität für Ihre App, und weisen Sie ihr die Key Vault Secrets User RBAC-Rolle für den Tresor zu.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Fügen Sie den Ressourcennamen und den Abonnementschlüssel "Foundry Tools" als geheime Schlüssel zum Tresor hinzu, und speichern Sie ihre IDs als Umgebungsvariablen für den nächsten Schritt.

    csResourceKVUri=$(az keyvault secret set --vault-name $vaultName --name csresource --value $csResourceName --query id --output tsv)
    csKeyKVUri=$(az keyvault secret set --vault-name $vaultName --name cskey --value $csKey1 --query id --output tsv)
    
  5. Zuvor haben Sie die Geheimnisse als App-Einstellungen CS_ACCOUNT_NAME und CS_ACCOUNT_KEY in Ihrer App festgelegt. Legen Sie sie stattdessen als Key Vault-Referenzen fest.

    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
    
  6. Wechseln Sie in einem Browser erneut zu <app-name>.azurewebsites.net . Wenn Sie Erkennungsergebnisse zurückerhalten, verbinden Sie sich mithilfe von Key Vault-Verweisen mit dem Endpunkt "Foundry Tools".

Herzlichen Glückwunsch, Ihre App stellt jetzt eine Verbindung mit Foundry Tools her, indem geheime Schlüssel im Schlüsseltresor verwendet werden, und Sie haben keine Änderungen am Anwendungscode vorgenommen.

Bereinigen von Ressourcen

In den vorherigen Schritten haben Sie Azure Ressourcen in einer Ressourcengruppe erstellt. Wenn Sie nicht erwarten, dass diese Ressourcen in Zukunft benötigt werden, löschen Sie die Ressourcengruppe, indem Sie den folgenden Befehl in der Cloud Shell ausführen:

az group delete --name $groupName

Die Ausführung dieses Befehls kann einige Minuten in Anspruch nehmen.