Självstudie: Säker Cognitive Service-anslutning från .NET App Service med hjälp av Key Vault

Azure App Service kan använda hanterade identiteter för att ansluta till serverdelstjänster utan en anslutningssträng, vilket eliminerar anslutningshemligheter för att hantera och håller serverdelsanslutningen säker i en produktionsmiljö. För serverdelstjänster som inte stöder hanterade identiteter och fortfarande kräver anslutningshemligheter kan du använda Key Vault för att hantera anslutningshemligheter. I den här självstudien används Azure AI-tjänster som exempel för att visa hur det går till i praktiken. När du är klar har du en app som gör programmässiga anrop till Azure AI-tjänster utan att lagra några anslutningshemligheter i App Service.

Tips

Azure AI-tjänster stöder autentisering via hanterade identiteter, men i den här självstudien används prenumerationsnyckelautentisering för att visa hur du kan ansluta till en Azure-tjänst som inte stöder hanterade identiteter från App Services.

Arkitekturdiagram för självstudiescenario.

Med den här arkitekturen:

  • Anslutning till Key Vault skyddas av hanterade identiteter
  • App Service kommer åt hemligheterna med hjälp av Key Vault referenser som appinställningar.
  • Åtkomsten till nyckelvalvet är begränsad till appen. Appdeltagare, till exempel administratörer, kan ha fullständig kontroll över App Service resurser och har samtidigt ingen åtkomst till Key Vault hemligheter.
  • Om programkoden redan har åtkomst till anslutningshemligheter med appinställningar krävs ingen ändring.

Det här får du lära dig:

  • Aktivera hanterade identiteter
  • Använda hanterade identiteter för att ansluta till Key Vault
  • Använda Key Vault-referenser
  • Få åtkomst till Azure AI-tjänster

Förutsättningar

Förbered din miljö för Azure CLI.

Skapa en app med anslutning till Azure AI-tjänster

  1. Skapa en resursgrupp som ska innehålla alla dina resurser:

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. Skapa en Azure AI-tjänstresurs. Ersätt <cs-resource-name> med ett unikt namn.

    # 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
    

    Anteckning

    --sku F0 skapar en azure AI-tjänstresurs på den kostnadsfria nivån. Varje prenumeration är begränsad till en kvot för en resurs på den kostnadsfria nivån TextAnalytics . Om du redan har överskrider kvoten använder du --sku S i stället.

Konfigurera .NET-app

Klona exempellagringsplatsen lokalt och distribuera exempelprogrammet till App Service. Ersätt <app-name> med ett unikt namn.

# 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

Konfigurera hemligheter som appinställningar

  1. Konfigurera Azure AI-tjänsthemligheter som appinställningar CS_ACCOUNT_NAME och 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. I webbläsaren navigerar du till din distribuerade app på <app-name>.azurewebsites.net och provar språkdetektorn med strängar på olika språk.

    Skärmbild som visar distribuerad språkidentifieringsapp i App Service.

    Om du tittar på programkoden kanske du ser felsökningsutdata för identifieringen i samma teckenfärg som bakgrunden. Du kan se det genom att försöka markera det tomma utrymmet direkt under resultatet.

Säker serverdelsanslutning

För närvarande lagras anslutningshemligheter som appinställningar i din App Service app. Den här metoden skyddar redan anslutningshemligheter från programkodbasen. Alla deltagare som kan hantera din app kan dock också se appinställningarna. I det här steget flyttar du anslutningshemligheterna till ett nyckelvalv och låser åtkomsten så att endast du kan hantera den och endast App Service appen kan läsa den med hjälp av dess hanterade identitet.

  1. Skapa ett nyckelvalv. Ersätt <vault-name> med ett unikt namn.

    # 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
    

    Parametern --enable-rbac-authorizationanger rollbaserad åtkomstkontroll i Azure (RBAC) som behörighetsmodell. Den här inställningen ogiltigförklarar som standard alla behörigheter för åtkomstprinciper.

  2. Ge dig själv rbac-rollen Key Vault secrets officer för valvet.

    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. Aktivera den systemtilldelade hanterade identiteten för din app och ge den rbac-rollen Key Vault secrets user för valvet.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Lägg till resursnamnet och prenumerationsnyckeln för Azure AI-tjänster som hemligheter i valvet och spara deras ID:n som miljövariabler i nästa steg.

    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. Tidigare angav du hemligheterna som appinställningar CS_ACCOUNT_NAME och CS_ACCOUNT_KEY i din app. Ange dem nu som nyckelvalvsreferenser i stället.

    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. I webbläsaren navigerar du till <app-name>.azurewebsites.net igen. Om du får tillbaka identifieringsresultatet ansluter du till Azure AI-tjänsternas slutpunkt med key vault-referenser.

Grattis, din app ansluter nu till Azure AI-tjänster med hemligheter som lagras i ditt nyckelvalv, utan några ändringar i programkoden.

Rensa resurser

I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell:

az group delete --name $groupName

Det kan några minuter att köra kommandot.

Nästa steg