Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questo articolo, configuri un'app di Azure App Service con comunicazione sicura, isolata dalla rete ai servizi back-end. Lo scenario di esempio usato si trova in Tutorial: Proteggere la connessione al servizio cognitivo dal servizio app usando Key Vault. Al termine, si dispone di un'app del servizio app che accede sia a Key Vault che a Foundry Tools tramite una rete virtuale di Azure. Nessun altro traffico è autorizzato ad accedere a tali risorse back-end. Tutto il traffico verrà isolato all'interno della rete virtuale tramite l'integrazione della rete virtuale e gli endpoint privati.
In un servizio multi-tenant, il traffico di rete in uscita dall'app del tuo App Service verso altri servizi di Azure condivide lo stesso ambiente con altre applicazioni o anche con altre sottoscrizioni. Anche se il traffico stesso può essere crittografato, alcuni scenari potrebbero richiedere un livello di sicurezza aggiuntivo tramite l'isolamento della comunicazione back-end da altri traffico di rete. Questi scenari sono in genere accessibili alle aziende di grandi dimensioni con un elevato livello di esperienza, ma il servizio app lo mette in portata con l'integrazione della rete virtuale.
In questa architettura:
- Il traffico pubblico verso i servizi back-end è bloccato.
- Il traffico in uscita dal servizio app viene instradato alla rete virtuale e può raggiungere i servizi back-end.
- Il servizio app può eseguire la risoluzione DNS ai servizi back-end tramite le zone DNS private.
Cosa imparerai:
- Creare una rete virtuale e subnet per l'integrazione della rete virtuale del servizio app
- Creare zone DNS private
- Creare endpoint privati
- Configurare l'integrazione della rete virtuale nel servizio app
Prerequisiti
Completare l'esercitazione: Proteggere la connessione di Cognitive Service dall'App Service usando Key Vault e creare l'applicazione per il rilevamento della lingua.
Assicurarsi di impostare le seguenti variabili di ambiente da Esercitazione: Mettere in sicurezza la connessione al servizio cognitivo dal servizio app utilizzando Key Vault:
groupName=myKVResourceGroup region=canadacentral csResourceName=<cs-resource-name> appName=<app-name> vaultName=<vault-name> planName=<plan-name> csResourceKVUri=<cs-resource-kv-uri> csKeyKVUri=<cs-key-kv-uri>
Creare una rete virtuale e le subnet
Crea una rete virtuale. Sostituire <virtual-network-name> con un nome univoco.
# Save the virtual network name as a variable for convenience vnetName=<virtual-network-name> az network vnet create --resource-group $groupName --location $region --name $vnetName --address-prefixes 10.0.0.0/16Crea una subnet per l'integrazione della rete virtuale di App Service.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name vnet-integration-subnet --address-prefixes 10.0.0.0/24 --delegations Microsoft.Web/serverfarms --private-endpoint-network-policies EnabledPer App Service, è consigliabile che la subnet di integrazione della rete virtuale abbia un blocco CIDR di
/26come minimo. Vedere Requisiti della subnet di integrazione della rete virtuale./24è più che sufficiente.--delegations Microsoft.Web/serverfarmsspecifica che la subnet è delegata per l'integrazione della rete virtuale di Servizio app.Creare un'altra subnet per gli endpoint privati.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name private-endpoint-subnet --address-prefixes 10.0.1.0/24 --private-endpoint-network-policies DisabledPer le subnet degli endpoint privati, è necessario disabilitare i criteri di rete degli endpoint privati.
Creare zone DNS private
Poiché le risorse di Key Vault e Foundry Tools si troveranno dietro gli endpoint privati, è necessario definire le zone DNS private per tali endpoint. Queste zone vengono usate per ospitare i record DNS per gli endpoint privati e consentire ai client di trovare i servizi back-end in base al nome.
Creare due zone DNS private, una per la risorsa Foundry Tools e una per il key vault.
az network private-dns zone create --resource-group $groupName --name privatelink.cognitiveservices.azure.com az network private-dns zone create --resource-group $groupName --name privatelink.vaultcore.azure.netPer altre informazioni su queste impostazioni, vedere Configurazione DNS dell'endpoint privato di Azure.
Collegare le zone DNS private alla rete virtuale.
az network private-dns link vnet create --resource-group $groupName --name cognitiveservices-zonelink --zone-name privatelink.cognitiveservices.azure.com --virtual-network $vnetName --registration-enabled False az network private-dns link vnet create --resource-group $groupName --name vaultcore-zonelink --zone-name privatelink.vaultcore.azure.net --virtual-network $vnetName --registration-enabled False
Creare endpoint privati
Nella subnet dell'endpoint privato della rete virtuale, crea un endpoint privato per la risorsa Foundry Tools.
# Get Foundry Tools resource ID csResourceId=$(az cognitiveservices account show --resource-group $groupName --name $csResourceName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securecstext-pe --location $region --connection-name securecstext-pc --private-connection-resource-id $csResourceId --group-id account --vnet-name $vnetName --subnet private-endpoint-subnetCreare un gruppo di zone DNS per l'endpoint privato di Foundry Tools. Un gruppo di zone DNS è un collegamento tra la zona DNS privata e l'endpoint privato. Questo collegamento consente di aggiornare automaticamente la zona DNS privata quando è presente un aggiornamento all'endpoint privato.
az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securecstext-pe --name securecstext-zg --private-dns-zone privatelink.cognitiveservices.azure.com --zone-name privatelink.cognitiveservices.azure.comBloccare il traffico pubblico verso la risorsa Strumenti Foundry.
az rest --uri $csResourceId?api-version=2024-10-01 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json' # Repeat the following command until the output is "Succeeded" az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningStateAnnotazioni
Verificare che lo stato di provisioning della modifica sia
"Succeeded". È quindi possibile osservare la modifica del comportamento nell'app di esempio. È comunque possibile caricare l'app, ma se si tenta di selezionare il pulsante Rileva , viene visualizzato unHTTP 500errore. L'app ha perso la connettività alla risorsa Foundry Tools tramite la rete condivisa.Ripetere i passaggi precedenti per il vault delle chiavi.
# Create a private endpoint for the key vault vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securekeyvault-pe --location $region --connection-name securekeyvault-pc --private-connection-resource-id $vaultResourceId --group-id vault --vnet-name $vnetName --subnet private-endpoint-subnet # Create a DNS zone group for the endpoint az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securekeyvault-pe --name securekeyvault-zg --private-dns-zone privatelink.vaultcore.azure.net --zone-name privatelink.vaultcore.azure.net # Block public traffic to the key vault az keyvault update --name $vaultName --default-action DenyForzare un aggiornamento immediato dei riferimenti dell'insieme di credenziali nell'app reimpostando le impostazioni dell'app. Per altre informazioni, vedere Rotazione.
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)"Annotazioni
Anche in questo caso, è possibile osservare la modifica del comportamento nell'app di esempio. Non è più possibile caricare l'app perché non può più accedere ai riferimenti al Key Vault. L'app ha perso la connettività all'insieme di credenziali delle chiavi nella rete condivisa.
I due endpoint privati sono accessibili solo ai client all'interno della rete virtuale creata. Non è nemmeno possibile accedere ai segreti nell'insieme di credenziali delle chiavi dalla pagina Segreti nel portale di Azure, perché il portale vi accede tramite la rete internet pubblica. Vedere Gestire le risorse bloccate.
Configurare l'integrazione della rete virtuale nell'app
Ridimensionare l'app fino a un piano tariffario supportato. Vedere Integrare l'app con una rete virtuale di Azure.
az appservice plan update --name $planName --resource-group $groupName --sku S1Applicare HTTPS per le richieste in ingresso. Questo passaggio non è correlato allo scenario corrente, ma è importante.
az webapp update --resource-group $groupName --name $appName --https-onlyAbilitare l'integrazione della rete virtuale nell'app.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetL'integrazione della rete virtuale consente al traffico in uscita di fluire direttamente nella rete virtuale. Per impostazione predefinita, solo il traffico IP locale definito in RFC-1918 viene instradato alla rete virtuale, che ciò che serve per gli endpoint privati. Per informazioni sul routing di tutto il traffico verso la rete virtuale, vedere Gestire il routing di integrazione della rete virtuale. È anche possibile instradare tutto il traffico se si vuole instradare il traffico Internet attraverso la rete virtuale, ad esempio gateway NAT di Azure o Firewall di Azure.
In un browser passare a
<app-name>.azurewebsites.nete attendere che l'integrazione venga applicata. Se viene visualizzato un errore HTTP 500, attendere alcuni minuti e riprovare. Se è possibile caricare la pagina e ottenere i risultati del rilevamento, ci si connette all'endpoint degli strumenti Foundry usando i riferimenti a Key Vault.Annotazioni
Se si ricevono errori HTTP 500 per un periodo prolungato, potrebbe essere utile forzare nuovamente un refetch dei 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)"
Gestire le risorse bloccate
A seconda degli scenari, potrebbe non essere possibile gestire le risorse protette dall'endpoint privato tramite il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell, ad esempio Key Vault. Questi strumenti eseguono tutte chiamate API REST per accedere alle risorse tramite Internet pubblico e vengono bloccati dalla configurazione. Ecco alcune opzioni per accedere alle risorse bloccate:
- Per Key Vault, aggiungere l'indirizzo IP pubblico del computer locale per visualizzare o aggiornare i segreti protetti da endpoint privati.
- Se la rete locale viene estesa alla rete virtuale di Azure tramite un gateway VPN o Azure ExpressRoute, è possibile gestire le risorse protette dall'endpoint privato direttamente dalla rete locale.
- Gestire le risorse nella rete virtuale protette dall'endpoint privato tramite un jump server.
- Deploy Cloud Shell nella rete virtuale.
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.