Tutorial: Sichere Verbindung von Cognitive Services über .NET-App Service mit Key Vault

Azure App Service kann verwaltete Identitäten verwenden, um sich ohne Verbindungsstring mit Back-End-Diensten zu verbinden. Dadurch müssen keine Verbindungsgeheimnisse mehr verwaltet werden und die Back-End-Konnektivität bleibt in einer Produktionsumgebung sicher. Für Back-End-Dienste, die keine verwalteten Identitäten unterstützen und dennoch Verbindungsgeheimnisse benötigen, können Sie Key Vault zur Verwaltung von Verbindungsgeheimnissen verwenden. Dieses Tutorial zeigt Ihnen am Beispiel von Azure KI Services, wie dies in der Praxis funktioniert. Nach Abschluss des Tutorials verfügen Sie über eine App, die Azure KI Services programmgesteuert aufruft, ohne Verbindungsgeheimnisse in App Service zu speichern.

Tipp

Azure KI Services unterstützt die Authentifizierung über verwaltete Identitäten, aber in diesem Tutorial wird die Authentifizierung über Abonnementschlüssel verwendet. Damit soll veranschaulicht werden, wie Sie eine Verbindung mit einem Azure-Dienst herstellen können, der keine verwalteten Identitäten von App Services unterstützt.

Architecture diagram for tutorial scenario.

Mit dieser Architektur:

  • Die Verbindung zum Key Vault ist durch verwaltete Identitäten gesichert
  • Der App-Dienst greift auf die Geheimnisse zu, indem er Key Vault-Referenzen als App-Einstellungen verwendet.
  • Der Zugriff auf den Schlüsseltresor ist auf die App beschränkt. App-Beitragende, wie z. B. Administratoren, können die vollständige Kontrolle über die App-Service-Ressourcen haben, haben aber gleichzeitig keinen Zugriff auf die Geheimnisse des Key Vault.
  • Wenn Ihr Anwendungscode bereits über die Anwendungseinstellungen auf Verbindungsgeheimnisse zugreift, ist keine Änderung erforderlich.

Sie lernen Folgendes:

  • Aktivieren von verwalteten Identitäten
  • Verwaltete Identitäten für die Verbindung mit Key Vault verwenden
  • Verwenden von Key Vault-Verweisen
  • Zugreifen auf Azure KI Services

Voraussetzungen

Bereiten Sie die Umgebung für die Azure CLI vor.

  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

Erstellen einer App mit Konnektivität zu Azure KI Services

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

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. Erstellen Sie eine Azure KI Services-Ressource. Ersetzen Sie <cs-resource-name> durch einen eindeutigen Namen Ihrer Wahl.

    # Save resource name as 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

    Über --sku F0 wird eine Azure KI Services-Ressource im kostenlosen Tarif erstellt. Jedes Abonnement ist auf ein Kontingent von einer Ressource der freien Ebene TextAnalytics beschränkt. Wenn Sie die Quote bereits überschritten haben, verwenden Sie stattdessen --sku S.

Konfigurieren der .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 app name as variable for convenience
appName=<app-name>

# Clone 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 für Azure KI Services als App-Einstellungen CS_ACCOUNT_NAME und CS_ACCOUNT_KEY.

    # Get subscription key for Cognitive Services 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. Navigieren Sie im Browser zu Ihrer bereitgestellten Anwendung unter <app-name>.azurewebsites.net und testen Sie den Sprachdetektor mit Strings in verschiedenen Sprachen.

    Screenshot that shows deployed language detector app in App Service.

    Wenn Sie sich den Anwendungscode ansehen, werden Sie feststellen, dass die Debug-Ausgabe für die Erkennungsergebnisse die gleiche Schriftfarbe hat wie der Hintergrund. Sie können dies erkennen, indem Sie versuchen, die weiße Fläche direkt unter dem Ergebnis zu markieren.

Sichere Backend-Konnektivität

Derzeit werden die Verbindungsgeheimnisse als App-Einstellungen in Ihrer App Service-App gespeichert. Bei diesem Ansatz werden bereits die Verbindungsgeheimnisse aus der Codebasis Ihrer Anwendung gesichert. Allerdings kann jeder Mitwirkende, der Ihre App verwalten kann, auch die App-Einstellungen einsehen. In diesem Schritt verschieben Sie die Verbindungsgeheimnisse in einen Schlüsseltresor und sperren den Zugriff, so dass nur Sie sie verwalten können und nur die App Service App sie mit ihrer verwalteten Identität lesen kann.

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

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

    Der Parameter --enable-rbac-authorization--enable-rbac-authorization. Diese Einstellung macht 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 Anwendung, und geben Sie ihr die Key Vault Secrets User RBAC-Rolle für den Tresor.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Fügen Sie den Namen und den Abonnementschlüssel der Azure KI Services-Ressource als Geheimnisse zum Tresor hinzu, und speichern Sie die zugehörigen IDs für den nächsten Schritt als Umgebungsvariablen.

    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 Schlüsseltresorverweise 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. Navigieren Sie im Browser erneut zu <app-name>.azurewebsites.net. Wenn Sie Erkennungsergebnisse zurückerhalten, stellen Sie eine Verbindung mit dem Azure KI Services-Endpunkt mit Verweisen auf den Schlüsseltresor her.

Herzlichen Glückwunsch! Ihre App stellt jetzt eine Verbindung mit Azure KI Services her und verwendet dabei die in Ihrem Schlüsseltresor gespeicherten Geheimnisse, ohne dass Sie den Code Ihrer Anwendung ändern müssen.

Bereinigen von Ressourcen

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

az group delete --name $groupName

Die Ausführung dieses Befehls kann eine Minute in Anspruch nehmen.

Nächste Schritte