Esercitazione: Connessione sicura degli strumenti Foundry dal servizio app .NET con Key Vault

Il servizio app di Azure può usare le identità gestite per connettersi ai servizi back-end senza una stringa di connessione. Questo approccio elimina i segreti di connessione per gestire e mantenere sicura la connettività back-end in un ambiente di produzione. Al termine, si dispone di un'app che effettua chiamate programmatiche a Foundry Tools senza archiviare segreti di connessione nel Servizio App.

Per i servizi back-end che non supportano le identità gestite e richiedono ancora segreti di connessione, è possibile usare Azure Key Vault per gestire i segreti di connessione. Questa esercitazione usa gli strumenti Foundry come esempio. Al termine, si avrà un'app che effettua chiamate programmatiche a Foundry Tools senza archiviare segreti di connessione all'interno di App Service.

Suggerimento

Foundry Tools supporta l'autenticazione tramite identità gestite. Questa esercitazione usa l'autenticazione della chiave di sottoscrizione per illustrare come connettersi a un servizio di Azure che non supporta le identità gestite dal servizio app.

Diagramma che mostra un utente connesso a un servizio, che a sua volta si connette a un Key Vault per accedere ai Servizi cognitivi.

In questa architettura:

  • Le identità gestite assicurano la connettività all'archivio delle chiavi.
  • Il Servizio App accede ai segreti usando riferimenti di Key Vault come impostazioni dell'app.
  • L'accesso all'insieme di credenziali delle chiavi è limitato all'applicazione. I collaboratori dell'app, ad esempio gli amministratori, potrebbero avere il controllo completo delle risorse del servizio app e allo stesso tempo non hanno accesso ai segreti di Key Vault.
  • Se il codice dell'applicazione accede già ai segreti di connessione con le impostazioni dell'app, non è necessaria alcuna modifica.

In questa esercitazione si apprenderà quanto segue:

  • Abilitare le identità gestite
  • Usare le identità gestite per connettersi a Key Vault
  • Usare i riferimenti di Key Vault
  • Accedi agli strumenti di fonderia

Prerequisiti

Preparare l'ambiente per il Azure CLI.

Creare un'applicazione con connettività a Foundry Tools

  1. Creare un gruppo di risorse per contenere tutte le risorse:

    # Save the resource group name as a variable for convenience
    groupName=myKVResourceGroup
    region=canadacentral
    
    az group create --name $groupName --location $region
    
  2. Creare una risorsa degli strumenti Foundry. Sostituire <cs-resource-name> con un nome univoco.

    # 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
    

    Nota

    --sku F0 crea una risorsa Foundry Tools gratuita. Ogni sottoscrizione è limitata a una quota di una risorsa di livello TextAnalytics gratuito. Se è già stata usata la quota, usare --sku S invece .

Configurare un'app .NET

Clonare il repository di esempio in locale sul computer e distribuire l'applicazione di esempio su App Service. Sostituire <app-name> con un nome univoco.

# 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

Configurare i segreti come impostazioni dell'app

  1. Configurare i segreti di Strumenti Foundry come impostazioni dell'app CS_ACCOUNT_NAME e 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. In un browser passare all'app distribuita in <app-name>.azurewebsites.net. Provare il rilevamento della lingua immettendo stringhe in varie lingue.

    Screenshot che mostra l'app di rilevamento della lingua distribuita in App Service.

    Se si esamina il codice dell'applicazione, l'output di debug per i risultati del rilevamento potrebbe essere nello stesso colore del tipo di carattere dello sfondo. È possibile visualizzare l'output evidenziando lo spazio vuoto direttamente sotto il risultato.

Connettività back-end sicura

Le credenziali di connessione vengono ora archiviate come parametri di applicazione nel tuo servizio App. Questo approccio protegge già i segreti di connessione dalla codebase dell'applicazione. Tuttavia, qualsiasi collaboratore che può gestire l'app può anche visualizzare le impostazioni dell'app. In questa sezione si spostano i segreti di connessione in un key vault. Bloccate l'accesso in modo che solo tu possa gestirlo e solo App Service possa leggerlo usando la sua identità gestita.

  1. Creare un insieme di credenziali delle chiavi. Sostituire <vault-name> con un nome univoco.

    # 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
    

    Il parametro --enable-rbac-authorizationimposta il controllo degli accessi in base al ruolo di Azure come modello di autorizzazione. Questa impostazione invalida tutte le autorizzazioni dei criteri di accesso per impostazione predefinita.

  2. Assegnarsi il ruolo Responsabile dei segreti di Key Vault di Controllo degli accessi in base al ruolo per l'insieme di credenziali.

    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. Abilitare l'identità gestita assegnata dal sistema per l'app e assegnarle il ruolo Utente dei segreti di Key Vault di Controllo degli accessi in base al ruolo per l'insieme di credenziali.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Aggiungere il nome della risorsa Foundry Tools e la chiave di sottoscrizione come "secrets" al vault, e salvare i loro ID come variabili di ambiente per il passaggio successivo.

    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. In precedenza, i segreti sono stati impostati come impostazioni dell'app CS_ACCOUNT_NAME e CS_ACCOUNT_KEY. Ora impostali come riferimenti al Key Vault.

    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. In un browser passare di nuovo a <app-name>.azurewebsites.net . Se si ottengono i risultati del rilevamento, ci si connette all'endpoint degli Strumenti Foundry usando i riferimenti a Key Vault.

Congratulazioni, la tua app ora si connette a Foundry Tools usando i segreti conservati nell'insieme di chiavi e non sono state apportate modifiche al codice dell'applicazione.

Pulire le risorse

Nei passaggi precedenti sono state create le risorse di Azure in un gruppo di risorse. Se non si prevede che queste risorse siano necessarie in futuro, eliminare il gruppo di risorse eseguendo il comando seguente nel Cloud Shell:

az group delete --name $groupName

L'esecuzione del comando può richiedere un minuto.