Delen via


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

Azure-app Service kan beheerde identiteiten gebruiken om verbinding te maken met back-endservices zonder een verbindingsreeks, waardoor verbindingsgeheimen niet meer kunnen worden beheerd en uw back-endconnectiviteit veilig blijft in een productieomgeving. Voor back-endservices die geen ondersteuning bieden voor beheerde identiteiten en waarvoor nog steeds verbindingsgeheimen zijn vereist, kunt u Key Vault gebruiken om verbindingsgeheimen te beheren. In deze zelfstudie wordt gebruikgemaakt van Azure AI-services als voorbeeld om u te laten zien hoe dit in de praktijk wordt gedaan. Wanneer u klaar bent, hebt u een app die programmatische aanroepen naar Azure AI-services uitvoert, zonder dat er verbindingsgeheimen in App Service worden opgeslagen.

Tip

Azure AI-services ondersteunen verificatie via beheerde identiteiten, maar in deze zelfstudie wordt gebruikgemaakt van de verificatie van de abonnementssleutel om te laten zien hoe u verbinding kunt maken met een Azure-service die geen ondersteuning biedt voor beheerde identiteiten van App Services.

Architectuurdiagram voor het zelfstudiescenario.

Met deze architectuur:

  • Connectiviteit met Key Vault wordt beveiligd door beheerde identiteiten
  • App Service heeft toegang tot de geheimen met 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.

U leert het volgende:

  • Beheerde identiteiten inschakelen
  • Beheerde identiteiten gebruiken om verbinding te maken met Key Vault
  • Key Vault-referenties gebruiken
  • Toegang tot Azure AI-services

Vereisten

Bereid uw omgeving voor op Azure CLI.

Een app maken met connectiviteit met Azure AI-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 Azure AI-servicesresource. Vervang <cs-resource-name> door een unieke naam van uw 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 hiermee maakt u een azure AI-servicesresource in de gratis laag. Elk abonnement is beperkt tot een quotum van één resource in de gratis laag TextAnalytics . Als u het quotum al hebt overschreden, gebruikt --sku S u in plaats daarvan.

.NET-app configureren

Kloon de voorbeeldopslagplaats lokaal en implementeer de voorbeeldtoepassing in App Service. Vervang <de app-naam> 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

Geheimen configureren als app-instellingen

  1. Configureer de geheimen van Azure AI-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"
    
  2. Navigeer in de browser naar uw implementatie-app op <app-name>.azurewebsites.net en probeer de taaldetector uit met tekenreeksen in verschillende talen.

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

    Als u de toepassingscode bekijkt, ziet u mogelijk dat de foutopsporingsuitvoer voor de detectie resulteert in dezelfde tekstkleur als de achtergrond. U kunt dit zien door 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 methode beveiligt al 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 <kluisnaam> 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 ingesteld als het machtigingsmodel. Met deze instelling worden standaard alle machtigingen voor toegangsbeleid ongeldig.

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

    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 rol Key Vault Secrets User RBAC voor de kluis.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Voeg de resourcenaam en abonnementssleutel van Azure AI-services toe als geheimen 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 sleutelkluisverwijzingen .

    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 opnieuw naar <app-name>.azurewebsites.net de browser. Als u detectieresultaten terugkrijgt, maakt u verbinding met het Azure AI-services-eindpunt met key vault-verwijzingen.

Gefeliciteerd, uw app maakt nu verbinding met Azure AI-services met behulp van 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