Configurar o acesso ao Azure Cosmos DB a partir de redes virtuais (VNet)

APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Tabela

Você pode configurar a conta do Azure Cosmos DB para permitir o acesso somente de uma sub-rede específica de 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 para o Azure Cosmos DB com a identidade da sub-rede e da Rede Virtual. Depois que o ponto de extremidade do serviço 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 fonte se a solicitação for acompanhada por um token de autorização válido. Quando você adiciona uma ou mais sub-redes em redes virtuais, somente as solicitações originadas dessas sub-redes receberão uma resposta válida. Os pedidos provenientes de qualquer outra fonte receberão uma resposta 403 (Proibida).

Pode configurar as contas do Azure Cosmos DB para permitirem o acesso apenas a 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 sub-rede e a identidade de 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 a partir da qual a conta pode ser acessada.

Nota

Quando um ponto de extremidade de serviço para 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 sub-rede. A mudança de tráfego aplica-se a qualquer conta do Azure Cosmos DB acedida a partir desta sub-rede. Se suas contas do 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 IP e serão rejeitadas.

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

As seções a seguir descrevem como configurar um ponto de extremidade de 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 existentes do Azure

  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

    Screenshot of the networking menu option.

  3. Escolha permitir o acesso a partir de Redes selecionadas.

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

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

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

    Nota

    A configuração de um ponto de extremidade de serviço VNET pode levar até 15 minutos para se propagar 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 conforme mostrado na captura de tela a seguir:

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

Nota

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

  • Subscrição com rede virtual: Contribuidor de rede
  • Assinatura com conta do Azure Cosmos DB: contribuidor da conta do Banco de Dados de Documentos
  • Se a sua rede virtual e a conta do Azure Cosmos DB estiverem em subscrições diferentes, certifique-se de que a subscrição que tem rede virtual também tem Microsoft.DocumentDB o fornecedor de recursos registado. Para registrar um provedor de recursos, consulte o artigo Provedores e tipos de recursos do Azure.

Aqui estão as instruções para registrar a assinatura com o provedor de recursos.

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

  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 escolha 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 selecione Criar. A sub-rede será criada com um ponto de extremidade de serviço para "Microsoft.AzureCosmosDB" habilitado.

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

Se a sua conta do Azure Cosmos DB for usada por outros serviços do Azure, como o Azure AI Search, ou for acessada a partir do Stream analytics ou do Power BI, você permitirá o acesso selecionando Aceitar conexões de dentro dos datacenters globais do Azure.

Para garantir que você tenha acesso às métricas do Azure Cosmos DB a partir do portal, você precisa habilitar Permitir acesso a partir das opções 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.

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

  4. Selecione Guardar para aplicar as alterações.

Configurar um ponto de extremidade de serviço usando o Azure PowerShell

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Use as seguintes etapas para configurar um ponto de extremidade de serviço para uma conta do Azure Cosmos DB usando o Azure PowerShell:

  1. Instale o Azure PowerShell e entre.

  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
    

    Nota

    Quando estiver usando o PowerShell ou a CLI do Azure, certifique-se de especificar a lista completa de filtros IP e ACLs de rede virtual em parâmetros, não apenas aqueles 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 de 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 do 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 podem ser configuradas para pontos de extremidade de serviço quando são criadas ou atualizadas posteriormente, se a sub-rede já estiver configurada para elas. Os pontos de extremidade de serviço também podem ser habilitados na conta do Azure Cosmos DB onde a sub-rede ainda não está configurada. Em seguida, o ponto de extremidade do 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 suas configurações independentes umas das outras.

Criar uma nova 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 ambos quando são criados.

# 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 a uma sub-rede de back-end independentemente

Este exemplo destina-se a mostrar como conectar uma conta do Azure Cosmos DB a uma rede virtual nova ou existente. Neste exemplo, a sub-rede ainda não está configurada para pontos de extremidade de serviço. Configure o ponto de extremidade do serviço usando o --ignore-missing-vnet-service-endpoint parâmetro. Essa configuração permite que a conta do Azure Cosmos DB seja concluída sem erros antes que a configuração para a sub-rede da rede virtual seja concluída. Quando a configuração da sub-rede estiver concluída, a conta do Azure Cosmos DB estará acessível através 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

Ao usar pontos de extremidade de serviço com uma conta do Azure Cosmos DB por meio de uma conexão de modo direto, você precisa garantir que o intervalo de portas TCP de 10000 a 20000 esteja aberto.

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

Para migrar uma conta do Azure Cosmos DB do uso de regras de firewall IP para o uso de pontos de extremidade de serviço de rede virtual, use 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 dessa sub-rede é enviada de forma diferente para o Azure Cosmos DB. As solicitações são enviadas com informações de origem de rede virtual e sub-rede 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, e é por isso que as etapas a seguir são necessárias para evitar tempo de inatividade.

  1. Obtenha informações de rede virtual e 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 de 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 do serviço a partir 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 a partir da sub-rede.

  5. Habilite o ponto de extremidade do serviço 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 IP para a sub-rede das regras de Firewall da conta do Azure Cosmos DB.

Perguntas mais frequentes

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

Os Notebooks e o Mongo/Cassandra Shell são atualmente compatíveis com contas habilitadas para Rede Virtual?

No momento, as integrações de shell Mongo e Cassandra no Azure Cosmos DB Data Explorer e no serviço Jupyter Notebooks não são suportadas com acesso VNET. Esta integração está atualmente em desenvolvimento ativo.

Posso especificar o ponto de extremidade do 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 do serviço de rede virtual e uma política de controle de acesso IP (também conhecida como firewall) em sua conta do Azure Cosmos DB. Esses dois recursos são complementares e garantem coletivamente o isolamento e a segurança de sua conta do Azure Cosmos DB. O uso do firewall IP garante que IPs estáticos possam acessar sua conta.

Como posso 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, é adicionar uma regra na conta do Azure Cosmos DB especificando essa sub-rede como uma fonte a partir 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 adicionados, apenas as solicitações de fontes permitidas obtêm respostas válidas. Outros pedidos são rejeitados com um 403 (Proibido). É importante distinguir o firewall da conta do Azure Cosmos DB de um firewall de 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 habilitei o ponto de extremidade de serviço para o Azure Cosmos DB na sub-rede. O que aconteceu?

Quando o ponto de extremidade de serviço do Azure Cosmos DB é habilitado em uma sub-rede, a origem do tráfego que chega à conta alterna de IP público para rede virtual e sub-rede. Se sua conta do Azure Cosmos DB tiver apenas firewall baseado em IP, o tráfego da sub-rede habilitada para serviço não corresponderá mais às regras de firewall IP e, portanto, será rejeitado. Examine as etapas para migrar perfeitamente do firewall baseado em IP para o controle de acesso baseado em rede virtual.

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

Depois de adicionar os pontos de extremidade do serviço VNet a uma conta do Azure Cosmos DB, para fazer alterações nas configurações da conta, você precisa acessar a Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action ação para todas as VNETs configuradas em sua conta do Azure Cosmos DB. Essa permissão é necessária porque o processo de autorização valida o acesso a recursos (como recursos de banco de dados e rede virtual) antes de avaliar quaisquer propriedades.

A autorização valida a permissão para a ação de recurso VNet mesmo que o usuário não especifique as ACLs VNET usando a CLI do Azure. Atualmente, o plano de controle da conta do Azure Cosmos DB dá suporte à definição do estado completo da conta do Azure Cosmos DB. Um dos parâmetros para as chamadas do plano de controle é virtualNetworkRules. Se esse parâmetro não for especificado, a CLI do Azure fará uma chamada get database 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?

Somente a rede virtual e suas sub-redes adicionadas à conta do Azure Cosmos DB têm acesso. Suas redes virtuais 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 permitido 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 ativar o acesso a partir de VPN e Rota Expressa?

Para aceder à conta do Azure Cosmos DB através da rota Express a partir do local, terá de ativar o emparelhamento da Microsoft. Depois de colocar o firewall IP ou as regras de acesso à rede virtual, você pode adicionar os endereços IP públicos usados para emparelhamento da Microsoft no firewall IP da sua conta do Azure Cosmos DB para permitir o acesso de serviços locais à conta do Azure Cosmos DB.

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

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

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

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

Quando devo aceitar conexões de datacenters globais do Azure para uma conta do Azure Cosmos DB?

Essa configuração só deve ser habilitada quando você quiser que sua conta do Azure Cosmos DB esteja 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 AI Search, fornecem documentação sobre como proteger o acesso a fontes de dados, incluindo contas do Azure Cosmos DB, por exemplo:

Próximos passos

  • Para configurar um firewall para o Azure Cosmos DB, consulte o artigo Suporte de firewall .