Självstudie: Säkerställa Foundry Tools-anslutning från en .NET App Service genom Key Vault

Azure App Service kan använda hanterade identiteter för att ansluta till serverdelstjänster utan en anslutningssträng. Den här metoden eliminerar behovet av att hantera anslutningshemligheter och håller backend-anslutningen säker i en produktionsmiljö. När du är klar har du en app som gör programmatiska anrop till Foundry Tools utan att lagra några anslutningshemligheter i App Service.

För serverdelstjänster som inte stöder hanterade identiteter och fortfarande kräver anslutningshemligheter kan du använda Azure Key Vault för att hantera anslutningshemligheter. I den här självstudien används Foundry Tools som exempel. När du är klar har du en app som gör programmatiska anrop till Foundry Tools utan att lagra några anslutningshemligheter i App Service.

Tips

Foundry Tools stöder autentisering via hanterade identiteter. I den här självstudien används prenumerationsnyckelautentisering för att visa hur du kan ansluta till en Azure-tjänst som inte stöder hanterade identiteter från App Service.

Diagram som visar användaren som ansluter till en tjänst, som i sin tur ansluter till ett nyckelvalv för att få åtkomst till Cognitive Services.

I den här arkitekturen:

  • Hanterade identiteter skyddar anslutningen till nyckelvalvet.
  • App Service kommer åt hemligheterna genom Key Vault-referenser som app-inställningar.
  • Åtkomsten till nyckelvalvet är begränsad till appen. Appdeltagare, till exempel administratörer, kan ha fullständig kontroll över App Service-resurserna och har samtidigt ingen åtkomst till Key Vault-hemligheterna.
  • Om programkoden redan har åtkomst till anslutningshemligheter med appinställningar krävs ingen ändring.

I den här handledningen lär du dig:

  • Aktivera hanterade identiteter
  • Använda hanterade identiteter för att ansluta till Key Vault
  • Använd Key Vault-referenser
  • Åtkomst till gjuteriverktyg

Förutsättningar

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

Skapa en app med anslutning till Foundry Tools

  1. Skapa en resursgrupp som ska innehålla alla dina resurser:

    # Save the resource group name as a variable for convenience
    groupName=myKVResourceGroup
    region=canadacentral
    
    az group create --name $groupName --location $region
    
  2. Skapa en Foundry Tools-resurs. Ersätt <cs-resource-name> med ett unikt namn.

    # 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
    

    Kommentar

    --sku F0 skapar en Foundry Tools-resurs på den kostnadsfria nivån. Varje prenumeration är begränsad till en kvot för en resurs på den kostnadsfria nivån TextAnalytics . Om du redan har använt din kvot använder du --sku S i stället.

Konfigurera en .NET-app

Klona exempellagringsplatsen lokalt och distribuera exempelprogrammet till App Service. Ersätt <appnamn> med ett unikt namn.

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

# Clone the 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

Konfigurera hemligheter som appinställningar

  1. Konfigurera Foundry Tools-hemligheterna som appinställningar CS_ACCOUNT_NAME och 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. I en webbläsare går du till din distribuerade app på <app-name>.azurewebsites.net. Prova språkidentifieringen genom att ange strängar på olika språk.

    Skärmbild som visar den distribuerade språkidentifieringsappen i App Service.

    Om du tittar på programkoden kan felsökningsresultatet för identifieringsresultaten ha samma teckenfärg som bakgrunden. Du kan se utdata genom att markera det tomma utrymmet direkt under resultatet.

Säker serverdelsanslutning

Anslutningshemligheter lagras nu som appinställningar i din App Service-app. Den här metoden skyddar redan anslutningshemligheter från programkodbasen. Alla deltagare som kan hantera din app kan dock också se appinställningarna. I det här avsnittet flyttar du anslutningshemligheterna till ett nyckelvalv. Du låser åtkomsten så att endast du kan hantera den och endast App Service-appen kan läsa den med hjälp av dess hanterade identitet.

  1. Skapa ett nyckelvalv. Ersätt <valvnamn> med ett unikt namn.

    # 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
    

    Parametern --enable-rbac-authorizationsätter Azure rollbaserad-åtkomstkontroll (RBAC) som behörighetsmodell. Den här inställningen ogiltigförklarar som standard alla åtkomstprincipers behörigheter.

  2. Ge dig själv rollen Key Vault Secrets Officer RBAC för valvet.

    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. Aktivera den systemtilldelade hanterade identiteten för din app och ge den Key Vault Secrets User RBAC-roll för valvet.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Lägg till foundry Tools-resursnamnet och prenumerationsnyckeln som hemligheter i valvet och spara deras ID:n 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 har du angett hemligheterna som appinställningar CS_ACCOUNT_NAME och CS_ACCOUNT_KEY 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. I en webbläsare går du till <app-name>.azurewebsites.net igen. Om du får tillbaka identifieringsresultatet ansluter du till slutpunkten Foundry Tools med hjälp av key vault-referenser.

Grattis, appen ansluter nu till Foundry Tools med hjälp av hemligheter som finns i nyckelvalvet och du har inte ändrat programkoden.

Rensa resurser

I föregående steg skapade du Azure resurser i en resursgrupp. Om du inte förväntar dig att behöva 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 ta en minut att köra det här kommandot.