Udostępnij za pośrednictwem


Konfigurowanie usługi Azure Private Link dla konta usługi Azure Cosmos DB

DOTYCZY: NoSQL MongoDB Kasandra Gremlin Stół

Za pomocą usługi Azure Private Link możesz nawiązać połączenie z kontem usługi Azure Cosmos DB za pośrednictwem prywatnego punktu końcowego. Prywatny punkt końcowy to zestaw prywatnych adresów IP w w podsieci w obrębie określonej sieci wirtualnej. Następnie możesz ograniczyć dostęp do konta usługi Azure Cosmos DB za pośrednictwem prywatnych adresów IP. Gdy usługa Private Link jest połączona z restrykcyjnymi zasadami sieciowej grupy zabezpieczeń, pomaga zmniejszyć ryzyko eksfiltracji danych. Aby dowiedzieć się więcej na temat prywatnych punktów końcowych, zobacz Co to jest usługa Azure Private Link?

Uwaga

Usługa Private Link nie uniemożliwia rozpoznawania punktów końcowych usługi Azure Cosmos DB przez publiczny system DNS. Filtrowanie żądań przychodzących odbywa się na poziomie aplikacji, a nie na poziomie transportu ani sieci.

Usługa Private Link umożliwia użytkownikom dostęp do konta usługi Azure Cosmos DB z sieci wirtualnej lub z dowolnej równorzędnej sieci wirtualnej. Zasoby mapowane na usługę Private Link są również dostępne lokalnie za pośrednictwem prywatnej komunikacji równorzędnej za pośrednictwem sieci VPN lub usługi Azure ExpressRoute.

Możesz nawiązać połączenie z kontem usługi Azure Cosmos DB skonfigurowanym za pomocą usługi Private Link przy użyciu metody automatycznego lub ręcznego zatwierdzania. Aby dowiedzieć się więcej, zobacz sekcję przepływu pracy zatwierdzania w dokumentacji usługi Private Link.

W tym artykule opisano sposób konfigurowania prywatnych punktów końcowych dla magazynu transakcyjnego usługi Azure Cosmos DB. Przyjęto założenie, że używasz metody automatycznego zatwierdzania. Jeśli używasz magazynu analitycznego, zobacz Konfigurowanie prywatnych punktów końcowych dla magazynu analitycznego.

Tworzenie prywatnego punktu końcowego przy użyciu witryny Azure Portal

Wykonaj następujące kroki, aby utworzyć prywatny punkt końcowy dla istniejącego konta usługi Azure Cosmos DB przy użyciu witryny Azure Portal:

  1. Zaloguj się do witryny Azure Portal, a następnie wybierz konto usługi Azure Cosmos DB.

  2. Wybierz pozycję Sieć z listy ustawień, a następnie wybierz pozycję + Prywatny punkt końcowy na karcie Dostęp prywatny:

    Zrzut ekranu przedstawiający opcje tworzenia prywatnego punktu końcowego w witrynie Azure Portal

  3. W okienku Tworzenie prywatnego punktu końcowego — Podstawy wprowadź lub wybierz następujące szczegóły:

    Ustawienie Wartość
    Szczegóły projektu
    Subskrypcja Wybierz subskrypcję.
    Grupa zasobów Wybierz grupę zasobów.
    Szczegóły wystąpienia
    Nazwisko Wprowadź dowolną nazwę prywatnego punktu końcowego. Jeśli ta nazwa zostanie pobrana, utwórz unikatową nazwę.
    Region (Region) Wybierz region, w którym chcesz wdrożyć usługę Private Link. Utwórz prywatny punkt końcowy w tej samej lokalizacji, w której istnieje sieć wirtualna.
  4. Wybierz pozycję Dalej: Zasób.

  5. W okienku Tworzenie prywatnego punktu końcowego — zasób wprowadź lub wybierz następujące informacje:

    Ustawienie Wartość
    Metoda połączenia Wybierz pozycję Połącz z zasobem platformy Azure w moim katalogu.

    Następnie możesz wybrać jeden z zasobów, aby skonfigurować usługę Private Link. Możesz też nawiązać połączenie z zasobem innej osoby przy użyciu identyfikatora zasobu lub aliasu udostępnionego Tobie.
    Subskrypcja Wybierz subskrypcję.
    Typ zasobu Wybierz pozycję Microsoft.AzureCosmosDB/databaseAccounts.
    Zasób Wybierz konto usługi Azure Cosmos DB.
    Docelowy podźródło Wybierz typ interfejsu API usługi Azure Cosmos DB, który chcesz mapować. Domyślnie jest to tylko jeden wybór interfejsów API dla baz danych SQL, MongoDB i Cassandra. W przypadku interfejsów API dla języka Gremlin i tabeli można również wybrać pozycję NoSQL , ponieważ te interfejsy API są współdziałające z interfejsem API dla noSQL. Jeśli masz dedykowaną bramę aprowizowaną dla interfejsu API dla konta NoSQL, zobaczysz również opcję sqlDedicated.
  6. Wybierz pozycję Dalej: Sieć wirtualna.

  7. W okienku Tworzenie prywatnego punktu końcowego — Sieć wirtualna wprowadź lub wybierz następujące informacje:

    Ustawienie Wartość
    Sieć wirtualna Wybierz sieć wirtualną.
    Podsieć Wybierz podsieć.
  8. Wybierz pozycję Dalej: DNS.

  9. W okienku Tworzenie prywatnego punktu końcowego — DNS wprowadź lub wybierz następujące informacje:

    Ustawienie Wartość
    Integruj z prywatną strefą DNS Wybierz opcję Tak.

    Aby można było połączyć się prywatnie z prywatnym punktem końcowym, wymagany jest rekord DNS. Zalecamy zintegrowanie prywatnego punktu końcowego z prywatną strefą DNS. Możesz również użyć własnych serwerów DNS lub utworzyć rekordy DNS przy użyciu plików hosta na maszynach wirtualnych.

    Po wybraniu opcji tak dla tej opcji zostanie również utworzona prywatna grupa stref DNS. Grupa stref DNS to połączenie między prywatną strefą DNS a prywatnym punktem końcowym. Ten link ułatwia automatyczne aktualizowanie prywatnej strefy DNS w przypadku aktualizacji prywatnego punktu końcowego. Na przykład podczas dodawania lub usuwania regionów prywatna strefa DNS jest automatycznie aktualizowana.
    Nazwa konfiguracji Wybierz subskrypcję i grupę zasobów.

    Prywatna strefa DNS jest określana automatycznie. Nie można go zmienić przy użyciu witryny Azure Portal.
  10. Wybierz pozycję Dalej: Przeglądanie tagów>i tworzenie. Na stronie Przeglądanie i tworzenie platforma Azure weryfikuje konfigurację.

  11. Po wyświetleniu komunikatu Walidacja przekazana wybierz pozycję Utwórz.

Po zatwierdzeniu usługi Private Link dla konta usługi Azure Cosmos DB w witrynie Azure Portal opcja Wszystkie sieci w okienku Zapora i sieci wirtualne jest niedostępna.

Typy interfejsów API i nazwy stref prywatnych

Zapoznaj się z konfiguracją dns prywatnego punktu końcowego platformy Azure, aby uzyskać bardziej szczegółowe wyjaśnienie dotyczące stref prywatnych i konfiguracji DNS dla prywatnego punktu końcowego. W poniższej tabeli przedstawiono mapowanie między różnymi typami interfejsu API kont usługi Azure Cosmos DB, obsługiwanymi podźródłami i odpowiednimi nazwami stref prywatnych. Dostęp do kont języka Gremlin i interfejsu API dla tabel można również uzyskać za pośrednictwem interfejsu API dla noSQL, dlatego dla tych interfejsów API istnieją dwa wpisy. Istnieje również dodatkowy wpis dla interfejsu API dla noSQL dla kont korzystających z dedykowanej bramy.

Typ interfejsu API konta usługi Azure Cosmos DB Obsługiwane podźródła lub identyfikatory grup Nazwa strefy prywatnej
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
Table Table privatelink.table.cosmos.azure.com
Table Sql privatelink.documents.azure.com

Pobieranie prywatnych adresów IP

Po aprowizacji prywatnego punktu końcowego można wykonywać zapytania dotyczące adresów IP. Aby wyświetlić adresy IP w witrynie Azure Portal:

  1. Wyszukaj utworzony wcześniej prywatny punkt końcowy. W tym przypadku jest to cdbPrivateEndpoint3.
  2. Wybierz kartę Przegląd , aby wyświetlić ustawienia DNS i adresy IP.

Zrzut ekranu przedstawiający prywatne adresy IP w witrynie Azure Portal

Na prywatny punkt końcowy jest tworzonych wiele adresów IP:

  • Jeden dla globalnego, niezależnego od regionu punktu końcowego konta usługi Azure Cosmos DB.
  • Jeden dla każdego regionu, w którym jest wdrażane konto usługi Azure Cosmos DB.

Tworzenie prywatnego punktu końcowego przy użyciu programu Azure PowerShell

Uruchom następujący skrypt programu PowerShell, aby utworzyć prywatny punkt końcowy o nazwie MyPrivateEndpoint dla istniejącego konta usługi Azure Cosmos DB. Zastąp wartości zmiennych szczegółami środowiska.

$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

Integrowanie prywatnego punktu końcowego z prywatną strefą DNS

Po utworzeniu prywatnego punktu końcowego można zintegrować go z prywatną strefą DNS przy użyciu następującego skryptu programu 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

Pobieranie prywatnych adresów IP

Po aprowizacji prywatnego punktu końcowego można wykonywać zapytania dotyczące adresów IP i mapowania nazwy FQDN przy użyciu następującego skryptu programu 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
}

Tworzenie prywatnego punktu końcowego przy użyciu interfejsu wiersza polecenia platformy Azure

Uruchom następujący skrypt interfejsu wiersza polecenia platformy Azure, aby utworzyć prywatny punkt końcowy o nazwie myPrivateEndpoint dla istniejącego konta usługi Azure Cosmos DB. Zastąp wartości zmiennych szczegółami środowiska.

# 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

Integrowanie prywatnego punktu końcowego z prywatną strefą DNS

Po utworzeniu prywatnego punktu końcowego można zintegrować go z prywatną strefą DNS przy użyciu następującego skryptu interfejsu wiersza polecenia platformy Azure:

#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"

Tworzenie prywatnego punktu końcowego przy użyciu szablonu usługi Resource Manager

Usługę Private Link można skonfigurować, tworząc prywatny punkt końcowy w podsieci sieci wirtualnej. Można to osiągnąć przy użyciu szablonu usługi Azure Resource Manager.

Użyj następującego kodu, aby utworzyć szablon usługi Resource Manager o nazwie PrivateEndpoint_template.json. Ten szablon tworzy prywatny punkt końcowy dla istniejącego konta usługi Azure Cosmos DB vAPI for NoSQL w istniejącej sieci wirtualnej.

@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

Definiowanie pliku parametrów dla szablonu

Utwórz plik parametrów dla szablonu i nadaj mu nazwę PrivateEndpoint_parameters.json. Dodaj następujący kod do pliku parameters:

{
    "$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": ""
        }
    }
}

Wdrażanie szablonu przy użyciu skryptu programu PowerShell

Utwórz skrypt programu PowerShell przy użyciu następującego kodu. Przed uruchomieniem skryptu zastąp identyfikator subskrypcji, nazwę grupy zasobów i inne wartości zmiennych szczegółami środowiska.

### 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

W skryscie programu PowerShell zmienna GroupId może zawierać tylko jedną wartość. Ta wartość jest typem interfejsu API konta. Dozwolone wartości to: Sql, , SqlDedicated, CassandraMongoDB, Gremlin, i Table. Niektóre typy kont usługi Azure Cosmos DB są dostępne za pośrednictwem wielu interfejsów API. Na przykład:

  • Interfejs API dla kont NoSQL ma dodaną opcję dla kont skonfigurowanych do korzystania z dedykowanej bramy.
  • Dostęp do interfejsu API dla kont języka Gremlin można uzyskać zarówno z poziomu kont języka Gremlin, jak i interfejsu API dla noSQL.
  • Dostęp do interfejsu API dla kont tabel można uzyskać z poziomu kont tabel i interfejsu API dla kont NoSQL.

W przypadku tych kont należy utworzyć jeden prywatny punkt końcowy dla każdego typu interfejsu API. Jeśli tworzysz prywatny punkt końcowy dla SqlDedicatedprogramu , musisz dodać tylko drugi punkt końcowy, Sql jeśli chcesz również nawiązać połączenie z kontem przy użyciu bramy standardowej. Odpowiedni typ interfejsu API jest określony w tablicy GroupId .

Po pomyślnym wdrożeniu szablonu zobaczysz dane wyjściowe podobne do pokazanych na poniższej ilustracji. Wartość jest prawidłowa provisioningStateSucceeded , jeśli prywatne punkty końcowe są skonfigurowane poprawnie.

Zrzut ekranu przedstawiający dane wyjściowe wdrożenia szablonu usługi Resource Manager.

Po wdrożeniu szablonu prywatne adresy IP są zarezerwowane w podsieci. Reguła zapory konta usługi Azure Cosmos DB jest skonfigurowana do akceptowania połączeń tylko z prywatnego punktu końcowego.

Integrowanie prywatnego punktu końcowego z prywatną strefą DNS

Użyj następującego kodu, aby utworzyć szablon usługi Resource Manager o nazwie PrivateZone_template.json. Ten szablon tworzy prywatną strefę DNS dla istniejącego konta interfejsu API usługi Azure Cosmos DB dla noSQL w istniejącej sieci wirtualnej.

{
    "$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')]"
                }
            }
        }        
    ]
}

Definiowanie pliku parametrów dla szablonu

Utwórz następujący plik dwóch parametrów dla szablonu. Utwórz PrivateZone_parameters.json przy użyciu następującego kodu:

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

Użyj poniższego kodu, aby utworzyć szablon usługi Resource Manager o nazwie PrivateZoneGroup_template.json. Ten szablon tworzy prywatną grupę stref DNS dla istniejącego konta interfejsu API usługi Azure Cosmos DB dla noSQL w istniejącej sieci wirtualnej.

{
    "$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'))]"
                }
              }
            ]
          }
        }
    ]
}

Definiowanie pliku parametrów dla szablonu

Utwórz następujący plik dwóch parametrów dla szablonu. Utwórz PrivateZoneGroup_parameters.json. z następującym kodem:

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

Wdrażanie szablonu przy użyciu skryptu programu PowerShell

Utwórz skrypt programu PowerShell przy użyciu następującego kodu. Przed uruchomieniem skryptu zastąp identyfikator subskrypcji, nazwę grupy zasobów i inne wartości zmiennych szczegółami środowiska.

### 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

konfigurowanie niestandardowego systemu DNS

Należy użyć prywatnej strefy DNS w podsieci, w której utworzono prywatny punkt końcowy. Skonfiguruj punkty końcowe tak, aby każdy prywatny adres IP był mapowany na wpis DNS. Zobacz właściwość fqdns w pokazanej wcześniej odpowiedzi.

Podczas tworzenia prywatnego punktu końcowego możesz zintegrować go z prywatną strefą DNS na platformie Azure. Jeśli zamiast tego zdecydujesz się użyć niestandardowej strefy DNS, musisz skonfigurować ją tak, aby dodać rekordy DNS dla wszystkich prywatnych adresów IP zarezerwowanych dla prywatnego punktu końcowego.

Ważne

Jest to rozpoznawanie nazw DNS żądań, które określa, czy te żądania przechodzą przez prywatne punkty końcowe, czy też przyjmują standardową trasę publiczną. Upewnij się, że lokalny system DNS poprawnie odwołuje się do prywatnego adresu IP zamapowanego przez prywatny punkt końcowy.

Następujące sytuacje i wyniki są możliwe w przypadku używania usługi Private Link w połączeniu z regułami zapory:

  • Jeśli nie skonfigurujesz żadnych reguł zapory, domyślnie cały ruch będzie mógł uzyskiwać dostęp do konta usługi Azure Cosmos DB.

  • Jeśli skonfigurujesz ruch publiczny lub punkt końcowy usługi i utworzysz prywatne punkty końcowe, różne typy ruchu przychodzącego są autoryzowane przez odpowiedni typ reguły zapory. Jeśli prywatny punkt końcowy jest skonfigurowany w podsieci, w której skonfigurowano również punkt końcowy usługi:

    • ruch do konta bazy danych mapowany przez prywatny punkt końcowy jest kierowany za pośrednictwem prywatnego punktu końcowego,
    • ruch do innych kont bazy danych z podsieci jest kierowany za pośrednictwem punktu końcowego usługi.
  • Jeśli nie skonfigurujesz żadnego publicznego ruchu lub punktu końcowego usługi i utworzysz prywatne punkty końcowe, konto usługi Azure Cosmos DB będzie dostępne tylko za pośrednictwem prywatnych punktów końcowych. Jeśli nie skonfigurujesz ruchu publicznego ani punktu końcowego usługi, po odrzuceniu lub usunięciu zatwierdzonych prywatnych punktów końcowych konto zostanie otwarte dla całej sieci, chyba że PublicNetworkAccess zostanie ustawione wartość Wyłączone.

Blokowanie dostępu z sieci publicznej podczas tworzenia konta

Zgodnie z opisem w poprzedniej sekcji i chyba że zostały ustawione określone reguły zapory, dodanie prywatnego punktu końcowego sprawia, że konto usługi Azure Cosmos DB jest dostępne tylko za pośrednictwem prywatnych punktów końcowych. Oznacza to, że konto usługi Azure Cosmos DB może zostać nawiązane z ruchu publicznego po jego utworzeniu i przed dodaniu prywatnego punktu końcowego. Aby upewnić się, że dostęp do sieci publicznej jest wyłączony jeszcze przed utworzeniem prywatnych punktów końcowych, możesz ustawić flagę publicNetworkAccess na Wyłączone podczas tworzenia konta. Należy pamiętać, że ta flaga ma pierwszeństwo przed dowolnym adresem IP lub regułą sieci wirtualnej. Cały ruch w sieci publicznej i wirtualnej jest blokowany, gdy flaga jest ustawiona na Wyłączone, nawet jeśli źródłowy adres IP lub sieć wirtualna jest dozwolony w konfiguracji zapory.

Aby zapoznać się z przykładem użycia tej flagi, zobacz ten szablon usługi Azure Resource Manager.

Dodawanie prywatnych punktów końcowych do istniejącego konta usługi Azure Cosmos DB bez przestojów

Domyślnie dodanie prywatnego punktu końcowego do istniejącego konta powoduje krótki przestój w ciągu około pięciu minut. Postępuj zgodnie z tymi instrukcjami, aby uniknąć tego przestoju:

  1. Dodaj reguły adresów IP lub sieci wirtualnej do konfiguracji zapory, aby jawnie zezwolić na połączenia klientów.
  2. Poczekaj 10 minut, aby upewnić się, że aktualizacja konfiguracji jest stosowana.
  3. Skonfiguruj nowy prywatny punkt końcowy.
  4. Usuń reguły zapory ustawione w kroku 1.

Uwaga

Jeśli masz uruchomione aplikacje korzystające z zestawów SDK usługi Azure Cosmos DB, podczas aktualizacji konfiguracji mogą występować przejściowe przekroczenia limitu czasu. Upewnij się, że aplikacja została zaprojektowana tak, aby była odporna na przejściowe błędy łączności i czy logika ponawiania prób została włączona w razie potrzeby.

Zakres portów w przypadku korzystania z trybu bezpośredniego

Jeśli używasz usługi Private Link z kontem usługi Azure Cosmos DB za pośrednictwem połączenia w trybie bezpośrednim, upewnij się, że jest otwarty pełny zakres portów TCP (0– 65535).

Aktualizowanie prywatnego punktu końcowego podczas dodawania lub usuwania regionu

Istnieją trzy regiony wdrożeń kont usługi Azure Cosmos DB: Zachodnie stany USA, Środkowe stany USA i Europa Zachodnia. Podczas tworzenia prywatnego punktu końcowego dla konta w podsieci są zarezerwowane cztery prywatne adresy IP. Istnieje jeden adres IP dla każdego z trzech regionów i istnieje jeden adres IP dla globalnego punktu końcowego niezależnego od regionu. Później możesz dodać nowy region do konta usługi Azure Cosmos DB. Prywatna strefa DNS jest aktualizowana w następujący sposób:

  • Jeśli jest używana prywatna grupa stref DNS:

    Jeśli używasz prywatnej grupy stref DNS, prywatna strefa DNS zostanie automatycznie zaktualizowana po zaktualizowaniu prywatnego punktu końcowego. W poprzednim przykładzie po dodaniu nowego regionu prywatna strefa DNS zostanie automatycznie zaktualizowana.

  • Jeśli prywatna grupa stref DNS nie jest używana:

    Jeśli nie używasz prywatnej grupy stref DNS, dodawanie lub usuwanie regionów na koncie usługi Azure Cosmos DB wymaga dodania lub usunięcia wpisów DNS dla tego konta. Po dodaniu lub usunięciu regionów można zaktualizować prywatną strefę DNS podsieci, aby odzwierciedlić dodane lub usunięte wpisy DNS i odpowiadające im prywatne adresy IP.

    W poprzednim przykładzie po dodaniu nowego regionu należy dodać odpowiedni rekord DNS do prywatnej strefy DNS lub niestandardowej usługi DNS. Te same kroki można wykonać po usunięciu regionu. Po usunięciu regionu należy usunąć odpowiedni rekord DNS z prywatnej strefy DNS lub niestandardowej usługi DNS.

Bieżące ograniczenia

Podczas korzystania z usługi Private Link z kontem usługi Azure Cosmos DB obowiązują następujące ograniczenia:

  • Nie można mieć więcej niż 200 prywatnych punktów końcowych na jednym koncie usługi Azure Cosmos DB.

  • Jeśli używasz usługi Private Link z kontem usługi Azure Cosmos DB za pośrednictwem połączenia w trybie bezpośrednim, możesz użyć tylko protokołu TCP. Protokół HTTP nie jest obecnie obsługiwany.

  • W przypadku korzystania z interfejsu API usługi Azure Cosmos DB dla konta bazy danych MongoDB prywatny punkt końcowy jest obsługiwany dla kont na serwerze w wersji 3.6 lub nowszej (czyli kont korzystających z punktu końcowego w formacie *.mongo.cosmos.azure.com). Usługa Private Link nie jest obsługiwana w przypadku kont na serwerze w wersji 3.2 (czyli kont korzystających z punktu końcowego w formacie *.documents.azure.com). Aby użyć usługi Private Link, należy przeprowadzić migrację starych kont do nowej wersji.

  • Jeśli używasz interfejsu API usługi Azure Cosmos DB dla konta bazy danych MongoDB z usługą Private Link, narzędzia i biblioteki muszą obsługiwać identyfikację nazw usług (SNI) lub przekazać appName parametr z parametry połączenia, aby prawidłowo nawiązać połączenie. Niektóre starsze narzędzia i biblioteki mogą nie być zgodne z funkcją usługi Private Link.

  • Administrator sieci powinien mieć co najmniej Microsoft.DocumentDB/databaseAccounts/PrivateEndpointConnectionsApproval/action uprawnienie w zakresie konta usługi Azure Cosmos DB w celu utworzenia automatycznie zatwierdzonych prywatnych punktów końcowych.

  • Obecnie nie można zatwierdzić odrzuconego połączenia prywatnego punktu końcowego. Zamiast tego utwórz ponownie prywatny punkt końcowy, aby wznowić łączność prywatną. Usługa łącza prywatnego usługi Azure Cosmos DB automatycznie zatwierdza ponownie utworzony prywatny punkt końcowy.

Ograniczenia dotyczące integracji prywatnej strefy DNS

Jeśli nie używasz prywatnej grupy stref DNS, rekordy DNS w prywatnej strefie DNS nie są usuwane automatycznie po usunięciu prywatnego punktu końcowego lub usunięciu regionu z konta usługi Azure Cosmos DB. Przed wykonaniem następujących czynności należy ręcznie usunąć rekordy DNS:

  • Dodanie nowego prywatnego punktu końcowego połączonego z tą prywatną strefą DNS.
  • Dodanie nowego regionu do dowolnego konta bazy danych z prywatnymi punktami końcowymi połączonymi z tą prywatną strefą DNS.

Jeśli rekordy DNS nie są czyszczone, mogą wystąpić nieoczekiwane problemy z płaszczyzną danych. Te problemy obejmują awarię danych w regionach dodanych po usunięciu prywatnego punktu końcowego lub usunięciu regionu.

Następne kroki

Aby dowiedzieć się więcej na temat funkcji zabezpieczeń usługi Azure Cosmos DB, zobacz następujące artykuły:

  • Aby skonfigurować zaporę dla usługi Azure Cosmos DB, zobacz Obsługa zapory.

  • Aby dowiedzieć się, jak skonfigurować punkt końcowy usługi sieci wirtualnej dla konta usługi Azure Cosmos DB, zobacz Konfigurowanie dostępu z sieci wirtualnych.

  • Aby dowiedzieć się więcej na temat usługi Private Link, zobacz dokumentację usługi Azure Private Link .