Configurar o acesso ao Azure Cosmos DB por meio de VNets (redes virtuais)

APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Table

Você pode configurar a conta do Azure Cosmos DB para permitir o acesso somente de uma sub-rede específica da uma rede virtual (VNET). Habilite o ponto de extremidade de serviço em uma sub-rede dentro de uma rede virtual para controlar o acesso ao Azure Cosmos DB. O tráfego dessa sub-rede é enviado ao Azure Cosmos DB com a identidade da sub-rede e da Rede Virtual. Quando o ponto de extremidade do serviço do Azure Cosmos DB estiver habilitado, você poderá limitar o acesso à sub-rede adicionando-o à sua conta do Azure Cosmos DB.

Por padrão, uma conta do Azure Cosmos DB pode ser acessada de qualquer origem se a solicitação for acompanhada por um token de autorização válido. Quando você adiciona uma ou mais sub-redes dentro de VNets, somente solicitações originadas dessas sub-redes obterão uma resposta válida. Solicitações provenientes de qualquer outra fonte receberão uma resposta 403 (Proibido).

Você pode configurar as contas de banco de dados do Microsoft Azure Cosmos DB para permitir o acesso apenas de uma sub-rede específica de uma rede virtual do Azure. Para limitar o acesso a uma conta do Azure Cosmos DB com conexões de uma sub-rede em uma rede virtual:

  1. Habilite o ponto de extremidade de serviço do Azure Cosmos DB para enviar a identidade da sub-rede e da rede virtual para o Azure Cosmos DB.

  2. Adicione uma regra na conta do Azure Cosmos DB para especificar a sub-rede como uma fonte da qual a conta pode ser acessada.

Observação

Quando um ponto de extremidade de serviço da sua conta do Azure Cosmos DB é habilitado em uma sub-rede, a origem do tráfego que chega ao Azure Cosmos DB muda de um IP público para uma rede virtual e uma sub-rede. A troca de tráfego se aplica a qualquer conta do Azure Cosmos DB acessada a partir dessa sub-rede. Se suas contas de banco de dados do Microsoft Azure Cosmos DB tiverem um firewall baseado em IP para permitir essa sub-rede, as solicitações da sub-rede habilitada para serviço não corresponderão mais às regras de firewall de IP e serão rejeitadas.

Para saber mais, consulte as etapas descritas na seção Migrando de uma regra de firewall de IP para uma lista de controle de acesso à rede virtual deste artigo.

As seções a seguir descrevem como configurar o ponto de extremidade do serviço de rede virtual para uma conta do Azure Cosmos DB.

Configurar um ponto de extremidade de serviço usando o portal do Azure

Configurar um ponto de extremidade de serviço para uma rede virtual e sub-rede do Azure existente

  1. No painel Todos os recursos, localize a conta do Azure Cosmos DB que você deseja proteger.

  2. Selecione Rede no menu de configurações

    Captura de tela da opção do menu de rede.

  3. Escolha permitir o acesso de Redes selecionadas.

  4. Para conceder acesso à sub-rede de uma rede virtual existente, em Redes virtuais, selecione Adicionar rede virtual existente do Azure.

  5. Selecione a Assinatura da qual você deseja adicionar uma rede virtual do Azure. Selecione as Redes virtuais do Azure e as Sub-redes que você deseja fornecer acesso à sua conta do Azure Cosmos DB. Em seguida, selecione Habilitar para habilitar as redes selecionadas com pontos de extremidade de serviço para "Microsoft.AzureCosmosDB". Quando estiver concluído, selecione Adicionar.

    Captura de tela da caixa de diálogo para selecionar uma Rede Virtual do Azure e uma sub-rede com um ponto de extremidade de serviço do Azure Cosmos DB.

    Observação

    A configuração de um ponto de extremidade de serviço de VNET pode levar até 15 minutos para ser propagada, e o ponto de extremidade pode apresentar um comportamento inconsistente durante esse período.

  6. Depois que a conta do Azure Cosmos DB estiver habilitada para acesso de uma rede virtual, ela permitirá o tráfego somente dessa sub-rede escolhida. A rede virtual e a sub-rede que você adicionou devem aparecer como mostrado na captura de tela a seguir:

    Captura de tela de uma Rede Virtual do Azure e uma sub-rede configuradas com êxito na lista.

Observação

Para habilitar pontos de extremidade de serviço de rede virtual, você precisaria das seguintes permissões de assinatura:

  • Assinatura com rede virtual: colaborador da rede
  • Assinatura com a conta do Azure Cosmos DB: contribuidor da conta do DocumentDB
  • Se a rede virtual e a conta do Azure Cosmos DB estiverem em assinaturas diferentes, verifique se a assinatura que tem a rede virtual também tenha o provedor de recursos Microsoft.DocumentDB registrado. Para registrar um provedor de recursos, confira o artigo Provedores e tipos de recursos do Azure.

Confira as instruções para registrar a assinatura no provedor de recursos.

Configurar o ponto de extremidade de serviço para uma rede virtual do Azure e uma sub-rede novas

  1. No painel Todos os recursos, localize a conta do Azure Cosmos DB que você deseja proteger.

  2. Selecione Rede no menu de configurações e opte por permitir o acesso a partir de Redes selecionadas.

  3. Para conceder acesso a uma nova rede virtual do Azure, em Redes virtuais, selecione Adicionar nova rede virtual.

  4. Forneça os detalhes necessários para criar uma nova rede virtual e, em seguida, selecione Criar. A sub-rede será criada com um ponto de extremidade de serviço para "Microsoft.AzureCosmosDB" habilitado.

    Captura de tela da caixa de diálogo para criar uma nova Rede Virtual do Azure, configurar uma sub-rede e depois habilitar o ponto de extremidade de serviço do Azure Cosmos DB.

Se a sua conta do Azure Cosmos DB for usada por outros serviços do Azure, como o Azure Cognitive Search, ou for acessada por meio do Stream Analytics ou do Power BI, você permitirá acesso ao selecionar Aceitar conexões provenientes de datacenters globais do Azure.

Para garantir que você tenha acesso às métricas do Microsoft Azure Cosmos DB no portal, é necessário habilitar as opções Permitir acesso do portal do Azure. Para saber mais sobre essas opções, consulte o artigo Configurar um firewall IP. Depois de habilitar o acesso, selecione salvar para salvar as configurações.

Remover uma rede virtual ou sub-rede

  1. No painel Todos os recursos, localize a conta do Azure Cosmos DB para a qual você atribuiu pontos de extremidade de serviço.

  2. Selecione Rede no menu de configurações.

  3. Para remover uma regra de rede virtual ou sub-rede, selecione ... ao lado da rede virtual ou sub-rede e selecione Remover.

    Captura de tela da opção do menu para remover uma Rede Virtual do Azure associada.

  4. Selecione Salvar para salvar suas alterações.

Configurar endpoint de serviço usando o Azure PowerShell

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Use as etapas a seguir para configurar um ponto de extremidade de serviço para uma conta de banco de dados do Microsoft Azure Cosmos DB usando o Azure PowerShell:

  1. Instale o Azure PowerShell e faça login em.

  2. Habilite o ponto de extremidade de serviço para uma sub-rede existente de uma rede virtual.

    $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
    

    Observação

    Quando você estiver usando o PowerShell ou a CLI do Azure, especifique a lista completa de filtros IP e ACLs de rede virtual em parâmetros, não apenas os que precisam ser adicionados.

  3. Obtenha informações de rede virtual.

    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  4. Preparar uma regra da rede virtual do Azure Cosmos DB

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  5. Atualize as propriedades da conta do Azure Cosmos DB com a nova configuração de ponto de extremidade da Rede Virtual:

    $accountName = "<Azure Cosmos DB account name>"
    
    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  6. Execute o seguinte comando para verificar se sua conta do Azure Cosmos DB está atualizada com o ponto de extremidade de serviço de rede virtual que você configurou na etapa anterior:

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

Configurar um ponto de extremidade de serviço usando a CLI do Azure

As contas do Azure Cosmos DB poderão ser configuradas para pontos de extremidade de serviço quando eles forem criados ou atualizados posteriormente, se a sub-rede já estiver configurada para eles. Pontos de extremidade de serviço também podem ser habilitados na conta do Azure Cosmos DB na qual a sub-rede ainda não está configurada. Assim, o ponto de extremidade de serviço começará a funcionar quando a sub-rede for configurada posteriormente. Essa flexibilidade permite que os administradores que não têm acesso à conta do Azure Cosmos DB e aos recursos de rede virtual tornem as respectivas configurações independentes umas das outras.

Criar uma conta do Azure Cosmos DB e conectá-la a uma sub-rede de back-end para uma nova rede virtual

Neste exemplo, a rede virtual e a sub-rede são criadas com pontos de extremidade de serviço habilitados para ambas quando elas são criadas.

# 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

Conectar e configurar uma conta do Azure Cosmos DB para uma sub-rede de back-end independentemente

O objetivo deste exemplo é mostrar como conectar uma conta do Azure Cosmos DB com uma rede virtual existente ou nova. Neste exemplo, a sub-rede ainda não está configurada para pontos de extremidade de serviço. Configure o ponto de extremidade de serviço usando o parâmetro --ignore-missing-vnet-service-endpoint. Essa configuração permite que a conta do Azure Cosmos DB seja concluída sem erro antes que a configuração para a sub-rede da rede virtual seja concluída. Depois que a configuração da sub-rede for concluída, a conta do Azure Cosmos DB poderá ser acessada por meio da sub-rede configurada.

# 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

Intervalo de portas ao usar o modo direto

Quando você estiver usando pontos de extremidade de serviço com uma conta do Azure Cosmos DB por meio de uma conexão de modo direto, será necessário garantir que o intervalo de portas TCP de 10000 a 20000 esteja aberto.

Migrando de uma regra de firewall de IP para uma ACL de rede virtual

Para fazer uma conta do Azure Cosmos DB migrar do uso de regras de firewall de IP para o uso de pontos de extremidade de serviço de rede virtual, execute as etapas a seguir.

Depois que uma conta do Azure Cosmos DB é configurada para um ponto de extremidade de serviço para uma sub-rede, cada solicitação daquela sub-rede é enviada diferentemente para o Azure Cosmos DB. As solicitações são enviadas com informações de fonte de sub-rede e rede virtual em vez de um endereço IP público de origem. Essas solicitações não corresponderão mais a um filtro IP configurado na conta do Azure Cosmos DB, motivo pelo qual as etapas a seguir são necessárias para evitar o tempo de inatividade.

  1. Obtenha informações da rede virtual e da sub-rede:

    $resourceGroupName = "myResourceGroup"
    $accountName = "mycosmosaccount"
    $vnetName = "myVnet"
    $subnetName = "mySubnet"
    
    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  2. Prepare um novo objeto de regra da rede virtual para a conta do Azure Cosmos DB:

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  3. Atualize a conta do Azure Cosmos DB para habilitar o acesso ao ponto de extremidade de serviço da sub-rede:

    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  4. Repita as etapas anteriores para todas as contas do Azure Cosmos DB acessadas da sub-rede.

  5. Habilite o ponto de extremidade de serviço do Azure Cosmos DB na rede virtual e na sub-rede usando a etapa mostrada na seção Habilitar o ponto de extremidade de serviço para uma sub-rede existente de uma rede virtual deste artigo.

  6. Remova a regra de firewall de IP da sub-rede das regras de firewall da conta do Azure Cosmos DB.

Perguntas frequentes

Aqui estão algumas perguntas frequentes sobre como configurar o acesso a partir de redes virtuais:

Atualmente, os Notebooks e o Shell da Mongo/Cassandra são compatíveis com as contas habilitadas para Rede Virtual?

No momento, as integrações do shell do Mongo e do shell do Cassandra no Data Explorer do Azure Cosmos DB, e o serviço do Jupyter Notebooks, não têm suporte com o acesso à VNET. No momento, essa integração está em desenvolvimento.

Posso especificar o ponto de extremidade de serviço de rede virtual e a política de controle de acesso IP em uma conta do Azure Cosmos DB?

Você pode habilitar o ponto de extremidade de serviço da rede virtual e uma política de controle de acesso IP (também chamada de firewall) em sua conta do Azure Cosmos DB. Esses dois recursos são complementares e coletivamente garantem o isolamento e a segurança da sua conta do Azure Cosmos DB. Usar o firewall IP garante que os IPs estáticos possam acessar sua conta.

Como fazer para limitar o acesso à sub-rede dentro de uma rede virtual?

Há duas etapas necessárias para limitar o acesso à conta do Azure Cosmos DB a partir de uma sub-rede. Primeiro, você permite que o tráfego da sub-rede carregue sua sub-rede e identidade de rede virtual para o Azure Cosmos DB. A alteração da identidade do tráfego é feita habilitando o ponto de extremidade de serviço para o Azure Cosmos DB na sub-rede. Em seguida está adicionando uma regra na conta do Azure Cosmos DB especificando essa sub-rede como uma fonte da qual a conta pode ser acessada.

As ACLs de rede virtual e o Firewall IP rejeitarão solicitações ou conexões?

Quando o firewall IP ou as regras de acesso à rede virtual são adicionadas, somente solicitações de fontes permitidas obtêm respostas válidas. Outras solicitações são rejeitadas com um erro 403 (Proibido). É importante distinguir o firewall da conta do Azure Cosmos DB de um firewall no nível de conexão. A fonte ainda pode se conectar ao serviço e as conexões em si não são rejeitadas.

Minhas solicitações começaram a ser bloqueadas quando eu ativei o endpoint de serviço para o Azure Cosmos DB na sub-rede. O que aconteceu?

Depois que o ponto de extremidade de serviço do Azure Cosmos DB é habilitado em uma sub-rede, a origem do tráfego que chega à conta muda de IP público para rede virtual e sub-rede. Se a sua conta do Azure Cosmos DB tiver somente firewall baseado em IP, o tráfego da sub-rede habilitada para serviço não corresponderá mais às regras de firewall de IP e, portanto, será rejeitado. Siga os passos para migrar sem problemas do firewall baseado em IP para o controle de acesso baseado em rede virtual.

São necessárias permissões de controle de acesso baseado em função adicionais do Azure para contas do Azure Cosmos DB com pontos de extremidade de serviço da VNET?

Após adicionar os pontos de extremidade do serviço de VNet a uma conta do Azure Cosmos DB, você precisa ter acesso à ação de Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action para todos os VNETs configurados em sua conta do Azure Cosmos para fazer alterações nas configurações da conta. Essa permissão é necessária porque o processo de autorização valida o acesso a recursos (como recursos de rede virtual e de banco de dados) antes de avaliar qualquer propriedade.

A autorização valida a permissão para a ação do recurso da VNet, mesmo se o usuário não especificar as ACLs da VNET usando a CLI do Azure. Atualmente, o plano de controle da conta do Azure Cosmos DB dá suporte à configuração do estado completo da conta do Azure Cosmos DB. Um dos parâmetros para as chamadas do plano de controle é o virtualNetworkRules. Se esse parâmetro não for especificado, a CLI do Azure fará uma chamada de banco de dados get para recuperar o virtualNetworkRules e usará esse valor na chamada de atualização.

As redes virtuais emparelhadas também têm acesso à conta do Azure Cosmos DB?

Apenas a rede virtual e suas sub-redes adicionadas à conta do Azure Cosmos DB têm acesso. As respectivas VNets emparelhadas não podem acessar a conta até que as sub-redes em redes virtuais emparelhadas sejam adicionadas à conta.

Qual é o número máximo de sub-redes com permissão para acessar uma única conta do Azure Cosmos DB?

Atualmente, você pode ter no máximo 256 sub-redes permitidas para uma conta do Azure Cosmos DB.

Posso habilitar o acesso da VPN e do Expresso Route?

Para acessar a conta do Azure Cosmos DB pelo Express Route no local, você precisa habilitar o emparelhamento da Microsoft. Depois de colocar as regras de firewall de IP ou de acesso à rede virtual, você poderá adicionar os endereços IP públicos usados para o emparelhamento da Microsoft em seu firewall IP da conta do Azure Cosmos DB para permitir acesso de serviços nas instalações à conta do Azure Cosmos.

Preciso atualizar as regras do Network Security Groups (NSG)?

As regras NSG são usadas para limitar a conectividade de e para uma sub-rede com rede virtual. Quando você adiciona o ponto de extremidade de serviço do Azure Cosmos DB à sub-rede, não há necessidade de abrir a conectividade de saída no NSG para o sua conta do Azure Cosmos DB.

Os pontos de extremidade de serviço estão disponíveis para todas as VNets?

Não, somente as redes virtuais do Azure Resource Manager podem ter o ponto de extremidade do serviço ativado. As redes virtuais clássicas não suportam pontos de extremidade de serviço.

Quando devo aceitar conexões de datacenters públicos do Azure em uma conta do Azure Cosmos DB?

Essa configuração só deverá ser habilitada quando você quiser que sua conta do Azure Cosmos DB seja acessível a qualquer serviço do Azure em qualquer região do Azure. Outros serviços primários do Azure, como o Azure Data Factory e o Azure Cognitive Search fornecem uma documentação sobre como proteger o acesso a fontes de dados, incluindo contas do Azure Cosmos DB, por exemplo:

Próximas etapas