Configurare l'accesso ad Azure Cosmos DB dalle reti virtuali

SI APPLICA A: Nosql Mongodb Cassandra Gremlin Tabella

È possibile configurare l'account Azure Cosmos DB per consentire l'accesso solo da una subnet specifica di una rete virtuale.You can configure the Azure Cosmos DB account to allow access only from a specific subnet of a virtual network (VNET). Abilitare l'endpoint di servizio in una subnet all'interno di una rete virtuale per controllare l'accesso ad Azure Cosmos DB. Il traffico proveniente da tale subnet viene inviato ad Azure Cosmos DB con l'identità della subnet e Rete virtuale. Dopo aver abilitato l'endpoint del servizio Azure Cosmos DB, è possibile limitare l'accesso alla subnet aggiungendolo all'account Azure Cosmos DB.

Per impostazione predefinita, un account Azure Cosmos DB è accessibile da qualsiasi origine se la richiesta è accompagnata da un token di autorizzazione valido. Quando si aggiunge una o più subnet all'interno delle reti virtuali, solo le richieste provenienti da tali subnet otterranno una risposta valida. Le richieste provenienti da qualsiasi altra origine riceveranno una risposta 403 (Non consentito).

È possibile configurare gli account Azure Cosmos DB per consentire l'accesso da una sola subnet specifica di una rete virtuale di Azure. Per limitare l'accesso a un account Azure Cosmos DB con le connessioni da una subnet in una rete virtuale:

  1. Abilitare l'endpoint di servizio per Azure Cosmos DB per inviare la subnet e l'identità di rete virtuale ad Azure Cosmos DB.

  2. Aggiungere una regola nell'account Azure Cosmos DB per specificare la subnet come origine da cui è possibile accedere all'account.

Nota

Dopo aver abilitato l'endpoint di servizio per l'account Azure Cosmos DB in una subnet, l'origine del traffico che raggiunge Azure Cosmos DB passa da un indirizzo IP pubblico a una rete virtuale e una subnet. La commutazione del traffico si applica a tutti gli account di Azure Cosmos DB a cui si accede da questa subnet. Se gli account di Azure Cosmos usano un firewall basato su protocollo IP per consentire l'accesso a questa subnet, le richieste provenienti dalla subnet abilitata al servizio non corrispondono più alle regole del firewall IP e vengono rifiutate.

Per altre informazioni, vedere la procedura descritta nella sezione Migrazione da una regola del firewall IP a un elenco di controllo di accesso della rete virtuale di questo articolo.

Le sezioni seguenti descrivono come configurare un endpoint servizio di rete virtuale per un account Azure Cosmos DB.

Configurare un endpoint di servizio tramite il portale di Azure

Configurare un endpoint di servizio per una rete virtuale e una subnet Azure esistenti

  1. Nel riquadro Tutte le risorse individuare l'account Azure Cosmos DB che si vuole proteggere.

  2. Selezionare Rete dal menu delle impostazioni

    Screenshot of the networking menu option.

  3. Scegliere di consentire l'accesso dalle reti selezionate.

  4. Per concedere l'accesso a una subnet della rete virtuale esistente, in Reti virtuali selezionare Add existing Azure virtual network (Aggiungi rete virtuale di Azure esistente).

  5. Selezionare la sottoscrizione da cui si vuole aggiungere una rete virtuale di Azure. Selezionare le reti virtuali e le subnet di Azure a cui si vuole consentire l'accesso al proprio account Azure Cosmos DB. Selezionare quindi Abilita per abilitare le reti selezionate con gli endpoint di servizio per "Microsoft.AzureCosmosDB". Al termine, selezionare Aggiungi.

    Screenshot of the dialog to select an existing Azure Virtual Network and subnet with an Azure Cosmos DB service endpoint.

    Nota

    La configurazione di un endpoint servizio di rete virtuale può richiedere fino a 15 minuti per propagarsi e l'endpoint può presentare un comportamento incoerente durante questo periodo.

  6. Dopo aver abilitato l'account Azure Cosmos DB per l'accesso da una rete virtuale, il traffico sarà consentito solo dalla subnet scelta. La rete virtuale e la subnet aggiunte verranno visualizzate come illustrato nello screenshot seguente:

    Screenshot of an Azure Virtual Network and subnet configured successfully in the list.

Nota

Per abilitare gli endpoint servizio di rete virtuale sono necessarie le autorizzazioni seguenti per la sottoscrizione:

  • Sottoscrizione con la rete virtuale: Collaboratore Rete
  • Sottoscrizione con account Azure Cosmos DB: Collaboratore Account DocumentDB
  • Se la rete virtuale e l'account Azure Cosmos DB si trovano in sottoscrizioni diverse, assicurarsi che la sottoscrizione con rete virtuale disponga Microsoft.DocumentDB anche del provider di risorse registrato. Per registrare un provider di risorse, vedere l'articolo Provider e tipi di risorse di Azure.

Ecco le istruzioni per registrare la sottoscrizione con il provider di risorse.

Configurare un endpoint di servizio per una rete virtuale e una subnet Azure nuove

  1. Nel riquadro Tutte le risorse individuare l'account Azure Cosmos DB che si vuole proteggere.

  2. Selezionare Rete dal menu delle impostazioni e scegliere di consentire l'accesso da Reti selezionate.

  3. Per concedere l'accesso a una nuova rete virtuale di Azure, in Reti virtuali selezionare Add new virtual network (Aggiungi nuova rete virtuale).

  4. Fornire i dettagli necessari per creare una nuova rete virtuale e quindi selezionare Crea. La subnet verrà creata con un endpoint di servizio per "Microsoft.AzureCosmosDB" abilitato.

    Screenshot of the dialog to create a new Azure Virtual Network, configure a subnet, and then enable the Azure Cosmos DB service endpoint.

Se l'account Azure Cosmos DB viene usato da altri servizi di Azure, ad esempio Ricerca di intelligenza artificiale di Azure o a cui si accede da Analisi di flusso o Power BI, è possibile consentire l'accesso selezionando Accetta connessioni da data center di Azure globali.

Per assicurarsi di avere accesso alle metriche di Azure Cosmos DB dal portale, è necessario abilitare le opzioni Consentire l'accesso dal portale di Azure. Per altre informazioni su queste opzioni, vedere l'articolo Configurare un firewall IP. Dopo avere abilitato l'accesso, selezionare Salva per salvare le impostazioni.

Rimuovere una rete virtuale o una subnet

  1. Nel riquadro Tutte le risorse individuare l'account Azure Cosmos DB per cui sono stati assegnati gli endpoint di servizio.

  2. Selezionare Rete dal menu delle impostazioni.

  3. Per rimuovere una regola della rete virtuale o della subnet, selezionare ... accanto alla rete virtuale o alla subnet, quindi selezionare Rimuovi.

    Screenshot of the menu option to remove an associated Azure Virtual Network.

  4. Seleziona Salva per applicare le modifiche.

Configurare un endpoint di servizio tramite Azure PowerShell

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Usare questa procedura per configurare un endpoint di servizio per un account Azure Cosmos DB usando Azure PowerShell:

  1. Installare Azure PowerShell e accedere.

  2. Abilitare l'endpoint di servizio per una subnet esistente di una rete virtuale.

    $resourceGroupName = "<Resource group name>"
    $vnetName = "<Virtual network name>"
    $subnetName = "<Subnet name>"
    $subnetPrefix = "<Subnet address range>"
    $serviceEndpoint = "Microsoft.AzureCosmosDB"
    
    Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName | Set-AzVirtualNetworkSubnetConfig `
       -Name $subnetName `
       -AddressPrefix $subnetPrefix `
       -ServiceEndpoint $serviceEndpoint | Set-AzVirtualNetwork
    

    Nota

    Quando si usa PowerShell o l'interfaccia della riga di comando di Azure, assicurarsi di specificare l'elenco completo dei filtri IP e degli ACL della rete virtuale nei parametri e non solo quelli che devono essere aggiunti.

  3. Ottenere informazioni sulla rete virtuale.

    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  4. Preparare una regola di Rete virtuale di Azure Cosmos DB

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  5. Aggiornare le proprietà dell'account Azure Cosmos DB con la nuova configurazione dell'endpoint Rete virtuale:

    $accountName = "<Azure Cosmos DB account name>"
    
    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  6. Eseguire il comando seguente per verificare che l'account Azure Cosmos DB venga aggiornato con l'endpoint servizio di rete virtuale configurato nel passaggio precedente:

    $account = Get-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName
    
    $account.IsVirtualNetworkFilterEnabled
    $account.VirtualNetworkRules
    

Configurare un endpoint di servizio tramite l'interfaccia della riga di comando di Azure

Gli account Azure Cosmos DB possono essere configurati per gli endpoint di servizio quando vengono creati o aggiornati in un secondo momento se la subnet è già configurata per loro. Gli endpoint di servizio possono essere abilitati anche nell'account Azure Cosmos DB in cui la subnet non è ancora configurata. L'endpoint di servizio inizierà quindi a funzionare quando la subnet viene configurata in un secondo momento. Questa flessibilità consente agli amministratori che non hanno accesso sia all'account Azure Cosmos DB che alle risorse di rete virtuale per rendere le configurazioni indipendenti l'una dall'altra.

Creare un nuovo account Azure Cosmos DB e connetterlo a una subnet back-end per una nuova rete virtuale

In questo esempio, la rete virtuale e la subnet vengono create con gli endpoint di servizio abilitati per entrambi quando vengono creati.

# Create an Azure Cosmos DB Account with a service endpoint connected to a backend subnet

# Resource group and Azure Cosmos DB account variables
resourceGroupName='MyResourceGroup'
location='West US 2'
accountName='mycosmosaccount'

# Variables for a new Virtual Network with two subnets
vnetName='myVnet'
frontEnd='FrontEnd'
backEnd='BackEnd'

# Create a resource group
az group create -n $resourceGroupName -l $location

# Create a virtual network with a front-end subnet
az network vnet create \
   -n $vnetName \
   -g $resourceGroupName \
   --address-prefix 10.0.0.0/16 \
   --subnet-name $frontEnd \
   --subnet-prefix 10.0.1.0/24

# Create a back-end subnet with service endpoints enabled for Azure Cosmos DB
az network vnet subnet create \
   -n $backEnd \
   -g $resourceGroupName \
   --address-prefix 10.0.2.0/24 \
   --vnet-name $vnetName \
   --service-endpoints Microsoft.AzureCosmosDB

svcEndpoint=$(az network vnet subnet show -g $resourceGroupName -n $backEnd --vnet-name $vnetName --query 'id' -o tsv)

# Create an Azure Cosmos DB account with default values and service endpoints
az cosmosdb create \
   -n $accountName \
   -g $resourceGroupName \
   --enable-virtual-network true \
   --virtual-network-rules $svcEndpoint

Connessione e configurare un account Azure Cosmos DB in modo indipendente in una subnet back-end

Questo esempio illustra come connettere un account Azure Cosmos DB a una rete virtuale esistente o nuova. In questo esempio la subnet non è ancora configurata per gli endpoint di servizio. Configurare l'endpoint di servizio usando il --ignore-missing-vnet-service-endpoint parametro . Questa configurazione consente il completamento dell'account Azure Cosmos DB senza errori prima del completamento della configurazione della subnet della rete virtuale. Al termine della configurazione della subnet, l'account Azure Cosmos DB sarà quindi accessibile tramite la subnet configurata.

# Create an Azure Cosmos DB Account with a service endpoint connected to a backend subnet
# that is not yet enabled for service endpoints.

# Resource group and Azure Cosmos DB account variables
resourceGroupName='MyResourceGroup'
location='West US 2'
accountName='mycosmosaccount'

# Variables for a new Virtual Network with two subnets
vnetName='myVnet'
frontEnd='FrontEnd'
backEnd='BackEnd'

# Create a resource group
az group create -n $resourceGroupName -l $location

# Create a virtual network with a front-end subnet
az network vnet create \
   -n $vnetName \
   -g $resourceGroupName \
   --address-prefix 10.0.0.0/16 \
   --subnet-name $frontEnd \
   --subnet-prefix 10.0.1.0/24

# Create a back-end subnet but without configuring service endpoints (--service-endpoints Microsoft.AzureCosmosDB)
az network vnet subnet create \
   -n $backEnd \
   -g $resourceGroupName \
   --address-prefix 10.0.2.0/24 \
   --vnet-name $vnetName

svcEndpoint=$(az network vnet subnet show -g $resourceGroupName -n $backEnd --vnet-name $vnetName --query 'id' -o tsv)

# Create an Azure Cosmos DB account with default values
az cosmosdb create -n $accountName -g $resourceGroupName

# Add the virtual network rule but ignore the missing service endpoint on the subnet
az cosmosdb network-rule add \
   -n $accountName \
   -g $resourceGroupName \
   --virtual-network $vnetName \
   --subnet svcEndpoint \
   --ignore-missing-vnet-service-endpoint true

read -p'Press any key to now configure the subnet for service endpoints'

az network vnet subnet update \
   -n $backEnd \
   -g $resourceGroupName \
   --vnet-name $vnetName \
   --service-endpoints Microsoft.AzureCosmosDB

Intervallo di porte quando si usa la modalità diretta

Quando si usano endpoint di servizio con un account Azure Cosmos DB tramite una connessione in modalità diretta, è necessario assicurarsi che la porta TCP sia aperta da 10000 a 20000.

Migrazione da una regola del firewall IP a un ACL di rete virtuale

Per eseguire la migrazione di un account Azure Cosmos DB dall'uso delle regole del firewall IP all'uso degli endpoint servizio di rete virtuale, seguire questa procedura.

Dopo aver configurato un account Azure Cosmos DB per un endpoint di servizio per una subnet, ogni richiesta da tale subnet viene inviata in modo diverso ad Azure Cosmos DB. Le richieste vengono inviate con informazioni sull'origine della rete virtuale e della subnet anziché con un indirizzo IP pubblico di origine. Queste richieste non corrispondono più a un filtro IP configurato nell'account Azure Cosmos DB, motivo per cui sono necessari i passaggi seguenti per evitare tempi di inattività.

  1. Ottenere informazioni sulla rete virtuale e sulla subnet:

    $resourceGroupName = "myResourceGroup"
    $accountName = "mycosmosaccount"
    $vnetName = "myVnet"
    $subnetName = "mySubnet"
    
    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  2. Preparare un nuovo oggetto regola Rete virtuale per l'account Azure Cosmos DB:

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  3. Aggiornare l'account Azure Cosmos DB per abilitare l'accesso all'endpoint di servizio dalla subnet:

    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  4. Ripetere i passaggi precedenti per tutti gli account Azure Cosmos DB a cui si accede dalla subnet.

  5. Abilitare l'endpoint del servizio Azure Cosmos DB nella rete virtuale e nella subnet usando il passaggio illustrato nella sezione Abilitare l'endpoint servizio per una subnet esistente di una rete virtuale di questo articolo.

  6. Rimuovere la regola del firewall IP per la subnet dalle regole del firewall dell'account Azure Cosmos DB.

Domande frequenti

Ecco alcune domande frequenti sulla configurazione dell'accesso da reti virtuali:

I notebook e Mongo/Cassandra Shell sono attualmente compatibili con Rete virtuale account abilitati?

Al momento le integrazioni della shell Mongo e della shell Cassandra nel Esplora dati di Azure Cosmos DB e nel servizio Jupyter Notebooks non sono supportate con l'accesso alla rete virtuale. Questa integrazione è attualmente in fase di sviluppo attivo.

È possibile specificare sia l'endpoint servizio di rete virtuale che i criteri di controllo di accesso IP in un account Azure Cosmos DB?

È possibile abilitare sia l'endpoint servizio di rete virtuale che un criterio di controllo di accesso IP (noto anche come firewall) nell'account Azure Cosmos DB. Queste due funzionalità sono complementari e collettivamente garantiscono l'isolamento e la sicurezza dell'account Azure Cosmos DB. L'utilizzo del firewall IP garantisce che gli indirizzi IP statici possano accedere all'account.

Come è possibile limitare l'accesso alla subnet all'interno di una rete virtuale?

Sono necessari due passaggi per limitare l'accesso all'account Azure Cosmos DB da una subnet. In primo luogo, si consente al traffico dalla subnet di portare le rispettive subnet e l'identità di rete virtuale ad Azure Cosmos DB. La modifica dell'identità del traffico viene eseguita abilitando l'endpoint di servizio per Azure Cosmos DB nella subnet. Successivamente si aggiunge una regola nell'account Azure Cosmos DB che specifica questa subnet come origine da cui è possibile accedere all'account.

Gli elenchi di accesso virtuale della rete virtuale e il Firewall IP rifiutano le richieste o le connessioni?

Quando vengono aggiunte regole di accesso al firewall IP o alla rete virtuale, solo le richieste provenienti da origini autorizzate ricevono risposte valide. Le altre richieste vengono rifiutate con un errore 403 (Non consentito). È importante distinguere il firewall dell'account Azure Cosmos DB da un firewall a livello di connessione. L'origine può comunque connettersi al servizio e le connessioni stesse non vengono rifiutate.

Le richieste hanno iniziato a bloccarsi dopo aver abilitato l'endpoint del servizio ad Azure Cosmos DB nella subnet. Che cosa è successo?

Dopo aver abilitato l'endpoint di servizio per Azure Cosmos DB in una subnet, l'origine del traffico che raggiunge l'account passa dall'indirizzo IP pubblico alla rete virtuale e alla subnet. Se l'account Azure Cosmos DB ha solo firewall basato su IP, il traffico dalla subnet abilitata per il servizio non corrisponderà più alle regole del firewall IP e quindi verrà rifiutato. Esaminare i passaggi per eseguire facilmente la migrazione dal firewall basato su protocollo IP per il controllo di accesso basato sulla rete virtuale.

Sono necessarie autorizzazioni aggiuntive per il controllo degli accessi in base al ruolo di Azure per gli account Azure Cosmos DB con endpoint servizio di rete virtuale?

Dopo aver aggiunto gli endpoint del servizio di rete virtuale a un account Azure Cosmos DB, per apportare modifiche alle impostazioni dell'account, è necessario accedere all'azione Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action per tutte le reti virtuali configurate nell'account Azure Cosmos DB. Questa operazione è necessaria perché il processo di autorizzazione convalida l'accesso alle risorse (incluse le risorse di database e di rete virtuale) prima di valutare le proprietà.

Viene convalidata l'autorizzazione per l'azione della risorsa di rete virtuale anche se l'utente non specifica gli elenchi di controllo di accesso di rete virtuale usando l'interfaccia della riga di comando di Azure. Attualmente, il piano di controllo dell'account Azure Cosmos DB supporta l'impostazione dello stato completo dell'account Azure Cosmos DB. Uno dei parametri per le chiamate del piano di controllo è virtualNetworkRules. Se questo parametro non viene specificato, l'interfaccia della riga di comando di Azure effettua una chiamata di database get per recuperare virtualNetworkRules e usa questo valore nella chiamata di aggiornamento.

Anche le reti virtuali con peering hanno accesso all'account Azure Cosmos DB?

Solo la rete virtuale e le relative subnet aggiunte all'account Azure Cosmos DB hanno accesso. Le reti virtuali con peering non possono accedere all'account finché le subnet all'interno delle reti virtuali con peering non vengono aggiunte all'account.

Qual è il numero massimo di subnet autorizzate ad accedere a un singolo account Azure Cosmos DB?

Attualmente, è possibile avere al massimo 256 subnet consentite per un account Azure Cosmos DB.

È possibile abilitare l'accesso da VPN ed Express Route?

Per accedere all'account Azure Cosmos DB tramite ExpressRoute dall'ambiente locale, è necessario abilitare il peering Microsoft. Dopo aver inserito il firewall IP o le regole di accesso alla rete virtuale, è possibile aggiungere gli indirizzi IP pubblici usati per il peering Microsoft nel firewall IP dell'account Azure Cosmos DB per consentire ai servizi locali l'accesso all'account Azure Cosmos DB.

È necessario aggiornare le regole dei gruppi di sicurezza di rete (NSG)?

Le regole NSG vengono utilizzate per limitare la connettività da e verso una subnet con la rete virtuale. Quando si aggiunge l'endpoint di servizio per Azure Cosmos DB alla subnet, non è necessario aprire la connettività in uscita nel gruppo di sicurezza di rete per l'account Azure Cosmos DB.

Gli endpoint di servizio sono disponibili per tutte le reti virtuali?

No, solo le reti virtuali di Azure Resource Manager hanno un endpoint di servizio abilitato. Le reti virtuali classiche non supportano gli endpoint di servizio.

Quando è necessario accettare connessioni da data center di Azure globali per un account Azure Cosmos DB?

Questa impostazione deve essere abilitata solo quando si vuole che l'account Azure Cosmos DB sia accessibile a qualsiasi servizio di Azure in qualsiasi area di Azure. Altri servizi proprietari di Azure, ad esempio Azure Data Factory e Ricerca di intelligenza artificiale di Azure, forniscono documentazione su come proteggere l'accesso alle origini dati, inclusi gli account Azure Cosmos DB, ad esempio:

Passaggi successivi