Zelfstudie: Cognitive Service-verbinding vanuit een App Service beveiligen met Key Vault

Azure App Service kunnen beheerde identiteiten gebruiken om verbinding te maken met back-endservices zonder een connection string, waardoor verbindingsgeheimen voor het beheren en beveiligen van uw back-endconnectiviteit in een productieomgeving worden geëlimineerd. Voor back-endservices die geen beheerde identiteiten ondersteunen en nog steeds verbindingsgeheimen vereisen, kunt u verbindingsgeheimen Key Vault om verbindingsgeheimen te beheren. In deze zelfstudie Cognitive Services voorbeeld gebruikt om u te laten zien hoe dit in de praktijk wordt gedaan. Wanneer u klaar bent, hebt u een app die programmatische aanroepen naar Cognitive Services, zonder verbindingsgeheimen op te slaan in App Service.

Tip

Azure Cognitive Services bieden wel ondersteuning voor verificatie via beheerde identiteiten, maar in deze zelfstudie wordt gebruikgemaakt van de verificatie van abonnementssleutelsom te laten zien hoe u verbinding kunt maken met een Azure-service die geen ondersteuning biedt voor beheerde identiteiten van App Services.

Architectuurdiagram voor zelfstudiescenario.

Met deze architectuur:

  • Connectiviteit met Key Vault wordt beveiligd door beheerde identiteiten
  • App Service krijgt toegang tot de geheimen met behulp Key Vault als app-instellingen.
  • Toegang tot de sleutelkluis is beperkt tot de app. App-inzenders, zoals beheerders, hebben mogelijk volledige controle over de App Service-resources en hebben tegelijkertijd geen toegang tot de Key Vault geheimen.
  • Als uw toepassingscode al toegang heeft tot verbindingsgeheimen met app-instellingen, is er geen wijziging vereist.

U leert het volgende:

  • Beheerde identiteiten inschakelen
  • Beheerde identiteiten gebruiken om verbinding te maken met Key Vault
  • Key Vault-referenties gebruiken
  • Toegang Cognitive Services

Vereisten

Bereid uw omgeving voor op Azure CLI.

  • Gebruik de bash-omgeving in Azure Cloud shell.

    Cloud Shell starten in een nieuw venster

  • Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren.

    • Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij de Azure CLI voor aanvullende aanmeldingsopties.

    • Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.

    • Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.

Een app maken met connectiviteit met Cognitive Services

  1. Maak een resourcegroep die al uw resources bevat:

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. Maak een Cognitive Services resource. Vervang <cs-resource-name> door een unieke naam naar keuze.

    # 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
    

    Notitie

    --sku F0 maakt een gratis laag Cognitive Services resource. Elk abonnement is beperkt tot een quotum van één resource in de gratis TextAnalytics laag. Als u het quotum al hebt overschreden, gebruikt u --sku S in plaats daarvan.

  3. Kloon de voorbeeldopslagplaats lokaal en implementeer de voorbeeldtoepassing in App Service. Vervang <app-name> door een unieke naam.

    # 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. Configureer de Cognitive Services als app-instellingen CS_ACCOUNT_NAME en 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. Navigeer in de browser naar uw implementatie-app op en probeer de taaldetector uit <app-name>.azurewebsites.net met tekenreeksen in verschillende talen.

    Schermopname van de geïmplementeerde taaldetector-app in App Service.

    Als u de toepassingscode bekijkt, ziet u mogelijk de foutopsporingsuitvoer voor de detectieresultaten in dezelfde tekstkleur als de achtergrond. U kunt deze zien door te proberen de witruimte direct onder het resultaat te markeren.

Back-endconnectiviteit beveiligen

Op dit moment worden verbindingsgeheimen opgeslagen als app-instellingen in uw App Service app. Deze aanpak is al het beveiligen van verbindingsgeheimen vanuit uw toepassingscodebasis. Elke inzender die uw app kan beheren, kan echter ook de app-instellingen zien. In deze stap verplaatst u de verbindingsgeheimen naar een sleutelkluis en vergrendelt u de toegang, zodat alleen u deze kunt beheren en alleen de App Service-app deze kan lezen met behulp van de beheerde identiteit.

  1. Een sleutelkluis maken. Vervang <vault-name> door een unieke naam.

    # 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
    

    Met --enable-rbac-authorization de parameter wordt op rollen gebaseerd toegangsbeheer (RBAC) van Azure als machtigingsmodel gebruikt. Met deze instelling worden alle machtigingen voor toegangsbeleid standaard ongeldig gemaakt.

  2. Geef uzelf de Key Vault Secrets Officer RBAC-rol voor de kluis.

    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. Schakel de door het systeem toegewezen beheerde identiteit in voor uw app en geef deze de Key Vault RBAC-rol Geheimengebruiker voor de kluis.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Voeg de Cognitive Services en de abonnementssleutel als geheimen toe aan de kluis en sla hun ID's op als omgevingsvariabelen voor de volgende stap.

    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. Voorheen hebt u de geheimen ingesteld als CS_ACCOUNT_NAME app-instellingen en in uw CS_ACCOUNT_KEY app. Stel ze nu in als key vault-verwijzingen.

    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. Navigeer in de browser opnieuw naar <app-name>.azurewebsites.net . Als u detectieresultaten terug krijgt, maakt u verbinding met het Cognitive Services eindpunt met key vault-verwijzingen.

Gefeliciteerd, uw app maakt nu verbinding met Cognitive Services geheimen die in uw sleutelkluis worden bewaard, zonder wijzigingen in uw toepassingscode.

Resources opschonen

In de voorgaande stappen hebt u Azure-resources in een resourcegroep gemaakt. Als u deze resources niet meer nodig denkt te hebben, verwijdert u de resourcegroep door de volgende opdracht in Cloud Shell uit te voeren:

az group delete --name $groupName

Het kan een minuut duren voordat deze opdracht is uitgevoerd.

Volgende stappen