Delen via


Azure Private Link configureren voor een Azure Cosmos DB-account

VAN TOEPASSING OP: NoSQL MongoDB Cassandra Gremlin Tafel

Met behulp van Azure Private Link kunt u verbinding maken met een Azure Cosmos DB-account via een privé-eindpunt. Een privé-eindpunt is een privé IP-adres in een subnet binnen uw virtuele netwerk. Vervolgens kunt u de toegang tot een Azure Cosmos DB-account beperken via privé-IP-adressen. Wanneer Private Link wordt gecombineerd met beperkende NSG-beleidsregels (netwerkbeveiligingsgroep), helpt dit het risico op gegevensexfiltratie te verminderen. Zie Wat is Azure Private Link voor meer informatie over privé-eindpunten?

Notitie

Private Link voorkomt niet dat uw Azure Cosmos DB-eindpunten worden omgezet door openbare DNS. Filteren van binnenkomende aanvragen vindt plaats op toepassingsniveau, niet op transport- of netwerkniveau.

Met Private Link hebben gebruikers toegang tot een Azure Cosmos DB-account vanuit het virtuele netwerk of vanuit een virtueel peernetwerk. Resources die zijn toegewezen aan Private Link, zijn ook on-premises toegankelijk via privépeering via VPN of Azure ExpressRoute.

U kunt verbinding maken met een Azure Cosmos DB-account dat is geconfigureerd met Private Link met behulp van de automatische of handmatige goedkeuringsmethode. Zie de sectie goedkeuringswerkstroom van de Private Link-documentatie voor meer informatie.

In dit artikel wordt beschreven hoe u privé-eindpunten instelt voor transactionele opslag van Azure Cosmos DB. Hierbij wordt ervan uitgegaan dat u de automatische goedkeuringsmethode gebruikt. Als u de analytische opslag gebruikt, raadpleegt u Privé-eindpunten configureren voor de analytische opslag.

Een privé-eindpunt maken met behulp van Azure Portal

Volg deze stappen om een privé-eindpunt te maken voor een bestaand Azure Cosmos DB-account met behulp van Azure Portal:

  1. Meld u aan bij Azure Portal en selecteer vervolgens een Azure Cosmos DB-account.

  2. Selecteer Netwerken in de lijst met instellingen en selecteer vervolgens + Privé-eindpunt op het tabblad Privétoegang :

    Schermopname van selecties voor het maken van een privé-eindpunt in Azure Portal

  3. Voer in het deelvenster Een privé-eindpunt maken - Basisinformatie de volgende gegevens in of selecteer deze:

    Instelling Weergegeven als
    Projectdetails
    Abonnement Selecteer uw abonnement.
    Resourcegroep Selecteer een resourcegroep.
    Exemplaardetails
    Naam Voer een naam in voor uw privé-eindpunt. Als deze naam wordt gebruikt, maakt u een unieke naam.
    Regio Selecteer de regio waar u Private Link wilt implementeren. Maak het privé-eindpunt op dezelfde locatie waar uw virtuele netwerk bestaat.
  4. Selecteer Volgende: Resource.

  5. Voer in het deelvenster Een privé-eindpunt maken - Resourcevenster deze gegevens in of selecteer deze:

    Instelling Weergegeven als
    Verbindingsmethode Selecteer Verbinding maken met een Azure-resource in mijn directory.

    U kunt vervolgens een van uw resources kiezen om Private Link in te stellen. U kunt ook verbinding maken met de resource van iemand anders met behulp van een resource-id of alias die ze met u hebben gedeeld.
    Abonnement Selecteer uw abonnement.
    Brontype Selecteer Microsoft.AzureCosmosDB/databaseAccounts.
    Bron Selecteer uw Azure Cosmos DB-account.
    Subresource van doel Selecteer het Azure Cosmos DB-API-type dat u wilt toewijzen. Dit is standaard slechts één keuze voor de API's voor SQL, MongoDB en Cassandra. Voor de API's voor Gremlin en Table kunt u ook NoSQL kiezen omdat deze API's compatibel zijn met de API voor NoSQL. Als u een toegewezen gateway hebt ingericht voor een API voor NoSQL-account, ziet u ook een optie voor SqlDedicated.
  6. Selecteer Volgende: Virtueel netwerk.

  7. Voer in het deelvenster Een privé-eindpunt maken - Virtueel netwerk de volgende gegevens in of selecteer deze:

    Instelling Weergegeven als
    Virtueel netwerk Selecteer uw virtuele netwerk.
    Subnet Selecteer uw subnet.
  8. Selecteer Volgende: DNS.

  9. Voer in het deelvenster Een privé-eindpunt maken - DNS-deelvenster deze gegevens in of selecteer deze:

    Instelling Weergegeven als
    Integreren met privé-DNS-zone Selecteer Ja.

    Als u privé verbinding wilt maken met uw privé-eindpunt, hebt u een DNS-record nodig. We raden u aan uw privé-eindpunt te integreren met een privé-DNS-zone. U kunt ook uw eigen DNS-servers gebruiken of DNS-records maken met behulp van de hostbestanden op uw virtuele machines.

    Wanneer u ja selecteert voor deze optie, wordt er ook een privé-DNS-zonegroep gemaakt. DNS-zonegroep is een koppeling tussen de privé-DNS-zone en het privé-eindpunt. Met deze koppeling kunt u de privé-DNS-zone automatisch bijwerken wanneer het privé-eindpunt wordt bijgewerkt. Wanneer u bijvoorbeeld regio's toevoegt of verwijdert, wordt de privé-DNS-zone automatisch bijgewerkt.
    Configuratienaam Selecteer uw abonnement en resourcegroep.

    De privé-DNS-zone wordt automatisch bepaald. U kunt deze niet wijzigen met behulp van Azure Portal.
  10. Selecteer Volgende : Labels>beoordelen en maken. Op de pagina Controleren en maken valideert Azure uw configuratie.

  11. Als u het bericht Validatie geslaagd ziet, selecteert u Maken.

Wanneer u een goedgekeurde Private Link voor een Azure Cosmos DB-account hebt, is de optie Alle netwerken in het deelvenster Firewall en virtuele netwerken niet beschikbaar in Azure Portal.

API-typen en privézonenamen

Controleer de DNS-configuratie van Azure-privé-eindpunten voor een gedetailleerdere uitleg over privézones en DNS-configuraties voor privé-eindpunten. In de volgende tabel ziet u de toewijzing tussen verschillende API-typen Azure Cosmos DB-accounts, ondersteunde subresources en de bijbehorende privézonenamen. U hebt ook toegang tot de Gremlin- en API voor Table-accounts via de API voor NoSQL, dus er zijn twee vermeldingen voor deze API's. Er is ook een extra vermelding voor de API voor NoSQL voor accounts met behulp van de toegewezen gateway.

Api-type Azure Cosmos DB-account Ondersteunde subresources of groeps-id's Naam van privézone
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
Tabel Tabel privatelink.table.cosmos.azure.com
Tabel Sql privatelink.documents.azure.com

De privé-IP-adressen ophalen

Nadat het privé-eindpunt is ingericht, kunt u een query uitvoeren op de IP-adressen. De IP-adressen weergeven vanuit De Azure-portal:

  1. Zoek naar het privé-eindpunt dat u eerder hebt gemaakt. In dit geval is het cdbPrivateEndpoint3.
  2. Selecteer het tabblad Overzicht om de DNS-instellingen en IP-adressen weer te geven.

Schermopname van privé-IP-adressen in Azure Portal

Er worden meerdere IP-adressen per privé-eindpunt gemaakt:

  • Een voor het globale regioagnostische eindpunt van het Azure Cosmos DB-account.
  • Eén voor elke regio waar het Azure Cosmos DB-account wordt geïmplementeerd.

Een privé-eindpunt maken met behulp van Azure PowerShell

Voer het volgende PowerShell-script uit om een privé-eindpunt met de naam MyPrivateEndpoint te maken voor een bestaand Azure Cosmos DB-account. Vervang de variabelewaarden door de details voor uw omgeving.

$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

Het privé-eindpunt integreren met een privé-DNS-zone

Nadat u het privé-eindpunt hebt gemaakt, kunt u dit integreren met een privé-DNS-zone met behulp van het volgende PowerShell-script:

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

De privé-IP-adressen ophalen

Nadat het privé-eindpunt is ingericht, kunt u een query uitvoeren op de IP-adressen en de FQDN-toewijzing met behulp van het volgende PowerShell-script:

$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
}

Een privé-eindpunt maken met behulp van Azure CLI

Voer het volgende Azure CLI-script uit om een privé-eindpunt met de naam myPrivateEndpoint te maken voor een bestaand Azure Cosmos DB-account. Vervang de variabelewaarden door de details voor uw omgeving.

# 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

Het privé-eindpunt integreren met een privé-DNS-zone

Nadat u het privé-eindpunt hebt gemaakt, kunt u dit integreren met een privé-DNS-zone met behulp van het volgende Azure CLI-script:

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

Een privé-eindpunt maken met behulp van een Resource Manager-sjabloon

U kunt Private Link instellen door een privé-eindpunt te maken in een subnet van een virtueel netwerk. U bereikt dit met behulp van een Azure Resource Manager-sjabloon.

Gebruik de volgende code om een Resource Manager-sjabloon met de naam PrivateEndpoint_template.json te maken. Met deze sjabloon maakt u een privé-eindpunt voor een bestaand Azure Cosmos DB vAPI voor NoSQL-account in een bestaand virtueel netwerk.

@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

Maak een parameterbestand voor de sjabloon en noem het PrivateEndpoint_parameters.json. Voeg de volgende code toe aan het parameterbestand:

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

Maak een PowerShell-script met behulp van de volgende code. Voordat u het script uitvoert, vervangt u de abonnements-id, resourcegroepnaam en andere variabelewaarden door de details voor uw omgeving.

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

In het PowerShell-script kan de GroupId variabele slechts één waarde bevatten. Deze waarde is het API-type van het account. Toegestane waarden zijn: , , , , , en TableGremlin. CassandraMongoDBSqlDedicatedSql Sommige Azure Cosmos DB-accounttypen zijn toegankelijk via meerdere API's. Voorbeeld:

  • De API voor NoSQL-accounts heeft een extra optie voor accounts die zijn geconfigureerd voor het gebruik van de toegewezen gateway.
  • De API voor Gremlin-accounts kan worden geopend vanuit zowel Gremlin- als API voor NoSQL-accounts.
  • De API voor Table-accounts kan worden geopend vanuit zowel Table- als API voor NoSQL-accounts.

Voor deze accounts moet u één privé-eindpunt maken voor elk API-type. Als u een privé-eindpunt voor SqlDedicatedmaakt, hoeft u alleen een tweede eindpunt Sql toe te voegen als u ook verbinding wilt maken met uw account met behulp van de standaardgateway. Het bijbehorende API-type wordt opgegeven in de GroupId matrix.

Nadat de sjabloon is geïmplementeerd, ziet u een uitvoer die lijkt op wat in de volgende afbeelding wordt weergegeven. De provisioningState waarde is Succeeded als de privé-eindpunten correct zijn ingesteld.

Schermopname van de implementatie-uitvoer voor de Resource Manager-sjabloon.

Nadat de sjabloon is geïmplementeerd, worden de privé-IP-adressen gereserveerd binnen het subnet. De firewallregel van het Azure Cosmos DB-account is geconfigureerd om alleen verbindingen van het privé-eindpunt te accepteren.

Het privé-eindpunt integreren met een privé-DNS-zone

Gebruik de volgende code om een Resource Manager-sjabloon met de naam PrivateZone_template.json te maken. Met deze sjabloon maakt u een privé-DNS-zone voor een bestaand Azure Cosmos DB-API voor NoSQL-account in een bestaand virtueel netwerk.

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

Maak het volgende twee parametersbestand voor de sjabloon. Maak de PrivateZone_parameters.json met de volgende code:

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

Gebruik de volgende code om een Resource Manager-sjabloon met de naam PrivateZoneGroup_template.json te maken. Met deze sjabloon maakt u een privé-DNS-zonegroep voor een bestaand Azure Cosmos DB-API voor NoSQL-account in een bestaand virtueel netwerk.

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

Maak het volgende twee parametersbestand voor de sjabloon. Maak de PrivateZoneGroup_parameters.json met de volgende code:

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

Maak een PowerShell-script met behulp van de volgende code. Voordat u het script uitvoert, vervangt u de abonnements-id, resourcegroepnaam en andere variabelewaarden door de details voor uw omgeving.

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

Aangepaste DNS configureren

U moet een privé-DNS-zone gebruiken binnen het subnet waarin u het privé-eindpunt hebt gemaakt. Configureer de eindpunten zodat elk privé-IP-adres wordt toegewezen aan een DNS-vermelding. Zie de eigenschap fqdns in het antwoord dat eerder is weergegeven.

Wanneer u het privé-eindpunt maakt, kunt u dit integreren met een privé-DNS-zone in Azure. Als u ervoor kiest om in plaats daarvan een aangepaste DNS-zone te gebruiken, moet u deze configureren om DNS-records toe te voegen voor alle privé-IP-adressen die zijn gereserveerd voor het privé-eindpunt.

Belangrijk

Dit is de DNS-omzetting van uw aanvragen die bepalen of deze aanvragen uw privé-eindpunten doorlopen of de standaard openbare route nemen. Zorg ervoor dat uw lokale DNS correct verwijst naar het privé-IP-adres dat is toegewezen door uw privé-eindpunt.

De volgende situaties en resultaten zijn mogelijk wanneer u Private Link gebruikt in combinatie met firewallregels:

  • Als u geen firewallregels configureert, heeft al het verkeer standaard toegang tot een Azure Cosmos DB-account.

  • Als u openbaar verkeer of een service-eindpunt configureert en u privé-eindpunten maakt, worden verschillende typen binnenkomend verkeer geautoriseerd door het bijbehorende type firewallregel. Als een privé-eindpunt is geconfigureerd in een subnet waarin het service-eindpunt ook is geconfigureerd:

    • verkeer naar het databaseaccount dat door het privé-eindpunt is toegewezen, wordt gerouteerd via een privé-eindpunt,
    • verkeer naar andere databaseaccounts vanuit het subnet wordt gerouteerd via service-eindpunt.
  • Als u geen openbaar verkeer of service-eindpunt configureert en u privé-eindpunten maakt, is het Azure Cosmos DB-account alleen toegankelijk via de privé-eindpunten. Als u geen openbaar verkeer of een service-eindpunt configureert, wordt het account geopend voor het hele netwerk, tenzij PublicNetworkAccess dit is ingesteld op Uitgeschakeld nadat alle goedgekeurde privé-eindpunten zijn geweigerd of verwijderd.

Openbare netwerktoegang blokkeren tijdens het maken van het account

Zoals beschreven in de vorige sectie, en tenzij er specifieke firewallregels zijn ingesteld, maakt het toevoegen van een privé-eindpunt uw Azure Cosmos DB-account alleen toegankelijk via privé-eindpunten. Dit betekent dat het Azure Cosmos DB-account kan worden bereikt vanuit openbaar verkeer nadat het is gemaakt en voordat een privé-eindpunt wordt toegevoegd. Om ervoor te zorgen dat openbare netwerktoegang is uitgeschakeld, zelfs voordat privé-eindpunten worden gemaakt, kunt u de publicNetworkAccess vlag instellen op Uitgeschakeld tijdens het maken van het account. Deze vlag heeft voorrang op een IP- of virtuele netwerkregel. Al het openbare en virtuele netwerkverkeer wordt geblokkeerd wanneer de vlag is ingesteld op Uitgeschakeld, zelfs als het bron-IP- of virtueel netwerk is toegestaan in de firewallconfiguratie.

Zie deze Azure Resource Manager-sjabloon voor een voorbeeld van het gebruik van deze vlag.

Privé-eindpunten toevoegen aan een bestaand Azure Cosmos DB-account zonder uitvaltijd

Het toevoegen van een privé-eindpunt aan een bestaand account resulteert standaard in een korte downtime van ongeveer vijf minuten. Volg deze instructies om deze downtime te voorkomen:

  1. Voeg IP- of virtuele netwerkregels toe aan uw firewallconfiguratie om uw clientverbindingen expliciet toe te staan.
  2. Wacht tien minuten om ervoor te zorgen dat de configuratie-update is toegepast.
  3. Configureer uw nieuwe privé-eindpunt.
  4. Verwijder de firewallregels die zijn ingesteld in stap 1.

Notitie

Als u toepassingen hebt uitgevoerd met behulp van de Azure Cosmos DB SDK's, zijn er mogelijk tijdelijke time-outs tijdens de configuratie-update. Zorg ervoor dat uw toepassing is ontworpen om bestand te zijn tegen tijdelijke verbindingsfouten en dat er logica voor opnieuw proberen is ingesteld voor het geval dit nodig is.

Poortbereik bij gebruik van de directe modus

Wanneer u Private Link gebruikt met een Azure Cosmos DB-account via een directe-modusverbinding, moet u ervoor zorgen dat het volledige bereik van TCP-poorten (0 - 65535) is geopend.

Een privé-eindpunt bijwerken wanneer u een regio toevoegt of verwijdert

Er zijn drie regio's voor Azure Cosmos DB-accountimplementaties: VS - west, VS - centraal en Europa - west. Wanneer u een privé-eindpunt voor uw account maakt, worden vier privé-IP-adressen gereserveerd in het subnet. Er is één IP-adres voor elk van de drie regio's en er is één IP voor het globale regioagnostische eindpunt. Later kunt u een nieuwe regio toevoegen aan het Azure Cosmos DB-account. De privé-DNS-zone wordt als volgt bijgewerkt:

  • Als privé-DNS-zonegroep wordt gebruikt:

    • Als u een privé-DNS-zonegroep gebruikt, wordt de privé-DNS-zone automatisch bijgewerkt wanneer het privé-eindpunt wordt bijgewerkt. In het vorige voorbeeld, na het toevoegen van een nieuwe regio, wordt de privé-DNS-zone automatisch bijgewerkt.
  • Als de privé-DNS-zonegroep niet wordt gebruikt:

    • Als u geen privé-DNS-zonegroep gebruikt, moet u dns-vermeldingen voor dat account toevoegen of verwijderen door regio's toe te voegen aan of te verwijderen uit een Azure Cosmos DB-account. Nadat regio's zijn toegevoegd of verwijderd, kunt u de privé-DNS-zone van het subnet bijwerken om de toegevoegde of verwijderde DNS-vermeldingen en de bijbehorende privé-IP-adressen weer te geven.

    • In het vorige voorbeeld moet u, nadat u de nieuwe regio hebt toegevoegd, een bijbehorende DNS-record toevoegen aan uw privé-DNS-zone of uw aangepaste DNS. U kunt dezelfde stappen gebruiken wanneer u een regio verwijdert. Nadat u de regio hebt verwijderd, moet u de bijbehorende DNS-record verwijderen uit uw privé-DNS-zone of uw aangepaste DNS.

Huidige beperkingen

De volgende beperkingen gelden wanneer u Private Link gebruikt met een Azure Cosmos DB-account:

  • U kunt niet meer dan 200 privé-eindpunten hebben op één Azure Cosmos DB-account.

  • Wanneer u Private Link gebruikt met een Azure Cosmos DB-account via een directe modusverbinding, kunt u alleen het TCP-protocol gebruiken. Het HTTP-protocol wordt momenteel niet ondersteund.

  • Wanneer u de API van Azure Cosmos DB gebruikt voor een MongoDB-account, wordt een privé-eindpunt ondersteund voor accounts op serverversie 3.6 of hoger (dat wil gezegd accounts die het eindpunt gebruiken in de indeling *.mongo.cosmos.azure.com). Private Link wordt niet ondersteund voor accounts op serverversie 3.2 (accounts die het eindpunt gebruiken in de indeling *.documents.azure.com). Als u Private Link wilt gebruiken, moet u oude accounts migreren naar de nieuwe versie.

  • Wanneer u de API van Azure Cosmos DB gebruikt voor een MongoDB-account met een Private Link, moeten hulpprogramma's en bibliotheken SNI (Service Name Identification) ondersteunen of de appName parameter doorgeven vanuit de verbindingsreeks om verbinding te maken. Sommige oudere hulpprogramma's en bibliotheken zijn mogelijk niet compatibel met de functie Private Link.

  • Een netwerkbeheerder moet ten minste de Microsoft.DocumentDB/databaseAccounts/PrivateEndpointConnectionsApproval/action machtiging van het Azure Cosmos DB-accountbereik krijgen om automatisch goedgekeurde privé-eindpunten te maken.

  • Op dit moment kunt u een geweigerde privé-eindpuntverbinding niet goedkeuren. Maak in plaats daarvan het privé-eindpunt opnieuw om de privéverbinding te hervatten. De Azure Cosmos DB Private Link-service keurt automatisch het opnieuw gemaakte privé-eindpunt goed.

Beperkingen voor integratie van privé-DNS-zones

Tenzij u een privé-DNS-zonegroep gebruikt, worden DNS-records in de privé-DNS-zone niet automatisch verwijderd wanneer u een privé-eindpunt verwijdert of een regio verwijdert uit het Azure Cosmos DB-account. U moet de DNS-records handmatig verwijderen voordat:

  • Een nieuw privé-eindpunt toevoegen dat is gekoppeld aan deze privé-DNS-zone.
  • Een nieuwe regio toevoegen aan een databaseaccount met privé-eindpunten die zijn gekoppeld aan deze privé-DNS-zone.

Als u de DNS-records niet opschoont, kunnen er onverwachte problemen met het gegevensvlak optreden. Deze problemen omvatten gegevensstoring naar regio's die zijn toegevoegd na het verwijderen van privé-eindpunten of het verwijderen van regio's.