Настройка доступа к Azure Cosmos DB из виртуальных сетей (VNet)

Область применения: Nosql Mongodb Кассандра Гремлин Таблица

Учетная запись Azure Cosmos DB позволяет разрешить доступ только из определенной подсети виртуальной сети. Включите конечную точку службы в подсети в виртуальной сети для управления доступом к Azure Cosmos DB. Трафик из этой подсети отправляется в Azure Cosmos DB с идентификатором подсети и виртуальной сети. После включения конечной точки службы Azure Cosmos DB можно ограничить доступ к подсети, добавив ее в учетную запись Azure Cosmos DB.

По умолчанию учетная запись Azure Cosmos DB доступна из любого источника, если запрос сопровождается допустимым маркером авторизации. При добавлении одной или нескольких подсетей в виртуальную сеть только запросы, полученные из этих подсетей, будут получать правильный ответ. Запросы, полученные из любого другого источника, получат ответ "403 (запрещено)".

Учетные записи Azure Cosmos DB можно настроить для предоставления доступа только из определенной подсети виртуальной сети Azure. Для ограничения доступа к учетной записи Azure Cosmos DB с подключениями из подсети в виртуальной сети выполните следующие шаги:

  1. Включите в конечной точке службы для Azure Cosmos DB отправку идентификатора подсети и виртуальной сети в Azure Cosmos DB.

  2. Добавьте правило в учетной записи Azure Cosmos DB, определяющее подсеть как источник, из которого можно получить доступ к учетной записи.

Примечание.

После того как конечная точка службы для учетной записи Azure Cosmos DB будет включена в подсети, источник трафика, подключающийся к Azure Cosmos DB, переключится с общего IP-адреса на виртуальную сеть и подсеть. Переключение трафика применяется к любой учетной записи Azure Cosmos DB, доступ к которой осуществляется из этой подсети. Если в ваших учетных записях Azure Cosmos DB используется брандмауэр на основе IP-адреса для разрешения этой подсети, запросы из подсети с поддержкой службы больше не будут соответствовать правилам брандмауэра для IP-адресов, поэтому будут отклонены.

Дополнительные сведения см. в разделе Переход от правила брандмауэра для IP-адресов к списку управления доступом виртуальной сети этой статьи.

В следующих разделах описано, как настроить конечную точку службы для виртуальной сети для учетной записи Azure Cosmos DB.

Настройка конечной точки службы с помощью портала Azure

Настройка конечной точки службы для существующей виртуальной сети Azure и подсети

  1. В области Все ресурсы найдите учетную запись Azure Cosmos DB, которую требуется защитить.

  2. В меню параметров выберите пункт Сеть.

    Screenshot of the networking menu option.

  3. Выберите для раздела "Разрешить доступ из" значение Выбранные сети.

  4. Чтобы предоставить доступ к подсети имеющейся виртуальной сети, в разделе Виртуальные сети выберите Add existing Azure virtual network (Добавление имеющейся виртуальной сети Azure).

  5. Выберите подписку, из которой требуется добавить виртуальную сеть Azure. Выберите виртуальную сеть и подсети Azure, которым необходимо предоставить доступ к учетной записи Azure Cosmos DB. Затем выберите Включить, чтобы включить выбранные сети с конечными точками службы для Microsoft.AzureCosmosDB. После завершения выберите Добавить (Add).

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

    Примечание.

    Настройка конечных точек службы в виртуальной сети может занять до 15 минут. В течение этого времени она может непрогнозированно реагировать на события.

  6. После настройки доступа к учетной записи Azure Cosmos DB из виртуальной сети будет разрешен трафик только из этой выбранной подсети. Добавленная виртуальная сеть и подсеть должны выглядеть так, как показано на следующем снимке экрана:

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

Примечание.

Чтобы включить конечные точки служб для виртуальной сети, потребуются следующие права доступа к подписке:

  • подписка с виртуальной сетью — участник сетей;
  • подписка с учетной записью Azure Cosmos DB — участник учетной записи DocumentDB.
  • Если ваша виртуальная сеть и учетная запись Azure Cosmos DB находятся в разных подписках, убедитесь, что в подписке с виртуальной сетью также зарегистрирован поставщик ресурсов Microsoft.DocumentDB. Сведения о регистрации поставщика ресурсов см. в статье Поставщики и типы ресурсов Azure.

Ниже приведены инструкции по регистрации подписки с помощью поставщика ресурсов.

Настройка конечной точки службы для новой виртуальной сети и подсети Azure

  1. В области Все ресурсы найдите учетную запись Azure Cosmos DB, которую требуется защитить.

  2. В меню параметров выберите Сеть, затем для раздела "Разрешить доступ из" выберите значение Выбранные сети.

  3. Чтобы предоставить доступ к новой виртуальной сети Azure, в разделе Виртуальные сети выберите Добавить новую виртуальную сеть.

  4. Укажите сведения, необходимые для создания новой виртуальной сети, а затем выберите Создать. Подсеть будет создана с конечной точкой службы для включенной "Microsoft.AzureCosmosDB".

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

Если ваша учетная запись Azure Cosmos DB используется другими службами Azure, такими как поиск ИИ Azure, или осуществляется из Stream Analytics или Power BI, вы можете разрешить доступ, выбрав "Принять подключения" в глобальных центрах обработки данных Azure.

Чтобы иметь доступ к метрикам Azure Cosmos DB с портала, необходимо включить параметр Разрешение доступа с портала Azure. Дополнительные сведения об этих параметрах см. в статье Настройка брандмауэра IP-адресов. После включения доступа выберите Сохранить для сохранения настроек.

Удаление виртуальной сети или подсети

  1. В области Все ресурсы найдите учетную запись Azure Cosmos DB, для которой назначены конечные точки службы.

  2. В меню параметров выберите пункт Сеть.

  3. Чтобы удалить правило подсети или виртуальной сети, выберите ... рядом с виртуальной сетью или подсетью и нажмите Удалить.

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

  4. Нажмите кнопку Сохранить, чтобы применить изменения.

Настройка конечной точки службы с помощью Azure PowerShell

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Для настройки конечной точки службы для учетной записи Azure Cosmos DB с помощью Azure PowerShell выполните следующие действия:

  1. Установите Azure PowerShell и выполните вход.

  2. Включите конечную точку службы для существующей подсети виртуальной сети.

    $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
    

    Примечание.

    Если вы используете PowerShell или интерфейс командной строки Azure, не забудьте указать полный список фильтров IP-адресов и ACL виртуальной сети в параметрах, а не только те, которые должны быть добавлены.

  3. Получите сведения о виртуальной сети.

    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  4. Подготовка правила виртуальная сеть Azure Cosmos DB

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  5. Обновите свойства учетной записи Azure Cosmos DB с помощью новой конфигурации конечной точки виртуальной сети:

    $accountName = "<Azure Cosmos DB account name>"
    
    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  6. Выполните следующую команду, чтобы убедиться, что ваша учетная запись Azure Cosmos DB обновлена с конечной точкой службы для виртуальной сети, настроенной на предыдущем этапе:

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

Настройка конечной точки службы с помощью Azure CLI

Учетные записи Azure Cosmos DB можно настроить для конечных точек службы при их создании или обновлении позже, если подсеть уже настроена для них. Конечные точки службы также можно включить в учетной записи Azure Cosmos DB, где подсеть еще не настроена. После настройки подсети начнет работать конечная точка службы. Эта гибкость позволяет администраторам, у которых нет доступа к учетной записи Azure Cosmos DB и ресурсам виртуальной сети, чтобы сделать конфигурации независимо друг от друга.

Создайте новую учетную запись Azure Cosmos DB и подключите ее к внутренней подсети для новой виртуальной сети.

В этом примере виртуальная сеть и подсеть создаются с помощью конечных точек службы, которые будут включены при создании.

# 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

Подключение и настроить учетную запись Azure Cosmos DB для внутренней подсети независимо

В этом примере показано, как подключить учетную запись Azure Cosmos DB к существующей или новой виртуальной сети. В этом примере подсеть еще не настроена для конечных точек службы. Настройте конечную точку службы с помощью параметра --ignore-missing-vnet-service-endpoint. Эта конфигурация позволяет учетной записи Azure Cosmos DB завершить работу без ошибок до завершения настройки подсети виртуальной сети. После завершения настройки подсети учетная запись Azure Cosmos DB будет доступна через настроенную подсеть.

# 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

Диапазон портов при использовании режима прямого подключения

При использовании конечных точек службы с учетной записью Azure Cosmos DB через подключение к прямому режиму необходимо убедиться, что диапазон TCP-портов от 10000 до 20000 открыт.

Миграция из правила брандмауэра для IP-адресов в ACL виртуальной сети

Чтобы перенести учетную запись Azure Cosmos DB из использования правил брандмауэра IP-адресов для использования конечных точек службы виртуальной сети, выполните следующие действия.

После настройки учетной записи Azure Cosmos DB в качестве конечной точки службы для подсети каждый запрос из этой подсети по-разному отправляется в Azure Cosmos DB. Запросы отправляются с информацией об источнике виртуальной сети и подсети, а не с общедоступным IP-адресом источника. Эти запросы больше не будут соответствовать IP-фильтру, настроенному для учетной записи Azure Cosmos DB, поэтому необходимо выполнить следующие действия, чтобы избежать простоев.

  1. Получение информации о виртуальной сети и подсети:

    $resourceGroupName = "myResourceGroup"
    $accountName = "mycosmosaccount"
    $vnetName = "myVnet"
    $subnetName = "mySubnet"
    
    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  2. Подготовка нового объекта правила виртуальной сети для учетной записи Azure Cosmos DB:

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  3. Обновите учетную запись Azure Cosmos DB, чтобы включить доступ к конечной точке службы из подсети:

    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  4. Повторите предыдущие шаги для всех Azure Cosmos DB учетных записей, доступных из подсети.

  5. Включите конечную точку службы Azure Cosmos DB в виртуальной сети и подсети, выполнив шаг, показанный в разделе "Включить конечную точку службы" для существующей подсети раздела виртуальной сети этой статьи.

  6. Удалите правило брандмауэра IP для подсети из правил брандмауэра учетной записи Azure Cosmos DB.

Часто задаваемые вопросы

Ниже приведены некоторые часто задаваемые вопросы о настройке доступа из виртуальных сетей.

Совместимы ли в настоящее время записные книжки и оболочка Mongo/Cassandra с учетными записями с поддержкой виртуальной сети?

На данный момент интеграция оболочки Mongo и оболочки Cassandra в azure Cosmos DB Data Обозреватель, а служба Jupyter Notebooks не поддерживается с доступом к виртуальной сети. Сейчас эта интеграция находится на стадии активной разработки.

Можно ли указать конечную точку службы виртуальной сети и политику управления доступом IP-адресов в учетной записи Azure Cosmos DB?

Вы можете включить как конечную точку службы виртуальной сети, так и политику управления доступом IP (также называемую брандмауэром) в учетной записи Azure Cosmos DB. Эти две функции являются взаимодополняющими и коллективно обеспечивают изоляцию и безопасность учетной записи Azure Cosmos DB. Использование брандмауэра IP гарантирует, что статические IP-адреса могут получать доступ к учетной записи Azure Cosmos DB.

Как ограничить доступ к подсети в виртуальной сети?

Существует два шага, необходимых для ограничения доступа к учетной записи Azure Cosmos DB из подсети. Во-первых, разрешите трафику из подсети переносить свою подсеть и идентификатор виртуальной сети в Azure Cosmos DB. Изменение идентификатора трафика выполняется путем включения конечной точки службы для Azure Cosmos DB в подсети. Далее добавляется правило в учетной записи Azure Cosmos DB, указывающее эту подсеть в качестве источника, из которого можно получить доступ к учетной записи.

Будут ли ACL виртуальной сети и брандмауэр IP-адресов отклонять запросы или соединения?

Когда добавляются правила доступа брандмауэра IP-адресов или виртуальной сети, только запросы из разрешенных источников получают действительные ответы. Другие запросы отклоняются с ошибкой "403 (запрещено)". Важно различать брандмауэр учетной записи Azure Cosmos DB от брандмауэра уровня подключения. Источник данных может по-прежнему подключаться к службе, сами подключения не отклоняются.

Мои запросы начали блокироваться при включении конечной точки службы для Azure Cosmos DB в подсети. Что произошло?

После того как конечная точка службы для Azure Cosmos DB будет включена в подсети, источник трафика, подключающийся к учетной записи, переключится с общего IP-адреса на виртуальную сеть и подсеть. Если у вашей учетной записи Azure Cosmos DB есть только брандмауэр на основе IP-адресов, трафик из подсети с включенной службой больше не будет соответствовать правилам брандмауэра IP и поэтому будет отклонен. Выполните действия, чтобы прозрачно выполнить миграцию из брандмауэра на основе IP-адресов в виртуальную сеть с управлением доступом.

Требуются ли дополнительные разрешения на управление доступом на основе ролей Azure для учетных записей Azure Cosmos DB с конечными точками службы виртуальной сети?

После добавления конечных точек службы виртуальной сети в учетную запись Azure Cosmos DB для внесения изменений в параметры учетной записи необходимо получить доступ ко Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action всем виртуальным сетям, настроенным в учетной записи Azure Cosmos DB. Это разрешение необходимо, так как в процессе авторизации подтверждается право доступа к ресурсам (ресурсам базы данных и виртуальной сети). Только после этого выполняется оценка параметров.

В ходе авторизации подтверждается разрешение на выполнение действия ресурсом службы виртуальной сети, даже если пользователь не задаст списки контроля доступа к виртуальной сети, используя интерфейс командной строки Azure. В настоящее время уровень управления учетной записи Azure Cosmos DB поддерживает настройку полного состояния учетной записи Azure Cosmos DB. Одним из параметров для вызова уровня управления является virtualNetworkRules. Если этот параметр не задан, Azure CLI отправляет вызов получения базы данных, чтобы извлечь virtualNetworkRules, и использует это значение в вызове обновления.

У одноранговых виртуальных сетей также есть доступ к учетной записи Azure Cosmos DB?

У учетной записи Azure Cosmos DB есть доступ только к виртуальной сети и их подсетям. Одноранговые виртуальные сети не могут получить доступ к учетной записи, пока подсети в одноранговых виртуальных сетях не будут добавлены в учетную запись.

Какое максимальное количество подсетей разрешено получить доступ к одной учетной записи Azure Cosmos DB?

В настоящее время для учетной записи Azure Cosmos DB может быть разрешено не более 256 подсетей.

Можно ли включить доступ для VPN и Express Route?

Для доступа к учетной записи Azure Cosmos DB через Express route из локальной среды необходимо включить пиринг Майкрософт. После установки правил доступа к IP-адресу или виртуальной сети можно добавить общедоступные IP-адреса, используемые для пиринга Майкрософт в брандмауэре IP-адресов учетной записи Azure Cosmos DB, чтобы разрешить локальные службы доступ к учетной записи Azure Cosmos DB.

Нужно ли обновлять правила группы безопасности сети (NSG)?

Правила группы безопасности сети позволяют ограничить возможность подключения к подсети с помощью виртуальной сети. При добавлении конечной точки службы для Azure Cosmos DB в подсеть нет необходимости открывать исходящие подключения в NSG для учетной записи Azure Cosmos DB.

Доступны ли конечные точки служб для всех виртуальных сетей?

Нет, только виртуальные сети Azure Resource Manager могут использовать конечную точку службы. Классические виртуальные сети не поддерживают конечные точки службы.

Когда следует принимать подключения из глобальных центров обработки данных Azure для учетной записи Azure Cosmos DB?

Этот параметр следует включать только в том случае, если учетная запись Azure Cosmos DB должна быть доступна любой службе Azure в любом регионе Azure. Другие сторонние службы Azure, такие как Фабрика данных Azure и поиск ИИ Azure, предоставляют документацию по защите доступа к источникам данных, включая учетные записи Azure Cosmos DB, например:

Следующие шаги