Zelfstudie: Cognitive Service-verbinding vanaf .NET-App Service beveiligen met behulp van Key Vault
Azure App Service kunt beheerde identiteiten gebruiken om verbinding te maken met back-endservices zonder een connection string, waardoor verbindingsgeheimen voor het beheer worden geëlimineerd en uw back-endconnectiviteit veilig blijft in een productieomgeving. Voor back-endservices die geen beheerde identiteiten ondersteunen en nog steeds verbindingsgeheimen vereisen, 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 de verificatie van de abonnementssleutel gebruikt om te laten zien hoe u verbinding kunt maken met een Azure-service die geen beheerde identiteiten vanuit App Services ondersteunt.
Met deze architectuur:
- Connectiviteit met Key Vault wordt beveiligd door beheerde identiteiten
- App Service 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.
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.
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie Quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
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 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 Azure AI-services
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
Maak een Azure AI-servicesresource. 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 azure AI-servicesresource in de gratis laag. Elk abonnement is beperkt tot een quotum van één resource in de gratis laagTextAnalytics
. 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 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
Geheimen configureren als app-instellingen
Configureer de geheimen van Azure AI-services als app-instellingen
CS_ACCOUNT_NAME
enCS_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"
Navigeer in de browser naar uw implementatie-app op
<app-name>.azurewebsites.net
en probeer de taaldetector uit met tekenreeksen in verschillende talen.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.
Beveiligde back-endconnectiviteit
Op dit moment worden verbindingsgeheimen opgeslagen als app-instellingen in uw App Service-app. Met deze methode worden al verbindingsgeheimen van uw toepassingscodebasis beveiligd. 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.
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 de
--enable-rbac-authorization
parameter wordt op rollen gebaseerd toegangsbeheer (RBAC) van Azure ingesteld als het machtigingsmodel. Met deze instelling worden standaard alle machtigingen voor toegangsbeleid ongeldig gemaakt.Geef uzelf de RBAC-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
Schakel de door het systeem toegewezen beheerde identiteit voor uw app in en geef deze de RBAC-rol Key Vault Geheimen-gebruiker voor de kluis.
az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role "Key Vault Secrets User"
Voeg de resourcenaam en abonnementssleutel van Azure AI Services toe als geheimen aan de kluis en sla de bijbehorende 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)
Voorheen hebt u de geheimen ingesteld als app-instellingen
CS_ACCOUNT_NAME
enCS_ACCOUNT_KEY
in uw app. Stel deze 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)"
Navigeer in de browser opnieuw naar
<app-name>.azurewebsites.net
. Als u detectieresultaten terugkrijgt, maakt u verbinding met het Azure AI-services-eindpunt met sleutelkluisverwijzingen.
Gefeliciteerd, uw app maakt nu verbinding met Azure AI-services met behulp van geheimen die in uw sleutelkluis worden bewaard, zonder wijzigingen in de 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
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort: Gedurende 2024 worden GitHub Issues uitgefaseerd als het feedbackmechanisme voor inhoud. Dit wordt vervangen door een nieuw feedbacksysteem. Ga voor meer informatie naar:Feedback verzenden en bekijken voor