Zelfstudie: Cognitive Service-verbinding beveiligen vanuit JavaScript App Service met behulp van Key Vault

Azure App Service kan beheerde identiteiten gebruiken om verbinding te maken met back-endservices zonder een verbindingsreeks. Deze aanpak elimineert verbindingsgeheimen voor het beheren en beveiligen van uw back-endconnectiviteit in een productieomgeving. Wanneer u klaar bent, hebt u een app waarmee programmatische aanroepen naar Foundry Tools worden gedaan zonder dat u verbindingsgeheimen hoeft op te slaan in App Service.

Voor back-endservices die geen beheerde identiteiten ondersteunen en nog steeds verbindingsgeheimen vereisen, kunt u Azure Key Vault gebruiken om verbindingsgeheimen te beheren. In deze zelfstudie wordt Foundry Tools als voorbeeld gebruikt. Wanneer u klaar bent, hebt u een app waarmee programmatische aanroepen naar Foundry Tools worden gedaan zonder dat er verbindingsgeheimen in App Service worden opgeslagen.

Tip

Foundry Tools ondersteunt verificatie via beheerde identiteiten. In deze zelfstudie wordt gebruikgemaakt van verificatie van abonnementssleutels om te laten zien hoe u verbinding kunt maken met een Azure-service die geen ondersteuning biedt voor beheerde identiteiten vanuit App Service.

Diagram met de gebruiker die verbinding maakt met een service, die op zijn beurt verbinding maakt met een sleutelkluis voor toegang tot Cognitive Services.

In deze architectuur:

  • Beheerde identiteiten zorgen voor de beveiliging van de connectiviteit met de key vault.
  • App Service heeft toegang tot de geheimen met behulp van Key Vault-verwijzingen 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.

In deze zelfstudie leert u het volgende:

  • Beheerde identiteiten inschakelen
  • Beheerde identiteiten gebruiken om verbinding te maken met Key Vault
  • Key Vault verwijzingen gebruiken
  • Toegang tot gieterijgereedschap

Vereisten

Bereid uw omgeving voor op de Azure CLI.

Een app maken met connectiviteit met Foundry Tools

  1. Maak een resourcegroep die al uw resources bevat:

    # Save the resource group name as a variable for convenience
    groupName=myKVResourceGroup
    region=canadacentral
    
    az group create --name $groupName --location $region
    
  2. Maak een Foundry Tools-resource. Vervang <cs-resource-name> door een unieke naam.

    # 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
    

    Notitie

    --sku F0 creëert een gratis niveau Foundry Tools-resource. Elk abonnement is beperkt tot een quotum van één resource in de gratis laag TextAnalytics . Als u uw quotum al hebt gebruikt, gebruik dan --sku S in plaats daarvan.

JavaScript-app configureren

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

# Clone and prepare sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/javascript
zip -r default.zip .

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

az appservice plan create --resource-group $groupName --name $appName --sku FREE --location $region --is-linux
az webapp create --resource-group $groupName --plan $appName --name $appName --runtime "node:24-lts"
az webapp config appsettings set --resource-group $groupName --name $appName --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
az webapp deploy --resource-group $groupName --name $appName --src-path ./default.zip

De voorgaande opdrachten:

  • Een Linux App Service-plan maken
  • Een web-app maken voor Node.js 24 LTS
  • De web-app configureren om de npm-pakketten te installeren bij de implementatie
  • Upload het zip-bestand en installeer de npm-pakketten

Geheimen configureren als app-instellingen

  1. Configureer de Foundry Tools-geheimen als app-instellingen CS_ACCOUNT_NAME en 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. Ga in een browser naar uw geïmplementeerde app op <app-name>.azurewebsites.net. Probeer de taaldetector door tekenreeksen in verschillende talen in te voeren.

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

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

Back-endconnectiviteit beveiligen

Verbindingsgeheimen worden nu opgeslagen als app-instellingen in uw App Service-app. Deze methode beveiligt al verbindingsgeheimen vanuit uw toepassingscodebasis. Elke inzender die uw app kan beheren, kan echter ook de app-instellingen zien. In deze sectie verplaatst u de verbindingsgeheimen naar een sleutelkluis. U vergrendelt 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 <kluisnaam> door een unieke naam.

    # 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
    

    De parameter --enable-rbac-authorizationsets Azure op rollen gebaseerd toegangsbeheer (RBAC) als machtigingsmodel. Met deze instelling worden standaard alle machtigingen voor toegangsbeleid ongeldig gemaakt.

  2. Wijs uzelf de rol Key Vault Secrets Officer toe voor de key vault.

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

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Voeg de resourcenaam van Foundry Tools en de abonnementssleutel (Subscription Key) als geheime gegevens 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. Eerder hebt u de geheimen ingesteld als app-instellingen CS_ACCOUNT_NAME en CS_ACCOUNT_KEY in uw app. Stel ze nu in als sleutelkluis referenties.

    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. Ga in een browser opnieuw naar <app-name>.azurewebsites.net . Als u detectieresultaten terugkrijgt, maakt u verbinding met het Foundry Tools-eindpunt met behulp van key vault-verwijzingen.

Gefeliciteerd, uw app maakt nu verbinding met Foundry Tools met behulp van geheimen die in uw sleutelkluis worden bewaard en u hebt geen wijzigingen aangebracht in uw toepassingscode.

Resources opschonen

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

az group delete --name $groupName

Het uitvoeren van deze opdracht kan een minuut duren.