Konfigurera Azure Private Link för ett Azure Cosmos DB-konto

GÄLLER FÖR: Nosql Mongodb Cassandra Gremlin Tabell

Med hjälp av Azure Private Link kan du ansluta till ett Azure Cosmos DB-konto via en privat slutpunkt. Den privata slutpunkten är en uppsättning privata IP-adresser i ett undernät i ditt virtuella nätverk. Du kan sedan begränsa åtkomsten till ett Azure Cosmos DB-konto över privata IP-adresser. När Private Link kombineras med restriktiva NSG-principer bidrar det till att minska risken för dataexfiltrering. Mer information om privata slutpunkter finns i Vad är Azure Private Link?

Anteckning

Private Link förhindrar inte att dina Azure Cosmos DB-slutpunkter matchas av offentlig DNS. Filtrering av inkommande begäranden sker på programnivå, inte på transport- eller nätverksnivå.

Private Link tillåter användare att komma åt ett Azure Cosmos DB-konto inifrån det virtuella nätverket eller från ett peer-kopplat virtuellt nätverk. Resurser som mappas till Private Link är också tillgängliga lokalt via privat peering via VPN eller Azure ExpressRoute.

Du kan ansluta till ett Azure Cosmos DB-konto som konfigurerats med Private Link med hjälp av metoden för automatiskt eller manuellt godkännande. Mer information finns i avsnittet arbetsflöde för godkännande i Private Link dokumentationen.

I den här artikeln beskrivs hur du konfigurerar privata slutpunkter för Azure Cosmos DB-transaktionslager. Det förutsätter att du använder metoden för automatiskt godkännande. Om du använder analysarkivet kan du läsa Konfigurera privata slutpunkter för analysarkivet.

Skapa en privat slutpunkt med hjälp av Azure Portal

Följ dessa steg för att skapa en privat slutpunkt för ett befintligt Azure Cosmos DB-konto med hjälp av Azure Portal:

  1. Logga in på Azure Portal och välj sedan ett Azure Cosmos DB-konto.

  2. Välj Nätverk i listan med inställningar och välj sedan + Privat slutpunkt under fliken Privat åtkomst :

    Skärmbild av val för att skapa en privat slutpunkt i Azure Portal

  3. I fönstret Skapa en privat slutpunkt – Grunder anger eller väljer du följande information:

    Inställningen Värde
    Projektinformation
    Prenumeration Välj din prenumeration.
    Resursgrupp Välj en resursgrupp.
    Instansinformation
    Name Ange valfritt namn för din privata slutpunkt. Om det här namnet tas skapar du ett unikt namn.
    Region Välj den region där du vill distribuera Private Link. Skapa den privata slutpunkten på samma plats där det virtuella nätverket finns.
  4. Välj Nästa: Resurs.

  5. I fönstret Skapa en privat slutpunkt – resurs anger eller väljer du den här informationen:

    Inställning Värde
    Anslutningsmetod Välj Anslut till en Azure-resurs i min katalog.

    Du kan sedan välja en av dina resurser för att konfigurera Private Link. Eller så kan du ansluta till någon annans resurs med hjälp av ett resurs-ID eller alias som de har delat med dig.
    Prenumeration Välj din prenumeration.
    Resurstyp Välj Microsoft.AzureCosmosDB/databaseAccounts.
    Resurs Välj ditt Azure Cosmos DB-konto.
    Underresurs för mål Välj den Azure Cosmos DB API-typ som du vill mappa. Detta är som standard bara ett alternativ för API:erna för SQL, MongoDB och Cassandra. För API:erna för Gremlin och Table kan du också välja NoSQL eftersom dessa API:er kan samverka med API:et för NoSQL. Om du har en dedikerad gateway etablerad för ett API för NoSQL-konto visas även ett alternativ för SqlDedicated.
  6. Välj Nästa: Virtual Network.

  7. I fönstret Skapa en privat slutpunkt – Virtual Network anger eller väljer du följande information:

    Inställningen Värde
    Virtuellt nätverk Välj ditt virtuella nätverk.
    Undernät Välj ditt undernät.
  8. Välj Nästa: DNS.

  9. I fönstret Skapa en privat slutpunkt – DNS anger eller väljer du den här informationen:

    Inställning Värde
    Integrera med privat DNS-zon Välj Ja.

    Om du vill ansluta privat till din privata slutpunkt behöver du en DNS-post. Vi rekommenderar att du integrerar din privata slutpunkt med en privat DNS-zon. Du kan också använda dina egna DNS-servrar eller skapa DNS-poster med hjälp av värdfilerna på dina virtuella datorer.

    När du väljer Ja för det här alternativet skapas också en privat DNS-zongrupp. DNS-zongrupp är en länk mellan den privata DNS-zonen och den privata slutpunkten. Den här länken hjälper dig att uppdatera den privata DNS-zonen automatiskt när det finns en uppdatering av den privata slutpunkten. När du till exempel lägger till eller tar bort regioner uppdateras den privata DNS-zonen automatiskt.
    Konfigurationsnamn Välj din prenumeration och resursgrupp.

    Den privata DNS-zonen bestäms automatiskt. Du kan inte ändra det med hjälp av Azure Portal.
  10. Välj Nästa: Taggar>Granska + skapa. På sidan Granska + skapa verifierar Azure din konfiguration.

  11. När du ser ett meddelande som anger att valideringen har slutförts klickar du på Skapa.

När du har en godkänd Private Link för ett Azure Cosmos DB-konto är alternativet Alla nätverk i fönstret Brandvägg och virtuella nätverk inte tillgängligt i Azure Portal.

API-typer och privata zonnamn

En mer detaljerad förklaring av privata zoner och DNS-konfigurationer för privat slutpunkt finns i DNS-konfigurationen för privata slutpunkter i Azure. I följande tabell visas mappningen mellan olika API-typer för Azure Cosmos DB-konton, underresurser som stöds och motsvarande privata zonnamn. Du kan också komma åt Gremlin- och API för tabellkonton via API:et för NoSQL, så det finns två poster för dessa API:er. Det finns också en extra post för API:et för NoSQL för konton som använder den dedikerade gatewayen.

API-typ för Azure Cosmos DB-konto Underkällor eller grupp-ID:t som stöds Namn på privat zon
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
Tabell Tabell privatelink.table.cosmos.azure.com
Tabell SQL privatelink.documents.azure.com

Hämta de privata IP-adresserna

När den privata slutpunkten har etablerats kan du fråga IP-adresserna. Så här visar du IP-adresserna från Azure Portal:

  1. Sök efter den privata slutpunkt som du skapade tidigare. I det här fallet är det cdbPrivateEndpoint3.
  2. Välj fliken Översikt för att se DNS-inställningar och IP-adresser.

Skärmbild av privata IP-adresser i Azure Portal

Flera IP-adresser skapas per privat slutpunkt:

  • En för den globala regionagnostiska slutpunkten för Azure Cosmos DB-kontot.
  • En för varje region där Azure Cosmos DB-kontot distribueras.

Skapa en privat slutpunkt med hjälp av Azure PowerShell

Kör följande PowerShell-skript för att skapa en privat slutpunkt med namnet MyPrivateEndpoint för ett befintligt Azure Cosmos DB-konto. Ersätt variabelvärdena med informationen för din miljö.

$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

Integrera den privata slutpunkten med en privat DNS-zon

När du har skapat den privata slutpunkten kan du integrera den med en privat DNS-zon med hjälp av följande PowerShell-skript:

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

Hämta de privata IP-adresserna

När den privata slutpunkten har etablerats kan du fråga IP-adresserna och FQDN-mappningen med hjälp av följande PowerShell-skript:

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

Skapa en privat slutpunkt med hjälp av Azure CLI

Kör följande Azure CLI-skript för att skapa en privat slutpunkt med namnet myPrivateEndpoint för ett befintligt Azure Cosmos DB-konto. Ersätt variabelvärdena med informationen för din miljö.

# 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

Integrera den privata slutpunkten med en privat DNS-zon

När du har skapat den privata slutpunkten kan du integrera den med en privat DNS-zon med hjälp av följande Azure CLI-skript:

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

Skapa en privat slutpunkt med hjälp av en Resource Manager mall

Du kan konfigurera Private Link genom att skapa en privat slutpunkt i ett virtuellt nätverksundernät. Du uppnår detta med hjälp av en Azure Resource Manager-mall.

Använd följande kod för att skapa en Resource Manager mall med namnet PrivateEndpoint_template.json. Den här mallen skapar en privat slutpunkt för ett befintligt Azure Cosmos DB vAPI för NoSQL-konto i ett befintligt virtuellt nätverk.

@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

Definiera parameterfilen för mallen

Skapa en parameterfil för mallen och ge den namnet PrivateEndpoint_parameters.json. Lägg till följande kod i parameterfilen:

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

Distribuera mallen med hjälp av ett PowerShell-skript

Skapa ett PowerShell-skript med hjälp av följande kod. Innan du kör skriptet ersätter du prenumerations-ID, resursgruppsnamn och andra variabelvärden med information om din miljö.

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

I PowerShell-skriptet kan variabeln GroupId bara innehålla ett värde. Det värdet är API-typen för kontot. Tillåtna värden är: Sql, SqlDedicated, MongoDB, Cassandra, Gremlinoch Table. Vissa Azure Cosmos DB-kontotyper är tillgängliga via flera API:er. Exempel:

  • API:et för NoSQL-konton har ett extra alternativ för konton som har konfigurerats för att använda den dedikerade gatewayen.
  • API:et för Gremlin-konton kan nås från både Gremlin och API för NoSQL-konton.
  • API:et för tabellkonton kan nås från både Tabell och API för NoSQL-konton.

För dessa konton måste du skapa en privat slutpunkt för varje API-typ. Om du skapar en privat slutpunkt för SqlDedicatedbehöver du bara lägga till en andra slutpunkt för Sql om du också vill ansluta till ditt konto med hjälp av standardgatewayen. Motsvarande API-typ anges i matrisen GroupId .

När mallen har distribuerats kan du se utdata som liknar följande bild. Värdet provisioningState är Succeeded om de privata slutpunkterna är korrekt konfigurerade.

Skärmbild av distributionsutdata för mallen Resource Manager.

När mallen har distribuerats reserveras de privata IP-adresserna i undernätet. Brandväggsregeln för Azure Cosmos DB-kontot är konfigurerad för att endast acceptera anslutningar från den privata slutpunkten.

Integrera den privata slutpunkten med en privat DNS-zon

Använd följande kod för att skapa en Resource Manager mall med namnet PrivateZone_template.json. Den här mallen skapar en privat DNS-zon för ett befintligt Azure Cosmos DB API för NoSQL-konto i ett befintligt virtuellt nätverk.

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

Definiera parameterfilen för mallen

Skapa följande två parameterfil för mallen. Skapa PrivateZone_parameters.json med följande kod:

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

Använd följande kod för att skapa en Resource Manager mall med namnet PrivateZoneGroup_template.json. Den här mallen skapar en privat DNS-zongrupp för ett befintligt Azure Cosmos DB API för NoSQL-konto i ett befintligt virtuellt nätverk.

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

Definiera parameterfilen för mallen

Skapa följande två parameterfil för mallen. Skapa PrivateZoneGroup_parameters.json. med följande kod:

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

Distribuera mallen med hjälp av ett PowerShell-skript

Skapa ett PowerShell-skript med hjälp av följande kod. Innan du kör skriptet ersätter du prenumerations-ID, resursgruppsnamn och andra variabelvärden med information om din miljö.

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

Konfigurera anpassad DNS

Du bör använda en privat DNS-zon i undernätet där du har skapat den privata slutpunkten. Konfigurera slutpunkterna så att varje privat IP-adress mappas till en DNS-post. Se egenskapen fqdns i svaret som visades tidigare.

När du skapar den privata slutpunkten kan du integrera den med en privat DNS-zon i Azure. Om du i stället väljer att använda en anpassad DNS-zon måste du konfigurera den för att lägga till DNS-poster för alla privata IP-adresser som är reserverade för den privata slutpunkten.

Viktigt

Det är DNS-matchningen för dina begäranden som avgör om dessa begäranden går över dina privata slutpunkter eller tar den offentliga standardvägen. Kontrollera att din lokala DNS korrekt refererar till den privata IP-adress som mappats av din privata slutpunkt.

Följande situationer och resultat är möjliga när du använder Private Link i kombination med brandväggsregler:

  • Om du inte konfigurerar några brandväggsregler kan all trafik som standard komma åt ett Azure Cosmos DB-konto.

  • Om du konfigurerar offentlig trafik eller en tjänstslutpunkt och skapar privata slutpunkter, auktoriseras olika typer av inkommande trafik av motsvarande typ av brandväggsregel. Om en privat slutpunkt har konfigurerats i ett undernät där tjänstslutpunkten också har konfigurerats:

    • trafik till databaskontot som mappas av den privata slutpunkten dirigeras via privat slutpunkt.
    • trafik till andra databaskonton från undernätet dirigeras via tjänstslutpunkten.
  • Om du inte konfigurerar någon offentlig trafik eller tjänstslutpunkt och du skapar privata slutpunkter är Azure Cosmos DB-kontot endast tillgängligt via de privata slutpunkterna. Om du inte konfigurerar offentlig trafik eller en tjänstslutpunkt, när alla godkända privata slutpunkter avvisas eller tas bort, är kontot öppet för hela nätverket om det inte PublicNetworkAccess är inställt på Inaktiverad.

Blockera åtkomst till offentligt nätverk när kontot skapas

Enligt beskrivningen i föregående avsnitt, och om inte specifika brandväggsregler har angetts, gör tillägg av en privat slutpunkt ditt Azure Cosmos DB-konto endast tillgängligt via privata slutpunkter. Det innebär att Azure Cosmos DB-kontot kan nås från offentlig trafik när det har skapats och innan en privat slutpunkt läggs till. Om du vill se till att åtkomsten till det offentliga nätverket är inaktiverad redan innan du skapar privata slutpunkter kan du ställa in publicNetworkAccess flaggan på Inaktiverad när kontot skapas. Observera att den här flaggan har företräde framför ip-adresser eller regler för virtuella nätverk. All offentlig och virtuell nätverkstrafik blockeras när flaggan är inställd på Inaktiverad, även om käll-IP-adressen eller det virtuella nätverket tillåts i brandväggskonfigurationen.

Ett exempel som visar hur du använder den här flaggan finns i den här Azure Resource Manager-mallen.

Lägga till privata slutpunkter till ett befintligt Azure Cosmos DB-konto utan avbrottstid

Som standard leder tillägg av en privat slutpunkt till ett befintligt konto till en kort stilleståndstid på cirka fem minuter. Följ de här anvisningarna för att undvika den här stilleståndstiden:

  1. Lägg till IP- eller virtuella nätverksregler i brandväggskonfigurationen för att uttryckligen tillåta klientanslutningar.
  2. Vänta i 10 minuter för att säkerställa att konfigurationsuppdateringen tillämpas.
  3. Konfigurera din nya privata slutpunkt.
  4. Ta bort brandväggsreglerna i steg 1.

Anteckning

Om du har program som körs med hjälp av Azure Cosmos DB SDK:er kan det uppstå tillfälliga timeout-fel under konfigurationsuppdateringen. Kontrollera att ditt program är utformat för att vara motståndskraftigt mot tillfälliga anslutningsfel och ha logik för omförsök på plats om det behövs.

Portintervall vid användning av direktläge

När du använder Private Link med ett Azure Cosmos DB-konto via en direktlägesanslutning måste du se till att alla TCP-portar (0–65535) är öppna.

Uppdatera en privat slutpunkt när du lägger till eller tar bort en region

Det finns tre regioner för Azure Cosmos DB-kontodistributioner: USA, västra, USA, centrala och Europa, västra. När du skapar en privat slutpunkt för ditt konto reserveras fyra privata IP-adresser i undernätet. Det finns en IP-adress för var och en av de tre regionerna och det finns en IP-adress för den globala regionoberoende slutpunkten. Senare kan du lägga till en ny region i Azure Cosmos DB-kontot. Den privata DNS-zonen uppdateras på följande sätt:

  • Om privat DNS-zongrupp används:

    Om du använder en privat DNS-zongrupp uppdateras den privata DNS-zonen automatiskt när den privata slutpunkten uppdateras. I föregående exempel uppdateras den privata DNS-zonen automatiskt när du har lagt till en ny region.

  • Om privat DNS-zongrupp inte används:

    Om du inte använder en privat DNS-zongrupp måste du lägga till eller ta bort DNS-poster för kontot genom att lägga till eller ta bort regioner i ett Azure Cosmos DB-konto. När regioner har lagts till eller tagits bort kan du uppdatera undernätets privata DNS-zon så att den återspeglar de tillagda eller borttagna DNS-posterna och deras motsvarande privata IP-adresser.

    I föregående exempel, när du har lagt till den nya regionen, måste du lägga till en motsvarande DNS-post i antingen din privata DNS-zon eller din anpassade DNS. Du kan använda samma steg när du tar bort en region. När du har tagit bort regionen måste du ta bort motsvarande DNS-post från antingen din privata DNS-zon eller din anpassade DNS.

Aktuella begränsningar

Följande begränsningar gäller när du använder Private Link med ett Azure Cosmos DB-konto:

  • Du kan inte ha fler än 200 privata slutpunkter på ett enda Azure Cosmos DB-konto.

  • När du använder Private Link med ett Azure Cosmos DB-konto via en direktlägesanslutning kan du bara använda TCP-protokollet. HTTP-protokollet stöds inte för närvarande.

  • När du använder Azure Cosmos DB:s API för ett MongoDB-konto stöds en privat slutpunkt för konton på serverversion 3.6 eller senare (dvs. konton som använder slutpunkten i formatet *.mongo.cosmos.azure.com). Private Link stöds inte för konton i serverversion 3.2 (dvs. konton som använder slutpunkten i formatet *.documents.azure.com). Om du vill använda Private Link bör du migrera gamla konton till den nya versionen.

  • När du använder Azure Cosmos DB:s API för ett MongoDB-konto som har en Private Link måste verktyg och bibliotek ha stöd för tjänstnamnsidentifiering (SNI) eller skicka parametern appName från anslutningssträngen för att ansluta korrekt. Vissa äldre verktyg och bibliotek kanske inte är kompatibla med funktionen Private Link.

  • En nätverksadministratör bör beviljas minst behörighet i Microsoft.DocumentDB/databaseAccounts/PrivateEndpointConnectionsApproval/action Azure Cosmos DB-kontoomfånget för att skapa automatiskt godkända privata slutpunkter.

  • För närvarande kan du inte godkänna en avvisad privat slutpunktsanslutning. Återskapa i stället den privata slutpunkten för att återuppta den privata anslutningen. Tjänsten Privat länk i Azure Cosmos DB godkänner automatiskt den återskapade privata slutpunkten.

Begränsningar för integrering av privata DNS-zoner

Om du inte använder en privat DNS-zongrupp tas INTE DNS-poster i den privata DNS-zonen bort automatiskt när du tar bort en privat slutpunkt eller om du tar bort en region från Azure Cosmos DB-kontot. Du måste ta bort DNS-posterna manuellt innan:

  • Lägga till en ny privat slutpunkt som är länkad till den här privata DNS-zonen.
  • Lägga till en ny region till alla databaskonton som har privata slutpunkter som är länkade till den här privata DNS-zonen.

Om du inte rensar DNS-posterna kan oväntade problem med dataplanet inträffa. Dessa problem omfattar dataavbrott i regioner som lagts till efter borttagning av privat slutpunkt eller borttagning av region.

Nästa steg

Mer information om säkerhetsfunktioner i Azure Cosmos DB finns i följande artiklar: