Share via


Esercitazione: Proteggere la connessione del servizio cognitivo da JavaScript servizio app usando Key Vault

Servizio app di Azure può usare le identità gestite per connettersi ai servizi back-end senza una stringa di connessione, che elimina i segreti di connessione per gestire e mantenere sicura la connettività back-end in un ambiente di produzione. Per i servizi back-end che non supportano identità gestite e richiedono comunque segreti di connessione, è possibile usare Key Vault per gestire i segreti di connessione. Questa esercitazione usa i servizi di intelligenza artificiale di Azure come esempio per illustrare come viene eseguita in pratica. Al termine, si dispone di un'app che effettua chiamate a livello di codice ai servizi di intelligenza artificiale di Azure, senza archiviare i segreti di connessione all'interno di servizio app.

Suggerimento

I servizi di intelligenza artificiale di Azure supportano l'autenticazione tramite identità gestite, ma questa esercitazione usa l'autenticazione della chiave di sottoscrizione per illustrare come connettersi a un servizio di Azure che non supporta le identità gestite da Servizi app.

Diagramma dell'architettura per lo scenario di esercitazione.

Con questa architettura:

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

Contenuto dell'esercitazione:

  • Abilitare le identità gestite
  • Usare le identità gestite per connettersi a Key Vault
  • Usare i riferimenti di Key Vault
  • Accedere ai servizi di intelligenza artificiale di Azure

Prerequisiti

Preparare l'ambiente per l'interfaccia della riga di comando di Azure.

Creare app con connettività ai servizi di intelligenza artificiale di Azure

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

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. Creare una risorsa dei servizi di intelligenza artificiale di Azure. Sostituire <cs-resource-name> con un nome univoco scelto.

    # 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
    

    Nota

    --sku F0 crea una risorsa dei servizi di Intelligenza artificiale di Azure a livello gratuito. Ogni sottoscrizione è limitata a una quota di una risorsa a livello TextAnalytics gratuito. Se si è già oltre la quota, usare --sku S invece.

Configurare l'app JavaScript

Clonare il repository di esempio in locale e distribuire l'applicazione di esempio in servizio app. Sostituire <il nome dell'app con un nome> univoco.

# Clone and prepare sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/javascript
zip 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|14-lts"
az webapp config appsettings set --resource-group $groupName --name $appName --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
az webapp deployment source config-zip --resource-group $groupName --name $appName --src ./default.zip

I comandi precedenti:

  • Creare un piano di servizio app linux
  • Creare un'app Web per Node.js 14 LTS
  • Configurare l'app Web per installare i pacchetti npm nella distribuzione
  • Caricare il file zip e installare i pacchetti npm

Configurare i segreti come impostazioni dell'app

  1. Configurare i segreti dei servizi di intelligenza artificiale di Azure come impostazioni CS_ACCOUNT_NAME dell'app e 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. Nel browser passare all'app <app-name>.azurewebsites.net di distribuzione in e provare il rilevamento della lingua con stringhe in varie lingue.

    Screenshot che mostra l'app di rilevamento del linguaggio distribuita in servizio app.

    Se si esamina il codice dell'applicazione, è possibile notare l'output di debug per i risultati del rilevamento nello stesso colore del tipo di carattere dello sfondo. È possibile vederlo cercando di evidenziare lo spazio vuoto direttamente sotto il risultato.

Proteggere la connettività back-end

Al momento, i segreti di connessione vengono archiviati come impostazioni dell'app nell'app 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 questo passaggio si spostano i segreti di connessione in un insieme di credenziali delle chiavi e si blocca l'accesso in modo che solo l'app servizio app possa leggerla usando l'identità gestita.

  1. Creare un insieme di credenziali delle chiavi. Sostituire <il nome dell'insieme di credenziali con un nome> univoco.

    # 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
    

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

  2. Assegnare il ruolo di controllo degli accessi in base al ruolo di Key Vault Secret Officer 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 assegnargli il ruolo di controllo degli accessi in base al ruolo utente dei segreti Key Vault 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 e la chiave di sottoscrizione dei servizi di intelligenza artificiale di Azure come segreti all'insieme di credenziali e salvare gli 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, si impostano i segreti come impostazioni CS_ACCOUNT_NAME dell'app e CS_ACCOUNT_KEY nell'app. Impostarli ora come riferimenti all'insieme di credenziali delle chiavi .

    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. Nel browser passare di nuovo a <app-name>.azurewebsites.net . Se si ottengono nuovamente i risultati del rilevamento, si sta connettendo all'endpoint dei servizi di intelligenza artificiale di Azure con riferimenti all'insieme di credenziali delle chiavi.

Congratulazioni, l'app è ora in connessione ai servizi di intelligenza artificiale di Azure usando segreti mantenuti nell'insieme di credenziali delle chiavi, senza modifiche al codice dell'applicazione.

Pulire le risorse

Nei passaggi precedenti sono state create risorse di Azure in un gruppo di risorse. Se si ritiene che queste risorse non saranno necessarie in futuro, eliminare il gruppo di risorse eseguendo questo comando in Cloud Shell:

az group delete --name $groupName

L'esecuzione del comando può richiedere un minuto.

Passaggi successivi