Configuración del acceso a Azure Cosmos DB desde redes virtuales (VNet)

SE APLICA A: NoSQL MongoDB Cassandra Gremlin Table

Puede configurar la cuenta de Azure Cosmos DB para permitir el acceso solo desde una subred específica de una red virtual (VNET). Habilite el punto de conexión de servicio en una subred dentro de una red virtual para controlar el acceso a Azure Cosmos DB. El tráfico de la subred se envía a Azure Cosmos DB con la identidad de la subred y la red virtual. Una vez habilitado el punto de conexión de servicio de Azure Cosmos DB, puede limitar el acceso a la subred agregándola a la cuenta de Azure Cosmos DB.

De forma predeterminada, la cuenta de Azure Cosmos DB es accesible desde Internet siempre y cuando la solicitud vaya acompañada de un token de autorización válido. Cuando agrega una o varias subredes en las redes virtuales, solo aquellas solicitudes que se originan en esas subredes recibirán una respuesta válida. Las solicitudes procedentes de cualquier otro origen recibirán una respuesta 403 (Prohibido).

Puede configurar las cuentas de Azure Cosmos DB para permitir el acceso solo desde una subred específica de una red virtual de Azure. Para limitar el acceso a una cuenta de Azure Cosmos DB con conexiones desde una subred de una red virtual:

  1. Habilite el punto de conexión de servicio para Azure Cosmos DB para enviar la identidad de la subred y de la red virtual a Azure Cosmos DB.

  2. Agregue una regla en la cuenta de Azure Cosmos DB para especificar la subred como origen desde el cual se puede tener acceso a la cuenta.

Nota:

Una vez que un punto de conexión de servicio para su cuenta de Azure Cosmos DB esté habilitada en una subred, el origen del tráfico que llegue a Azure Cosmos DB cambia de una dirección IP pública a una red virtual y subred. La conmutación de tráfico se aplica a cualquier cuenta de Azure Cosmos DB a la que se tenga acceso desde esta subred. Si las cuentas de Azure Cosmos DB tienen un firewall basado en IP para permitir esta subred, las solicitudes de la subred habilitada por el servicio ya no coincidirán con las reglas de firewall de IP y se rechazarán.

Para más información, consulte los pasos descritos en la sección Migración desde una regla de firewall de IP a una lista de control de acceso de red virtual de este artículo.

En las secciones siguientes se describe cómo configurar un punto de conexión de servicio de red virtual para una cuenta de Azure Cosmos DB.

Configuración de un punto de conexión de servicio en Azure Portal

Configuración de un punto de conexión de servicio para una subred y red virtual de Azure existentes

  1. En el panel Todos los recursos, busque la cuenta de Azure Cosmos DB que desea proteger.

  2. Seleccione Redes en el menú de configuración.

    Screenshot of the networking menu option.

  3. Elija Permitir el acceso desde las Redes seleccionadas.

  4. Para conceder acceso a la subred de una red virtual existente, en Redes virtuales, seleccione Add existing Azure virtual network (Agregar red virtual de Azure existente).

  5. Seleccione la suscripción en la que quiere agregar una red virtual de Azure. Seleccione las redes virtuales y las subredes de Azure a las que desea conceder acceso a la cuenta de Azure Cosmos DB. A continuación, seleccione Habilitar para habilitar las redes seleccionadas con los puntos de conexión de servicio para "Microsoft.AzureCosmosDB". Cuando haya finalizado, seleccione Agregar.

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

    Nota:

    La configuración de un punto de conexión de servicio de VNet puede tardar hasta 15 minutos en propagarse, y el punto de conexión puede presentar un comportamiento incoherente durante este período.

  6. Después de que la cuenta de Azure Cosmos DB esté habilitada para obtener acceso desde una red virtual, solo permitirá el tráfico desde esta subred seleccionada. La red virtual y subred que agregó deben aparecer como se muestra en la captura de pantalla siguiente:

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

Nota:

Para habilitar los puntos de conexión de servicio de red virtual, necesitará los siguientes permisos de suscripción:

  • Suscripción con red virtual: colaborador de red
  • Suscripción con cuenta de Azure Cosmos DB: colaborador de cuenta de DocumentDB
  • Si la red virtual y su cuenta de Azure Cosmos DB están en suscripciones diferentes, asegúrese de que la suscripción que tiene la red virtual también tiene el proveedor de recursos Microsoft.DocumentDB registrado. Para registrar un proveedor de recursos, vea el artículo Tipos y proveedores de recursos de Azure.

Estas son las instrucciones para registrar la suscripción con el proveedor de recursos.

Configuración de un punto de conexión de servicio para una subred y red virtual de Azure nuevas

  1. En el panel Todos los recursos, busque la cuenta de Azure Cosmos DB que desea proteger.

  2. Seleccione Redes en el menú de configuración y elija Permitir el acceso en Redes seleccionadas.

  3. Para conceder acceso a una red virtual de Azure nueva, en Redes virtuales, seleccione Agregar nueva red virtual.

  4. Proporcione los detalles necesarios para crear una red virtual y, a continuación, seleccione Crear. La subred se creará con un punto de conexión de servicio 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.

Si otros servicios de Azure, como Azure AI Search, usan la cuenta de Azure Cosmos DB, o bien si se tiene acceso a ella desde Stream Analytics o Power BI, podrá permitir el acceso si selecciona la opción Aceptar conexiones desde centros de datos globales de Azure.

Para garantizar el acceso a las métricas de Azure Cosmos DB desde el portal, debe habilitar las opciones Allow access from Azure portal (Permitir acceso desde Azure Portal). Para obtener más información sobre estas opciones, consulte el artículo Configure an IP firewall (Configuración de un firewall de dirección IP). Después de habilitar el acceso, seleccione Guardar para guardar la configuración.

Eliminación de una red virtual o subred

  1. Enel panel Todos los recursos, busque la cuenta de Azure Cosmos DB a la que ha asignado los puntos de conexión de servicio.

  2. Seleccione Redes en el menú de configuración.

  3. Para eliminar una regla de subred o red virtual, seleccione ... junto a la red virtual o subred y luego Eliminar.

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

  4. Seleccione Guardar para aplicar los cambios.

Configuración de un punto de conexión de servicio mediante Azure PowerShell

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Use los pasos siguientes para configurar un punto de conexión de servicio de una cuenta de Azure Cosmos DB mediante Azure PowerShell:

  1. Instale Azure PowerShell e inicie sesión.

  2. Habilite el punto de conexión de servicio de una subred existente de una red 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:

    Al usar PowerShell o la CLI de Azure, asegúrese de especificar la lista completa de filtros IP y ACL de red virtual en los parámetros, no solo los que se deben agregar.

  3. Obtenga información sobre la red virtual.

    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  4. Prepare una regla de red virtual de Azure Cosmos DB.

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  5. Actualice las propiedades de la cuenta de Azure Cosmos DB con la nueva configuración de punto de conexión de red virtual:

    $accountName = "<Azure Cosmos DB account name>"
    
    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  6. Ejecute el siguiente comando para verificar que la cuenta de Azure Cosmos DB se ha actualizado con el punto de conexión de servicio de red virtual que configuró en el paso anterior:

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

Configuración de un punto de conexión de servicio con la CLI de Azure

Las cuentas de Azure Cosmos DB se pueden configurar para puntos de conexión de servicio cuando se crean o actualizan más tarde si la subred ya está configurada para ellos. Los puntos de conexión de servicio también se pueden habilitar en la cuenta de Azure Cosmos DB donde la subred todavía no está configurada. Después, el punto de conexión de servicio comenzará a funcionar cuando se configure la subred más adelante. Esta flexibilidad permite a los administradores que no tienen acceso a la cuenta de Azure Cosmos DB y a los recursos de la red virtual hacer que sus configuraciones sean independientes entre sí.

Creación de una nueva cuenta de Azure Cosmos DB y conexión de esta cuenta a una subred de back-end para una nueva red virtual

En este ejemplo, la red virtual y la subred se crean con los puntos de conexión de servicio habilitados para ambas cuando se crean.

# 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

Conexión y configuración de una cuenta de Azure Cosmos DB en una subred de back-end de forma independiente

Este ejemplo está diseñado para mostrar cómo conectar una cuenta de Azure Cosmos DB a una red virtual nueva o que ya existía. En este ejemplo, todavía no se ha configurado la subred para los puntos de conexión de servicio. Configure el punto de conexión de servicio con el parámetro --ignore-missing-vnet-service-endpoint. Esta configuración permite que la cuenta de Azure Cosmos DB se complete sin errores antes de que se complete la configuración de la subred de la red virtual. Una vez completada la configuración de la subred, se podrá acceder a la cuenta de Azure Cosmos DB a través de la subred 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 puertos al usar el modo directo

Cuando use los puntos de conexión de servicio con una cuenta de Azure Cosmos DB a través de una conexión de modo directo, debe asegurarse de que el intervalo de puertos TCP de 10000 a 20000 esté abierto.

Migración desde una regla de firewall de IP a una lista de control de acceso de red virtual

Haga lo siguiente para cambiar una cuenta de Azure Cosmos DB de usar reglas de firewall de IP a usar puntos de conexión de servicio de red virtual.

Después de configurar una cuenta de Azure Cosmos DB para un punto de conexión de servicio de una subred, todas las solicitudes de esa subred se envían de manera diferente a Azure Cosmos DB. Las solicitudes se envían con información de origen de red virtual y de subred en lugar de una dirección IP pública de origen. Estas solicitudes dejarán de coincidir con un filtro IP configurado en la cuenta de Azure Cosmos DB, por lo que es necesario hacer lo siguiente para evitar que se produzcan tiempos de inactividad.

  1. Obtenga la información de red virtual y de subred:

    $resourceGroupName = "myResourceGroup"
    $accountName = "mycosmosaccount"
    $vnetName = "myVnet"
    $subnetName = "mySubnet"
    
    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  2. Prepare un nuevo objeto de regla de red virtual para la cuenta de Azure Cosmos DB:

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  3. Actualice la cuenta de Azure Cosmos DB para habilitar el acceso de punto de conexión de servicio desde la subred:

    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  4. Repita los pasos anteriores con todas las cuentas de Azure Cosmos DB a las que se acceda desde la subred.

  5. Habilite el punto de conexión de servicio de Azure Cosmos DB en la red virtual y la subred realizando el paso que se muestra en la sección Habilitación del punto de conexión de servicio de una subred existente de una red virtual de este artículo.

  6. Quite la regla de firewall IP relativa a la subred de las reglas de firewall de la cuenta de Azure Cosmos DB.

Preguntas más frecuentes

Estas son algunas preguntas frecuentes acerca de cómo configurar el acceso desde las redes virtuales:

¿Son actualmente los cuadernos de Jupyter Notebook y el shell de Mongo o Cassandra compatibles con las cuentas habilitadas para Virtual Network?

Actualmente, no se admiten las integraciones del shell de Mongo y el shell de Cassandra en Azure Cosmos DB Data Explorer, ni el servicio Jupyter Notebooks con acceso a redes virtuales. Esta integración actualmente se encuentra en desarrollo activo.

¿Puedo especificar un punto de conexión de servicio de red virtual y una directiva de control de acceso de IP en una cuenta de Azure Cosmos DB?

Puede habilitar el punto de conexión de servicio de red virtual y una directiva de control de acceso de IP (también conocida como firewall) en la cuenta de Azure Cosmos DB. Estas dos características son complementarias y aseguran de forma colectiva el aislamiento y la seguridad de la cuenta de Azure Cosmos DB. El uso del firewall para las direcciones IP garantiza que las direcciones IP estáticas puedan acceder a la cuenta.

¿Cómo se puede limitar el acceso a la subred dentro de una red virtual?

Hay dos pasos necesarios para limitar el acceso a la cuenta de Azure Cosmos DB desde una subred. En primer lugar, permita que el tráfico de la subred lleve la identidad de su subred y su red virtual a Azure Cosmos DB. Para cambiar la identidad del tráfico, habilite el punto de conexión de servicio para Azure Cosmos DB en la subred. A continuación, agregue una regla en la cuenta de Azure Cosmos DB que especifique esta subred como origen desde el que se puede acceder a la cuenta.

¿Rechazarán las ACL de red virtual y el firewall para las direcciones IP las solicitudes o las conexiones?

Cuando se agregan reglas de acceso al firewall para direcciones IP o a la red virtual, solo aquellas solicitudes procedentes de orígenes permitidos obtendrán respuestas válidas. Las demás solicitudes se rechazan con un error 403 (Prohibido). Es importante distinguir entre el firewall de la cuenta de Azure Cosmos DB y un firewall de nivel de conexión. Todavía se puede conectar el origen al servicio y no se rechazan las conexiones.

Mis solicitudes se empezaron a bloquear cuando habilité el punto de conexión de servicio para Azure Cosmos DB en la subred. ¿Qué ha ocurrido?

Una vez que se habilita el punto de conexión de servicio para Azure Cosmos DB en una subred, el origen del tráfico que llega a Azure Cosmos DB cambia de una dirección IP pública a la red virtual y la subred. Si su cuenta de Azure Cosmos DB tiene solo un firewall basado en IP, el tráfico de la subred habilitada para el servicio ya no coincidirá con las reglas de firewall de IP y, por tanto, se rechazará. Recorra cada uno de los pasos para migrar fácilmente desde un firewall basado en IP a un control de acceso basado en redes virtuales.

¿Se necesitan permisos de control de acceso basado en rol adicionales para las cuentas de Azure Cosmos DB con puntos de conexión de servicio de red virtual?

Después de agregar los puntos de conexión de servicio de red virtual a una cuenta de Azure Cosmos DB, para realizar cambios en la configuración de la cuenta, debe acceder a la acción Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action para todas las redes virtuales configuradas en su cuenta de Azure Cosmos DB. Este permiso es necesario porque el proceso de autorización valida el acceso a los recursos (como los recursos de la base de datos y de la red virtual) antes de evaluar las propiedades.

La autorización valida el permiso para la acción de recursos de red virtual, incluso si el usuario no especifica las ACL de red virtual mediante la CLI de Azure. Actualmente, el plano de control de la cuenta de Azure Cosmos DB permite establecer el estado completo de la cuenta. Uno de los parámetros para las llamadas al plano de control es virtualNetworkRules. Si no se especifica este parámetro, la CLI de Azure realiza una llamada Get database para recuperar el parámetro virtualNetworkRules y usa este valor en la llamada de actualización.

¿Las redes virtuales emparejadas tienen también acceso a la cuenta de Azure Cosmos DB?

Solo la red virtual y las subredes que se agregaron a la cuenta de Azure Cosmos DB tienen acceso. Las redes virtuales del mismo nivel no podrán acceder a la cuenta hasta que las subredes dentro de ellas se agreguen a la cuenta.

¿Cuál es el número máximo de subredes a las que se permite acceder a una sola cuenta de Azure Cosmos DB?

Actualmente, se permite un máximo de 256 subredes para una cuenta de Azure Cosmos DB.

¿Puedo habilitar el acceso desde VPN y ExpressRoute?

Para acceder a una cuenta de Azure Cosmos DB a través de ExpressRoute desde el entorno local, debe habilitar el emparejamiento de Microsoft. Una vez que pone reglas de acceso para el firewall de direcciones IP o la red virtual, puede agregar las direcciones IP públicas usadas para el emparejamiento de Microsoft al firewall de direcciones IP de la cuenta de Azure Cosmos DB para permitir que los servicios locales accedan a ella.

¿Es necesario actualizar las reglas de los grupos de seguridad de red?

Las reglas de los grupos de seguridad de red se usan para limitar la conectividad hacia una subred y desde esta con una red virtual. Cuando agrega un punto de conexión de servicio de Azure Cosmos DB a la subred, no es necesario abrir la conectividad de salida en el grupo de seguridad de red para la cuenta de Azure Cosmos DB.

¿Están disponibles los puntos de conexión de servicio para todas las redes virtuales?

No, solo las redes virtuales de Azure Resource Manager pueden tener el punto de conexión de servicio habilitado. Las redes virtuales clásicas no admiten puntos de conexión de servicio.

¿Cuándo debo aceptar conexiones desde centros de datos globales de Azure para una cuenta de Azure Cosmos DB?

Esta configuración solo debe habilitarse si quiere que la cuenta de Azure Cosmos DB sea accesible para cualquier servicio de Azure de cualquier región de Azure. Otros servicios de Azure, como Azure Data Factory y Azure AI Search proporcionan documentación sobre cómo proteger el acceso a orígenes de datos, incluidas las cuentas de Azure Cosmos DB, por ejemplo:

Pasos siguientes