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

ПРИМЕНИМО К: API SQL API Cassandra API Gremlin API таблиц API Azure Cosmos DB для MongoDB

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

По умолчанию доступ к учетной записи Azure Cosmos можно получить через любой источник при условии, что запрос сопровождается допустимым маркером проверки подлинности. При добавлении одной или нескольких подсетей в виртуальную сеть только запросы, полученные из этих подсетей, будут получать правильный ответ. Запросы, полученные из любого другого источника, получат ответ "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. В меню параметров выберите Брандмауэры и виртуальные сети, затем в разделе Выбранные сети разрешите доступ.

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

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

    Выбор виртуальной сети и подсети

    Примечание

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

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

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

Примечание

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

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

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

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

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

  2. В меню параметров выберите Брандмауэры и виртуальные сети Azure, затем в разделе Выбранные сети разрешите доступ.

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

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

    Выбор виртуальной сети и подсети для новой виртуальной сети

Если ваша учетная запись Azure Cosmos DB используется другими службами Azure, такими как Azure Cognitive Search, или доступна из Stream Analytics или Power BI, можно разрешить доступ, включив параметр Принимать подключения из общедоступных центров обработки данных Azure (Accept connections from within global Azure datacenter) .

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

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

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

  2. Выберите Брандмауэры и виртуальные сети в меню параметров.

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

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

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

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

Примечание

В этой статье предусмотрено использование модуля Azure Az PowerShell, который является рекомендуемым модулем PowerShell для взаимодействия с Azure. Чтобы начать работу с модулем Az PowerShell, ознакомьтесь со статьей Установка 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. Подготовка правила виртуальной сети Cosmos DB

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

    $accountName = "<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

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

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

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

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

# Resource group and Cosmos 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 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 a Cosmos DB account with default values and service endpoints
az cosmosdb create \
   -n $accountName \
   -g $resourceGroupName \
   --enable-virtual-network true \
   --virtual-network-rules $svcEndpoint

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

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

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

# Resource group and Cosmos 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 a 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 через подключение в прямом режиме, необходимо убедиться, что диапазон портов TCP от 10000 до 20000 открыт.

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

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

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

Прежде чем продолжать, включите конечную точку службы 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. Удалите правило брандмауэра IP для подсети из правил брандмауэра учетной записи Azure Cosmos DB.

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

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

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

В настоящее время интеграция оболочки Mongo и оболочки Cassandra в обозреватель данных Cosmos DB и службу Jupyter Notebooks не поддерживаются для доступа VNET. В настоящее время эта возможность находится на стадии активной разработки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это необходимо, только если нужен доступ к учетной записи Azure Cosmos DB из других служб Azure, таких как Фабрика данных Azure, Когнитивный поиск Azure или другой службы, развернутой в данном регионе Azure.

Дальнейшие действия