Självstudie: Säker Cognitive Service-anslutning från App Service med Key Vault

Azure App Service kan använda hanterade identiteter för att ansluta till backend-tjänster utan en anslutningssträng, vilket eliminerar anslutningshemligheter att hantera och skyddar din backend-anslutning i en produktionsmiljö. För backend-tjä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 Cognitive Services här självstudien används 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 Cognitive Services, utan att lagra några anslutningshemligheter i App Service.

Tips

Azure Cognitive Services stöder autentisering via hanterade identiteter, men den här självstudien använder autentisering med prenumerationsnyckelfö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 åtkomst till hemligheterna med hjälp 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 de Key Vault hemligheterna.
  • Om din programkod 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
  • Åtkomst Cognitive Services

Förutsättningar

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

  • Använd bash-miljön i Azure Cloud Shell.

    Starta Cloud Shell i ett nytt fönster

  • Om du vill kan du i stället installera Azure CLI för att köra CLI-referenskommandon.

    • Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Fler inloggningsalternativ finns i Logga in med Azure CLI.

    • När du uppmanas till det installerar du Azure CLI-tillägg vid första användning. Mer information om tillägg finns i Använda tillägg med Azure CLI.

    • Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.

Skapa app med anslutning till Cognitive Services

  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 Cognitive Services resurs. Ersätt <cs-resource-name> med ett unikt namn som du själv väljer.

    # 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 kostnadsfri nivå Cognitive Services resurs. Varje prenumeration är begränsad till en kvot för en resurs på den kostnadsfria TextAnalytics nivån. Om du redan har över kvoten använder du --sku S i stället.

  3. Klona exempeldatabasen 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
    
  4. Konfigurera Cognitive Services hemligheter 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"
    
  5. I webbläsaren går du till din distribuera app på och <app-name>.azurewebsites.net provar språkdetektorn med strängar på olika språk.

    Skärmbild som visar appen för distribuerad språkdetektor i App Service.

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

Säker backend-anslutning

För tillfället lagras anslutningshemligheter som appinställningar i din App Service appen. Den här metoden skyddar redan anslutningshemligheter från programkodbasen. Alla deltagare som kan hantera din app kan dock även se appinställningarna. I det här steget flyttar du anslutningshemligheterna till ett nyckelvalv och låser åtkomsten så att endast du kan hantera det och endast App Service-appen kan läsa den med 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-authorization anger Rollbaserad åtkomstkontroll (RBAC) i Azure som behörighetsmodell. Den här inställningen gör som standard alla behörigheter för åtkomstprinciper ogiltiga.

  2. Ge dig själv Key Vault RBAC-rollen hemlighetsansvarig för valvet.

    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    myId=$(az ad signed-in-user show --query objectId --output tsv)
    az role assignment create --role "Key Vault Secrets Officer" --assignee-object-id $myId --assignee-principal-type User --scope $vaultResourceId
    
  3. Aktivera den system tilldelade hanterade identiteten för din app och ge den RBAC-rollen Key Vault hemligheter för valvet.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Lägg till Cognitive Services resursnamn och prenumerationsnyckel som hemligheter i valvet och spara deras ID:er som miljövariabler för 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 konfigurerade du hemligheterna som CS_ACCOUNT_NAME appinställningar CS_ACCOUNT_KEY och 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. Gå till igen i <app-name>.azurewebsites.net webbläsaren. Om du får tillbaka identifieringsresultaten ansluter du till slutpunkten för Cognitive Services med nyckelvalvsreferenser.

Grattis, din app ansluter nu till Cognitive Services med hemligheter som finns i nyckelvalvet, utan ä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