Бөлісу құралы:


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

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

С помощью Приватный канал Azure можно подключиться к учетной записи Azure Cosmos DB через частную конечную точку. Частная конечная точка — это набор частных IP-адресов в подсети в виртуальной сети. Затем можно ограничить доступ к учетной записи Azure Cosmos DB по частным IP-адресам. При сочетании Приватный канал с ограничивающими политиками группы безопасности сети (NSG) она помогает снизить риск кражи данных. Дополнительные сведения о частных конечных точках см. в статье "Что такое Приватный канал Azure?"

Примечание.

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

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

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

В этой статье описано, как настроить частные конечные точки для хранилища транзакций Azure Cosmos DB. Предполагается, что вы используете метод автоматического утверждения. Если вы используете аналитическое хранилище, ознакомьтесь с разделом "Настройка частных конечных точек" для аналитического хранилища.

Создание частной конечной точки с помощью портала Azure

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

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

  2. Выберите "Сеть" из списка параметров и выберите "Частная конечная точка " на вкладке "Частный доступ ".

    Снимок экрана: выборы для создания частной конечной точки в портал Azure

  3. В области Создание частной конечной точки — Основные введите или выберите следующие параметры.

    Параметр Значение
    Сведения о проекте
    Отток подписок Выберите свою подписку.
    Группа ресурсов Выберите группу ресурсов.
    Сведения об экземпляре
    Имя. Введите любое имя для частной конечной точки. Если это имя уже используется, создайте уникальное имя.
    Область/регион Выберите регион, в котором требуется развернуть Приватный канал. Создайте частную конечную точку в том же расположении, где находится виртуальная сеть.
  4. По завершении выберите Далее: Ресурс.

  5. В области "Создание частной конечной точки" введите или выберите следующие сведения:

    Параметр Значение
    Способ подключения Выберите Подключиться к ресурсу Azure в моем каталоге.

    Затем можно выбрать один из ресурсов для настройки Приватного канала. Или можно подключиться к чужому ресурсу, используя предоставленный вам ИД или псевдоним ресурса.
    Отток подписок Выберите свою подписку.
    Тип ресурса Выберите Microsoft.AzureCosmosDB/databaseAccounts.
    Ресурс Выберите свою учетную запись Azure Cosmos DB.
    Целевой подресурс Выберите тип API Azure Cosmos DB, который нужно сопоставить. По умолчанию используется только один вариант для API для SQL, MongoDB и Cassandra. Для API для Gremlin и Table можно также выбрать NoSQL , так как эти API взаимодействуют с API для NoSQL. Если у вас есть выделенный шлюз, подготовленный для учетной записи API для NoSQL, вы также увидите вариант sqlDedicated.
  6. Выберите Далее: Виртуальная сеть.

  7. В области "Создание частной конечной точки" виртуальная сеть введите или выберите следующие сведения:

    Параметр Значение
    Виртуальная сеть Выберите свою виртуальную сеть.
    Подсеть Выберите подсеть.
  8. Выберите Далее: DNS.

  9. В области "Создать частную конечную точку " DNS " введите или выберите следующую информацию:

    Параметр Значение
    Интегрировать с частной зоной DNS Выберите Да.

    Для частного подключения к частной конечной точке требуется запись DNS. Рекомендуем интегрировать частную конечную точку с частной зоной DNS. Вы также можете использовать собственные DNS-серверы или создать записи DNS с использованием файлов узлов на своих виртуальных машинах.

    Если для этого параметра выбирается "Да", также создается группа частных зон DNS. Группа зон DNS устанавливает связь между частной зоной DNS и частной конечной точкой. Эта ссылка помогает автоматически обновлять частную зону DNS при обновлении частной конечной точки. Например, при добавлении или удалении регионов частная зона DNS обновляется автоматически.
    Имя конфигурации Выберите подписку и группу ресурсов.

    Частная зона DNS определяется автоматически. Ее нельзя изменить на портале Azure.
  10. Нажмите кнопку "Далее": проверка тегов>и создание. На странице Просмотр и создание Azure проверит вашу конфигурацию.

  11. При появлении сообщения Проверка пройдена нажмите кнопку Создать.

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

Типы API и имена частных зон

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

Тип API учетной записи Azure Cosmos DB Поддерживаемые подресурсы или идентификаторы групп Имя частной зоны
NoSQL SQL privatelink.documents.azure.com
NoSQL SqlDedicated privatelink.sqlx.cosmos.azure.com
Cassandra Cassandra privatelink.cassandra.cosmos.azure.com
Mongo MongoDB privatelink.mongo.cosmos.azure.com
Gremlin Gremlin privatelink.gremlin.cosmos.azure.com
Gremlin SQL privatelink.documents.azure.com
Таблица Таблица privatelink.table.cosmos.azure.com
Таблица SQL privatelink.documents.azure.com

Получение частных IP-адресов

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

  1. Найдите частную конечную точку, созданную ранее. В данном случае это cdbPrivateEndpoint3.
  2. Перейдите на вкладку Обзор, чтобы просмотреть параметры DNS и IP-адреса.

Снимок экрана: частные IP-адреса в портал Azure

Для каждой частной конечной точки создается несколько IP-адресов.

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

Создание частной конечной точки с помощью Azure PowerShell

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

$SubscriptionId = "<your Azure subscription ID>"
# Resource group where the Azure Cosmos DB account and virtual network resources are located
$ResourceGroupName = "myResourceGroup"
# Name of the Azure Cosmos DB account
$CosmosDbAccountName = "mycosmosaccount"

# Resource for the Azure Cosmos DB account: Sql, SqlDedicated, MongoDB, Cassandra, Gremlin, or Table
$CosmosDbSubResourceType = "Sql"
# Name of the existing virtual network
$VNetName = "myVnet"
# Name of the target subnet in the virtual network
$SubnetName = "mySubnet"
# Name of the private endpoint to create
$PrivateEndpointName = "MyPrivateEndpoint"
# Location where the private endpoint can be created. The private endpoint should be created in the same location where your subnet or the virtual network exists
$Location = "westcentralus"

$cosmosDbResourceId = "/subscriptions/$($SubscriptionId)/resourceGroups/$($ResourceGroupName)/providers/Microsoft.DocumentDB/databaseAccounts/$($CosmosDbAccountName)"

$privateEndpointConnection = New-AzPrivateLinkServiceConnection -Name "myConnectionPS" -PrivateLinkServiceId $cosmosDbResourceId -GroupId $CosmosDbSubResourceType
 
$virtualNetwork = Get-AzVirtualNetwork -ResourceGroupName  $ResourceGroupName -Name $VNetName  
 
$subnet = $virtualNetwork | Select -ExpandProperty subnets | Where-Object  {$_.Name -eq $SubnetName}  
 
$privateEndpoint = New-AzPrivateEndpoint -ResourceGroupName $ResourceGroupName -Name $PrivateEndpointName -Location $Location -Subnet  $subnet -PrivateLinkServiceConnection $privateEndpointConnection

Интеграция частной конечной точки с частной зоной DNS

После создания частной конечной точки ее можно интегрировать с частной зоной DNS с помощью следующего сценария PowerShell.

Import-Module Az.PrivateDns

# Zone name differs based on the API type and group ID you are using. 
$zoneName = "privatelink.documents.azure.com"
$zone = New-AzPrivateDnsZone -ResourceGroupName $ResourceGroupName `
  -Name $zoneName

$link  = New-AzPrivateDnsVirtualNetworkLink -ResourceGroupName $ResourceGroupName `
  -ZoneName $zoneName `
  -Name "myzonelink" `
  -VirtualNetworkId $virtualNetwork.Id  
 
$pe = Get-AzPrivateEndpoint -Name $PrivateEndpointName `
  -ResourceGroupName $ResourceGroupName

$networkInterface = Get-AzResource -ResourceId $pe.NetworkInterfaces[0].Id `
  -ApiVersion "2019-04-01"

# Create DNS configuration

$PrivateDnsZoneId = $zone.ResourceId

$config = New-AzPrivateDnsZoneConfig -Name $zoneName `
 -PrivateDnsZoneId $PrivateDnsZoneId

## Create a DNS zone group
New-AzPrivateDnsZoneGroup -ResourceGroupName $ResourceGroupName `
 -PrivateEndpointName $PrivateEndpointName `
 -Name "MyPrivateZoneGroup" `
 -PrivateDnsZoneConfig $config

Получение частных IP-адресов

После подготовки частной конечной точки можно запросить IP-адреса и сопоставление полного доменного имени с помощью следующего сценария PowerShell.

$pe = Get-AzPrivateEndpoint -Name MyPrivateEndpoint -ResourceGroupName myResourceGroup
$networkInterface = Get-AzNetworkInterface -ResourceId $pe.NetworkInterfaces[0].Id
foreach ($IPConfiguration in $networkInterface.IpConfigurations)
{
    Write-Host $IPConfiguration.PrivateIpAddress ":" $IPConfiguration.PrivateLinkConnectionProperties.Fqdns
}

Создание частной конечной точки с помощью Azure CLI

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

# Resource group where the Azure Cosmos DB account and virtual network resources are located
ResourceGroupName="myResourceGroup"

# Subscription ID where the Azure Cosmos DB account and virtual network resources are located
SubscriptionId="<your Azure subscription ID>"

# Name of the existing Azure Cosmos DB account
CosmosDbAccountName="mycosmosaccount"

# API type of your Azure Cosmos DB account: Sql, SqlDedicated, MongoDB, Cassandra, Gremlin, or Table
CosmosDbSubResourceType="Sql"

# Name of the virtual network to create
VNetName="myVnet"

# Name of the subnet to create
SubnetName="mySubnet"

# Name of the private endpoint to create
PrivateEndpointName="myPrivateEndpoint"

# Name of the private endpoint connection to create
PrivateConnectionName="myConnection"

az network vnet create \
 --name $VNetName \
 --resource-group $ResourceGroupName \
 --subnet-name $SubnetName

az network vnet subnet update \
 --name $SubnetName \
 --resource-group $ResourceGroupName \
 --vnet-name $VNetName \
 --disable-private-endpoint-network-policies true

az network private-endpoint create \
    --name $PrivateEndpointName \
    --resource-group $ResourceGroupName \
    --vnet-name $VNetName  \
    --subnet $SubnetName \
    --private-connection-resource-id "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.DocumentDB/databaseAccounts/$CosmosDbAccountName" \
    --group-ids $CosmosDbSubResourceType \
    --connection-name $PrivateConnectionName

Интеграция частной конечной точки с частной зоной DNS

После создания частной конечной точки ее можно интегрировать с частной зоной DNS с помощью следующего сценария Azure CLI.

#Zone name differs based on the API type and group ID you are using. 
zoneName="privatelink.documents.azure.com"

az network private-dns zone create --resource-group $ResourceGroupName \
   --name  $zoneName

az network private-dns link vnet create --resource-group $ResourceGroupName \
   --zone-name  $zoneName\
   --name myzonelink \
   --virtual-network $VNetName \
   --registration-enabled false 

#Create a DNS zone group
az network private-endpoint dns-zone-group create \
   --resource-group $ResourceGroupName \
   --endpoint-name $PrivateEndpointName \
   --name "MyPrivateZoneGroup" \
   --private-dns-zone $zoneName \
   --zone-name "myzone"

Создание частной конечной точки с помощью шаблона Resource Manager

Можно настроить Приватный канал, создав частную конечную точку в подсети виртуальной сети. Это достигается с помощью шаблона Azure Resource Manager.

Используйте следующий код для создания шаблона Resource Manager с именем PrivateEndpoint_template.json. Этот шаблон создает частную конечную точку для существующей учетной записи Azure Cosmos DB vAPI для NoSQL в существующей виртуальной сети.

@description('Location for all resources.')
param location string = resourceGroup().location
param privateEndpointName string
param resourceId string
param groupId string
param subnetId string

resource privateEndpoint 'Microsoft.Network/privateEndpoints@2019-04-01' = {
  name: privateEndpointName
  location: location
  properties: {
    subnet: {
      id: subnetId
    }
    privateLinkServiceConnections: [
      {
        name: 'MyConnection'
        properties: {
          privateLinkServiceId: resourceId
          groupIds: [
            groupId
          ]
          requestMessage: ''
        }
      }
    ]
  }
}

output privateEndpointNetworkInterface string = privateEndpoint.properties.networkInterfaces[0].id

Создайте файл параметров для шаблона и назовите его PrivateEndpoint_parameters.json. Добавьте следующий код в файл параметров.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "privateEndpointName": {
            "value": ""
        },
        "resourceId": {
            "value": ""
        },
        "groupId": {
            "value": ""
        },
        "subnetId": {
            "value": ""
        }
    }
}

Создайте сценарий PowerShell со следующим содержимым. Перед запуском сценария замените идентификатор подписки, имя группы ресурсов и другие значения переменных на значения вашей среды.

### This script creates a private endpoint for an existing Azure Cosmos DB account in an existing virtual network

## Step 1: Fill in these details. Replace the variable values with the details for your environment.
$SubscriptionId = "<your Azure subscription ID>"
# Resource group where the Azure Cosmos DB account and virtual network resources are located
$ResourceGroupName = "myResourceGroup"
# Name of the Azure Cosmos DB account
$CosmosDbAccountName = "mycosmosaccount"
# API type of the Azure Cosmos DB account. It can be one of the following: "Sql", "SqlDedicated", "MongoDB", "Cassandra", "Gremlin", "Table"
$CosmosDbSubResourceType = "Sql"
# Name of the existing virtual network
$VNetName = "myVnet"
# Name of the target subnet in the virtual network
$SubnetName = "mySubnet"
# Name of the private endpoint to create
$PrivateEndpointName = "myPrivateEndpoint"

$cosmosDbResourceId = "/subscriptions/$($SubscriptionId)/resourceGroups/$($ResourceGroupName)/providers/Microsoft.DocumentDB/databaseAccounts/$($CosmosDbAccountName)"
$VNetResourceId = "/subscriptions/$($SubscriptionId)/resourceGroups/$($ResourceGroupName)/providers/Microsoft.Network/virtualNetworks/$($VNetName)"
$SubnetResourceId = "$($VNetResourceId)/subnets/$($SubnetName)"
$PrivateEndpointTemplateFilePath = "PrivateEndpoint_template.json"
$PrivateEndpointParametersFilePath = "PrivateEndpoint_parameters.json"

## Step 2: Sign in to your Azure account and select the target subscription.
Login-AzAccount
Select-AzSubscription -SubscriptionId $subscriptionId

## Step 3: Make sure private endpoint network policies are disabled in the subnet.
$VirtualNetwork= Get-AzVirtualNetwork -Name "$VNetName" -ResourceGroupName "$ResourceGroupName"
($virtualNetwork | Select -ExpandProperty subnets | Where-Object  {$_.Name -eq "$SubnetName"} ).PrivateEndpointNetworkPolicies = "Disabled"
$virtualNetwork | Set-AzVirtualNetwork

## Step 4: Create the private endpoint.
Write-Output "Deploying private endpoint on $($resourceGroupName)"
$deploymentOutput = New-AzResourceGroupDeployment -Name "PrivateCosmosDbEndpointDeployment" `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile $PrivateEndpointTemplateFilePath `
    -TemplateParameterFile $PrivateEndpointParametersFilePath `
    -SubnetId $SubnetResourceId `
    -ResourceId $CosmosDbResourceId `
    -GroupId $CosmosDbSubResourceType `
    -PrivateEndpointName $PrivateEndpointName

$deploymentOutput

В сценарии PowerShell переменная GroupId может содержать только одно значение. Это значение является типом API учетной записи. Допустимые значения: Sql, SqlDedicated, MongoDB, Cassandra, Gremlin и Table. Некоторые типы учетных записей Azure Cosmos DB доступны через несколько API. Например:

  • Api для учетных записей NoSQL имеет добавленный параметр для учетных записей, настроенных для использования выделенного шлюза.
  • Доступ к API для учетных записей Gremlin можно получить как из Gremlin, так и с помощью API для учетных записей NoSQL.
  • Доступ к учетным записям API для таблиц можно получить как в таблице, так и в API для учетных записей NoSQL.

Для этих учетных записей необходимо создать одну частную конечную точку для каждого типа API. Если вы создаете частную конечную точку для SqlDedicated, необходимо добавить только вторую конечную точку, если Sql вы хотите также подключиться к учетной записи с помощью стандартного шлюза. Соответствующий тип API указывается в массиве GroupId.

После успешного развертывания шаблона должны отобразиться выходные данные, аналогичные приведенным ниже. Если частные конечные точки настроены правильно, параметр provisioningState должен иметь значение Succeeded.

Снимок экрана: выходные данные развертывания для шаблона Resource Manager.

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

Интеграция частной конечной точки с частной зоной DNS

Используйте следующий код для создания шаблона Resource Manager с именем PrivateZone_template.json. Этот шаблон создает частную зону DNS для существующей учетной записи API Azure Cosmos DB для NoSQL в существующей виртуальной сети.

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "privateZoneName": {
            "type": "string"
        },
        "VNetId": {
            "type": "string"
        }        
    },
    "resources": [
        {
            "name": "[parameters('privateZoneName')]",
            "type": "Microsoft.Network/privateDnsZones",
            "apiVersion": "2018-09-01",
            "location": "global",
            "properties": {                
            }
        },
        {
            "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
            "apiVersion": "2018-09-01",
            "name": "[concat(parameters('privateZoneName'), '/myvnetlink')]",
            "location": "global",
            "dependsOn": [
                "[resourceId('Microsoft.Network/privateDnsZones', parameters('privateZoneName'))]"
            ],
            "properties": {
                "registrationEnabled": false,
                "virtualNetwork": {
                    "id": "[parameters('VNetId')]"
                }
            }
        }        
    ]
}

Создайте для шаблона следующие два файла параметров. Создайте PrivateZone_parameters.json со следующим кодом:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "privateZoneName": {
            "value": ""
        },
        "VNetId": {
            "value": ""
        }
    }
}

Используйте следующий код для создания шаблона Resource Manager с именем PrivateZoneGroup_template.json. Этот шаблон создает частную группу зон DNS для существующей учетной записи API Azure Cosmos DB для NoSQL в существующей виртуальной сети.

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "privateZoneName": {
            "type": "string"
        },
        "PrivateEndpointDnsGroupName": {
            "value": "string"
        },
        "privateEndpointName":{
            "value": "string"
        }        
    },
    "resources": [
        {
            "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
            "apiVersion": "2020-06-01",
            "name": "[parameters('PrivateEndpointDnsGroupName')]",
            "location": "global",
            "dependsOn": [
                "[resourceId('Microsoft.Network/privateDnsZones', parameters('privateZoneName'))]",
                "[variables('privateEndpointName')]"
            ],
          "properties": {
            "privateDnsZoneConfigs": [
              {
                "name": "config1",
                "properties": {
                  "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', parameters('privateZoneName'))]"
                }
              }
            ]
          }
        }
    ]
}

Создайте для шаблона следующие два файла параметров. Создайте PrivateZoneGroup_parameters.json со следующим кодом:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "privateZoneName": {
            "value": ""
        },
        "PrivateEndpointDnsGroupName": {
            "value": ""
        },
        "privateEndpointName":{
            "value": ""
        }
    }
}

Создайте сценарий PowerShell со следующим содержимым. Перед запуском сценария замените идентификатор подписки, имя группы ресурсов и другие значения переменных на значения вашей среды.

### This script:
### - creates a private zone
### - creates a private endpoint for an existing Azure Cosmos DB account in an existing VNet
### - maps the private endpoint to the private zone

## Step 1: Fill in these details. Replace the variable values with the details for your environment.
$SubscriptionId = "<your Azure subscription ID>"
# Resource group where the Azure Cosmos DB account and virtual network resources are located
$ResourceGroupName = "myResourceGroup"
# Name of the Azure Cosmos DB account
$CosmosDbAccountName = "mycosmosaccount"
# API type of the Azure Cosmos DB account. It can be one of the following: "Sql", "SqlDedicated", "MongoDB", "Cassandra", "Gremlin", "Table"
$CosmosDbSubResourceType = "Sql"
# Name of the existing virtual network
$VNetName = "myVnet"
# Name of the target subnet in the virtual network
$SubnetName = "mySubnet"
# Name of the private zone to create
$PrivateZoneName = "myPrivateZone.documents.azure.com"
# Name of the private endpoint to create
$PrivateEndpointName = "myPrivateEndpoint"

# Name of the DNS zone group to create
$PrivateEndpointDnsGroupName = "myPrivateDNSZoneGroup"

$cosmosDbResourceId = "/subscriptions/$($SubscriptionId)/resourceGroups/$($ResourceGroupName)/providers/Microsoft.DocumentDB/databaseAccounts/$($CosmosDbAccountName)"
$VNetResourceId = "/subscriptions/$($SubscriptionId)/resourceGroups/$($ResourceGroupName)/providers/Microsoft.Network/virtualNetworks/$($VNetName)"
$SubnetResourceId = "$($VNetResourceId)/subnets/$($SubnetName)"
$PrivateZoneTemplateFilePath = "PrivateZone_template.json"
$PrivateZoneParametersFilePath = "PrivateZone_parameters.json"
$PrivateEndpointTemplateFilePath = "PrivateEndpoint_template.json"
$PrivateEndpointParametersFilePath = "PrivateEndpoint_parameters.json"
$PrivateZoneGroupTemplateFilePath = "PrivateZoneGroup_template.json"
$PrivateZoneGroupParametersFilePath = "PrivateZoneGroup_parameters.json"

## Step 2: Login your Azure account and select the target subscription
Login-AzAccount 
Select-AzSubscription -SubscriptionId $subscriptionId

## Step 3: Make sure private endpoint network policies are disabled in the subnet
$VirtualNetwork= Get-AzVirtualNetwork -Name "$VNetName" -ResourceGroupName "$ResourceGroupName"
($virtualNetwork | Select -ExpandProperty subnets | Where-Object  {$_.Name -eq "$SubnetName"} ).PrivateEndpointNetworkPolicies = "Disabled"
$virtualNetwork | Set-AzVirtualNetwork

## Step 4: Create the private zone
New-AzResourceGroupDeployment -Name "PrivateZoneDeployment" `
    -ResourceGroupName $ResourceGroupName `
    -TemplateFile $PrivateZoneTemplateFilePath `
    -TemplateParameterFile $PrivateZoneParametersFilePath `
    -PrivateZoneName $PrivateZoneName `
    -VNetId $VNetResourceId

## Step 5: Create the private endpoint
Write-Output "Deploying private endpoint on $($resourceGroupName)"
$deploymentOutput = New-AzResourceGroupDeployment -Name "PrivateCosmosDbEndpointDeployment" `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile $PrivateEndpointTemplateFilePath `
    -TemplateParameterFile $PrivateEndpointParametersFilePath `
    -SubnetId $SubnetResourceId `
    -ResourceId $CosmosDbResourceId `
    -GroupId $CosmosDbSubResourceType `
    -PrivateEndpointName $PrivateEndpointName
$deploymentOutput

## Step 6: Create the private zone
New-AzResourceGroupDeployment -Name "PrivateZoneGroupDeployment" `
    -ResourceGroupName $ResourceGroupName `
    -TemplateFile $PrivateZoneGroupTemplateFilePath `
    -TemplateParameterFile $PrivateZoneGroupParametersFilePath `
    -PrivateZoneName $PrivateZoneName `
    -PrivateEndpointName $PrivateEndpointName`
    -PrivateEndpointDnsGroupName $PrivateEndpointDnsGroupName

Настройка пользовательской службы DNS

Необходимо использовать частную зону DNS в подсети, в которой была создана частная конечная точка. Настройте конечные точки таким образом, чтобы каждый частный IP-адрес был сопоставлен с записью DNS. См. свойство fqdns в ответе, показанном ранее.

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

Внимание

Это разрешение DNS-запросов, которое определяет, проходят ли эти запросы через частные конечные точки или принимают стандартный общедоступный маршрут. Убедитесь, что локальная DNS корректно ссылается на частный IP-адрес, сопоставленный с частной конечной точкой.

При использовании Приватного канала совместно с правилами брандмауэра возможны следующие ситуации и результаты.

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

  • Если вы настраиваете общедоступный трафик или конечную точку службы и создаете частные конечные точки, то для разных типов входящего трафика применяется соответствующий тип правила брандмауэра. Если частная конечная точка настроена в подсети, где также настроена конечная точка службы:

    • трафик к учетной записи базы данных, сопоставленной с частной конечной точкой, маршрутизируется через частную конечную точку;
    • трафик к другим учетным записям базы данных из подсети маршрутизируется через конечную точку службы.
  • Если вы не настраиваете общедоступный трафик или конечную точку службы и создаете частные конечные точки, учетная запись Azure Cosmos DB доступна только через частные конечные точки. Если вы не настраиваете общедоступный трафик или конечную точку службы, после того как все утвержденные частные конечные точки отклоняются или удаляются, учетная запись открыта для всей сети, если PublicNetworkAccess не задано значение "Отключено".

Блокировка доступа из общедоступной сети во время создания учетной записи

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

Пример использования этого флага см . в этом шаблоне Azure Resource Manager.

Добавление частных конечных точек в существующую учетную запись Azure Cosmos DB без простоя

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

  1. Добавьте правила IP или виртуальной сети в конфигурацию брандмауэра, чтобы в явной форме разрешить подключения клиентов.
  2. Подождите 10 минут и убедитесь, что обновление конфигурации выполнено.
  3. Настройте новую частную конечную точку.
  4. Удалите правила брандмауэра, заданные на шаге 1.

Примечание.

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

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

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

Обновление частной конечной точки при добавлении или удалении региона

Существует три региона для развертываний учетных записей Azure Cosmos DB: западная часть США, центральная часть США и Западная Европа. При создании частной конечной точки для вашей учетной записи в подсети зарезервированы четыре частных IP-адреса. Существует один IP-адрес для каждого из трех регионов, и существует один IP-адрес для глобальной конечной точки, не зависящая от региона. Позже вы можете добавить новый регион в учетную запись Azure Cosmos DB. Частная зона DNS обновляется следующим образом.

  • Если используется группа частных зон DNS

    • Если вы используете частную группу зон DNS, частная зона DNS автоматически обновляется при обновлении частной конечной точки. В предыдущем примере после добавления нового региона частная зона DNS обновилась автоматически.
  • Если частная группа зон DNS не используется:

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

    • В предыдущем примере после добавления нового региона необходимо добавить соответствующую запись DNS в частную зону DNS или пользовательскую службу DNS. Аналогичные действия необходимы и при удалении региона. После удаления региона необходимо удалить соответствующую запись DNS из вашей частной зоны DNS или пользовательской службы DNS.

Текущие ограничения

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

  • У вас не может быть более 200 частных конечных точек в одной учетной записи Azure Cosmos DB.

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

  • При использовании API Azure Cosmos DB для учетной записи MongoDB частная конечная точка поддерживается для учетных записей на сервере версии 3.6 или выше (то есть учетные записи, использующие конечную точку в формате *.mongo.cosmos.azure.com). Приватный канал не поддерживается для учетных записей на сервере версии 3.2 (то есть учетные записи, использующие конечную точку в формате*.documents.azure.com). Чтобы использовать Приватный канал, необходимо перенести старые учетные записи на новую версию.

  • При использовании API Azure Cosmos DB для учетной записи MongoDB, которая имеет Приватный канал, средства и библиотеки, должна поддерживать идентификацию имени службы (SNI) или передавать appName параметр из строка подключения для правильного подключения. Некоторые старые инструменты и библиотеки могут быть несовместимы с функцией Приватный канал.

  • Администратор сети должен быть предоставлен по крайней мере Microsoft.DocumentDB/databaseAccounts/PrivateEndpointConnectionsApproval/action разрешение на область учетной записи Azure Cosmos DB, чтобы создать автоматически утвержденные частные конечные точки.

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

Ограничения на интеграцию частной зоны DNS

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

  • добавлением новой частной конечной точки, связанной с этой частной зоной DNS;
  • добавлением нового региона в любую учетную запись базы данных с частными конечными точками, связанными с этой частной зоной DNS.

Если не очистить записи DNS, могут возникнуть непредвиденные проблемы с плоскостью данных. Эти проблемы включают сбои данных в регионах, добавленных после удаления частной конечной точки или удаления региона.