Sdílet prostřednictvím


Konfigurace Azure Private Linku pro účet Azure Cosmos DB

PLATÍ PRO: NoSQL MongoDB Cassandra Skřítek Stůl

Pomocí služby Azure Private Link se můžete připojit k účtu služby Azure Cosmos DB prostřednictvím privátního koncového bodu. Privátní koncový bod je sada privátních IP adres v podsíti v rámci vaší virtuální sítě. Pak můžete omezit přístup k účtu služby Azure Cosmos DB přes privátní IP adresy. Když se Služba Private Link zkombinuje s omezujícími zásadami NSG, pomůže snížit riziko exfiltrace dat. Další informace o privátních koncových bodech najdete v tématu Co je Azure Private Link?

Poznámka:

Private Link nezabrání překladu koncových bodů služby Azure Cosmos DB veřejným DNS. Filtrovánípříchozích

Private Link umožňuje uživatelům přístup k účtu služby Azure Cosmos DB z virtuální sítě nebo z jakékoli partnerské virtuální sítě. Prostředky mapované na Private Link jsou také přístupné místně přes privátní partnerský vztah prostřednictvím sítě VPN nebo Azure ExpressRoute.

Pomocí metody automatického nebo ručního schvalování se můžete připojit k účtu služby Azure Cosmos DB nakonfigurovaného pomocí služby Private Link. Další informace najdete v části pracovního postupu schválení v dokumentaci ke službě Private Link.

Tento článek popisuje, jak nastavit privátní koncové body pro transakční úložiště Azure Cosmos DB. Předpokládá se, že používáte metodu automatického schvalování. Pokud používáte analytické úložiště, přečtěte si téma Konfigurace privátních koncových bodů pro analytické úložiště.

Vytvoření privátního koncového bodu pomocí webu Azure Portal

Pomocí následujícího postupu vytvořte privátní koncový bod pro existující účet služby Azure Cosmos DB pomocí webu Azure Portal:

  1. Přihlaste se k webu Azure Portal a vyberte účet služby Azure Cosmos DB.

  2. V seznamu nastavení vyberte Sítě a pak na kartě Privátní přístup vyberte + Privátní koncový bod:

    Snímek obrazovky s výběrem pro vytvoření privátního koncového bodu na webu Azure Portal

  3. V podokně Vytvořit privátní koncový bod – Základy zadejte nebo vyberte následující podrobnosti:

    Nastavení Hodnota
    Podrobnosti projektu
    Předplatné Vyberte své předplatné.
    Skupina prostředků Vyberte skupinu prostředků.
    Podrobnosti o instanci
    Název Zadejte libovolný název vašeho privátního koncového bodu. Pokud se tento název převezme, vytvořte jedinečný název.
    Oblast Vyberte oblast, do které chcete službu Private Link nasadit. Vytvořte privátní koncový bod ve stejném umístění, kde virtuální síť existuje.
  4. Vyberte Další: Prostředek.

  5. V podokně Vytvořit privátní koncový bod – Prostředek zadejte nebo vyberte tyto informace:

    Nastavení Hodnota
    Způsob připojení V adresáři vyberte Připojit k prostředku Azure.

    Potom můžete zvolit jeden z vašich prostředků a nastavit Private Link. Nebo se můžete připojit k prostředku někoho jiného pomocí ID nebo aliasu prostředku, který s vámi sdílí.
    Předplatné Vyberte své předplatné.
    Typ prostředku Vyberte Microsoft.AzureCosmosDB/databaseAccounts.
    Prostředek Vyberte svůj účet služby Azure Cosmos DB.
    Cílový podsourc Vyberte typ rozhraní API služby Azure Cosmos DB, který chcete namapovat. Výchozí hodnota je pouze jedna volba pro rozhraní API pro SQL, MongoDB a Cassandra. Pro rozhraní API pro Gremlin a Table můžete také zvolit NoSQL , protože tato rozhraní API jsou interoperabilní s rozhraním API pro NoSQL. Pokud máte vyhrazenou bránu zřízenou pro účet ROZHRANÍ API pro NoSQL, zobrazí se také možnost SqlDedicated.
  6. Vyberte Další: Virtuální síť.

  7. V podokně Vytvořit privátní koncový bod – Virtuální síť zadejte nebo vyberte tyto informace:

    Nastavení Hodnota
    Virtuální síť Vyberte svou virtuální síť.
    Podsíť Vyberte podsíť.
  8. Vyberte Další: DNS.

  9. V podokně Vytvořit privátní koncový bod – DNS zadejte nebo vyberte tyto informace:

    Nastavení Hodnota
    Integrovat s privátní zónou DNS Vyberte Ano.

    Pokud se chcete privátně připojit ke svému privátnímu koncovému bodu, potřebujete záznam DNS. Doporučujeme integrovat privátní koncový bod s privátní zónou DNS. Můžete také použít vlastní servery DNS nebo vytvořit záznamy DNS pomocí souborů hostitelů na virtuálních počítačích.

    Když pro tuto možnost vyberete ano, vytvoří se také skupina privátní zóny DNS. Skupina zón DNS je propojení mezi privátní zónou DNS a privátním koncovým bodem. Tento odkaz vám pomůže automaticky aktualizovat privátní zónu DNS, když dojde k aktualizaci privátního koncového bodu. Když například přidáte nebo odeberete oblasti, privátní zóna DNS se automaticky aktualizuje.
    Název konfigurace Vyberte své předplatné a skupinu prostředků.

    Privátní zóna DNS se určí automaticky. Nemůžete ho změnit pomocí webu Azure Portal.
  10. Vyberte Další: Zkontrolovat a vytvořit značky>. Na stránce Zkontrolovat a vytvořit azure ověří vaši konfiguraci.

  11. Až se zobrazí zpráva o úspěšném ověření, vyberte Vytvořit.

Pokud máte schválenou službu Private Link pro účet služby Azure Cosmos DB, není na webu Azure Portal dostupná možnost Všechny sítě v podokně Brána firewall a virtuální sítě .

Typy rozhraní API a názvy privátních zón

Projděte si konfiguraci DNS privátního koncového bodu Azure a podrobnější vysvětlení privátních zón a konfigurací DNS pro privátní koncový bod. Následující tabulka ukazuje mapování mezi různými typy rozhraní API účtu služby Azure Cosmos DB, podporovanými podsourcy a odpovídajícími názvy privátních zón. K účtům Gremlin a API pro tabulky můžete přistupovat také prostřednictvím rozhraní API pro NoSQL, takže pro tato rozhraní API existují dvě položky. K dispozici je také další položka pro rozhraní API pro NoSQL pro účty používající vyhrazenou bránu.

Typ rozhraní API účtu služby Azure Cosmos DB Podporované ID podsourců nebo skupin Název privátní zóny
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

Načtení privátních IP adres

Po zřízení privátního koncového bodu můžete zadat dotaz na IP adresy. Zobrazení IP adres z webu Azure Portal:

  1. Vyhledejte privátní koncový bod, který jste vytvořili dříve. V tomto případě je to cdbPrivateEndpoint3.
  2. Výběrem karty Přehled zobrazíte nastavení a IP adresy DNS.

Snímek obrazovky s privátními IP adresami na webu Azure Portal

Pro každý privátní koncový bod se vytvoří více IP adres:

  • Jeden pro globální koncový bod nezávislý na oblastech účtu služby Azure Cosmos DB.
  • Jedna pro každou oblast, ve které je nasazený účet služby Azure Cosmos DB.

Vytvoření privátního koncového bodu pomocí Azure PowerShellu

Spuštěním následujícího skriptu PowerShellu vytvořte privátní koncový bod s názvem MyPrivateEndpoint pro existující účet služby Azure Cosmos DB. Nahraďte hodnoty proměnných podrobnostmi pro vaše prostředí.

$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

Integrace privátního koncového bodu s privátní zónou DNS

Po vytvoření privátního koncového bodu ho můžete integrovat s privátní zónou DNS pomocí následujícího skriptu PowerShellu:

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

Načtení privátních IP adres

Po zřízení privátního koncového bodu můžete zadat dotaz na IP adresy a mapování plně kvalifikovaného názvu domény pomocí následujícího skriptu PowerShellu:

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

Vytvoření privátního koncového bodu pomocí Azure CLI

Spuštěním následujícího skriptu Azure CLI vytvořte privátní koncový bod myPrivateEndpoint pro existující účet služby Azure Cosmos DB. Nahraďte hodnoty proměnných podrobnostmi pro vaše prostředí.

# 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

Integrace privátního koncového bodu s privátní zónou DNS

Po vytvoření privátního koncového bodu ho můžete integrovat s privátní zónou DNS pomocí následujícího skriptu Azure CLI:

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

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

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

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

Vytvoření privátního koncového bodu pomocí šablony Resource Manageru

Private Link můžete nastavit vytvořením privátního koncového bodu v podsíti virtuální sítě. Toho dosáhnete pomocí šablony Azure Resource Manageru.

Pomocí následujícího kódu vytvořte šablonu Resource Manageru s názvem PrivateEndpoint_template.json. Tato šablona vytvoří privátní koncový bod pro existující účet vAPI služby Azure Cosmos DB pro NoSQL ve stávající virtuální síti.

@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

Definování souboru parametrů pro šablonu

Vytvořte soubor parametrů pro šablonu a pojmenujte ho PrivateEndpoint_parameters.json. Do souboru parametrů přidejte následující kód:

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

Nasazení šablony pomocí skriptu PowerShellu

Pomocí následujícího kódu vytvořte skript PowerShellu. Před spuštěním skriptu nahraďte ID předplatného, název skupiny prostředků a další hodnoty proměnných podrobnostmi pro vaše prostředí.

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

Ve skriptu PowerShellu GroupId může proměnná obsahovat pouze jednu hodnotu. Tato hodnota je typem rozhraní API účtu. Povolené hodnoty jsou: Sql, SqlDedicated, MongoDB, Cassandra, Gremlin, a Table. Některé typy účtů služby Azure Cosmos DB jsou přístupné prostřednictvím několika rozhraní API. Příklad:

  • Rozhraní API pro účty NoSQL má přidanou možnost pro účty nakonfigurované tak, aby používaly vyhrazenou bránu.
  • K rozhraní API pro účty Gremlin je možné přistupovat z účtů Gremlin i API for NoSQL.
  • K rozhraní API pro účty Table lze přistupovat z účtů Table i API for NoSQL.

Pro tyto účty musíte vytvořit jeden privátní koncový bod pro každý typ rozhraní API. Pokud vytváříte privátní koncový bod pro SqlDedicated, stačí přidat druhý koncový bod, pro Sql který se chcete připojit také ke svému účtu pomocí standardní brány. Odpovídající typ rozhraní API je zadán v GroupId poli.

Po úspěšném nasazení šablony uvidíte výstup podobný následujícímu obrázku. Hodnota provisioningState je Succeeded , pokud jsou privátní koncové body správně nastavené.

Snímek obrazovky s výstupem nasazení pro šablonu Resource Manageru

Po nasazení šablony jsou privátní IP adresy rezervované v rámci podsítě. Pravidlo brány firewall účtu služby Azure Cosmos DB je nakonfigurované tak, aby přijímalo připojení pouze z privátního koncového bodu.

Integrace privátního koncového bodu s privátní zónou DNS

Pomocí následujícího kódu vytvořte šablonu Resource Manageru s názvem PrivateZone_template.json. Tato šablona vytvoří privátní zónu DNS pro existující účet rozhraní API služby Azure Cosmos DB pro NoSQL v existující virtuální síti.

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

Definování souboru parametrů pro šablonu

Vytvořte pro šablonu následující dva parametry. Vytvořte PrivateZone_parameters.json s následujícím kódem:

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

Pomocí následujícího kódu vytvořte šablonu Resource Manageru s názvem PrivateZoneGroup_template.json. Tato šablona vytvoří privátní skupinu zón DNS pro existující účet rozhraní API služby Azure Cosmos DB pro NoSQL v existující virtuální síti.

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

Definování souboru parametrů pro šablonu

Vytvořte pro šablonu následující dva parametry. Vytvořte PrivateZoneGroup_parameters.json. s následujícím kódem:

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

Nasazení šablony pomocí skriptu PowerShellu

Pomocí následujícího kódu vytvořte skript PowerShellu. Před spuštěním skriptu nahraďte ID předplatného, název skupiny prostředků a další hodnoty proměnných podrobnostmi pro vaše prostředí.

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

Konfigurace vlastního systému DNS

Měli byste použít privátní zónu DNS v podsíti, ve které jste vytvořili privátní koncový bod. Nakonfigurujte koncové body tak, aby každá privátní IP adresa byla namapována na položku DNS. Podívejte se na vlastnost fqdns v odpovědi zobrazené výše.

Když vytváříte privátní koncový bod, můžete ho integrovat s privátní zónou DNS v Azure. Pokud se rozhodnete místo toho použít vlastní zónu DNS, musíte ji nakonfigurovat tak, aby přidávala záznamy DNS pro všechny privátní IP adresy rezervované pro privátní koncový bod.

Důležité

Jedná se o překlad DNS vašich požadavků, který určuje, jestli tyto požadavky procházejí vašimi privátními koncovými body, nebo přecházejí na standardní veřejnou trasu. Ujistěte se, že místní DNS správně odkazuje na privátní IP adresu namapovanou vaším privátním koncovým bodem.

Při použití služby Private Link v kombinaci s pravidly brány firewall jsou možné následující situace a výsledky:

  • Pokud nenakonfigurujete žádná pravidla brány firewall, pak ve výchozím nastavení má veškerý provoz přístup k účtu služby Azure Cosmos DB.

  • Pokud nakonfigurujete veřejný provoz nebo koncový bod služby a vytvoříte privátní koncové body, budou různé typy příchozího provozu autorizované odpovídajícím typem pravidla brány firewall. Pokud je privátní koncový bod nakonfigurovaný v podsíti, kde je nakonfigurovaný také koncový bod služby:

    • provoz do databázového účtu mapovaného privátním koncovým bodem se směruje přes privátní koncový bod.
    • provoz do jiných databázových účtů z podsítě se směruje přes koncový bod služby.
  • Pokud nenakonfigurujete žádný veřejný provoz nebo koncový bod služby a vytváříte privátní koncové body, bude účet služby Azure Cosmos DB přístupný jenom prostřednictvím privátních koncových bodů. Pokud nekonfigurujete veřejný provoz nebo koncový bod služby, po odmítnutí nebo odstranění všech schválených privátních koncových bodů se účet otevře pro celou síť, pokud PublicNetworkAccess není nastavená na Zakázáno.

Blokování přístupu k veřejné síti při vytváření účtu

Jak je popsáno v předchozí části a pokud nebyla nastavena konkrétní pravidla brány firewall, přidání privátního koncového bodu zpřístupní váš účet služby Azure Cosmos DB jenom prostřednictvím privátních koncových bodů. To znamená, že po vytvoření a přidání privátního koncového bodu je možné dosáhnout účtu služby Azure Cosmos DB z veřejného provozu. Pokud chcete zajistit, aby byl přístup k veřejné síti zakázaný i před vytvořením privátních koncových bodů, můžete příznak nastavit publicNetworkAccess na Zakázáno během vytváření účtu. Všimněte si, že tento příznak má přednost před jakoukoli IP adresou nebo pravidlem virtuální sítě. Veškerý provoz veřejné a virtuální sítě se zablokuje, když je příznak zakázaný, i když je v konfiguraci brány firewall povolená zdrojová IP adresa nebo virtuální síť.

Příklad použití tohoto příznaku najdete v této šabloně Azure Resource Manageru.

Přidání privátních koncových bodů do existujícího účtu služby Azure Cosmos DB bez výpadků

Přidání privátního koncového bodu do existujícího účtu ve výchozím nastavení způsobí krátký výpadek přibližně pět minut. Pokud se chcete vyhnout výpadku, postupujte podle těchto pokynů:

  1. Přidejte do konfigurace brány firewall pravidla protokolu IP nebo virtuální sítě, která explicitně povolují připojení klientů.
  2. Počkejte 10 minut, abyste se ujistili, že se nainstalovala aktualizace konfigurace.
  3. Nakonfigurujte nový privátní koncový bod.
  4. Odeberte pravidla brány firewall nastavená v kroku 1.

Poznámka:

Pokud máte spuštěné aplikace využívající sady SDK služby Azure Cosmos DB, může během aktualizace konfigurace dojít k přechodným vypršením časového limitu. Ujistěte se, že je vaše aplikace navržená tak, aby byla odolná vůči přechodným selháním připojení a aby měla logiku opakování v případě potřeby.

Rozsah portů při použití přímého režimu

Pokud používáte službu Private Link s účtem Azure Cosmos DB prostřednictvím přímého připojení v režimu, musíte zajistit, aby byl otevřený celý rozsah portů TCP (0 – 65535).

Aktualizace privátního koncového bodu při přidání nebo odebrání oblasti

Pro nasazení účtů služby Azure Cosmos DB existují tři oblasti: USA – západ, USA – střed a Západní Evropa. Když pro svůj účet vytvoříte privátní koncový bod, v podsíti jsou vyhrazeny čtyři privátní IP adresy. Pro každou ze tří oblastí je jedna IP adresa a pro globální koncový bod nezávislý na oblasti existuje jedna IP adresa. Později můžete do účtu služby Azure Cosmos DB přidat novou oblast. Privátní zóna DNS se aktualizuje následujícím způsobem:

  • Pokud se používá privátní skupina zón DNS:

    Pokud používáte skupinu privátních zón DNS, privátní zóna DNS se automaticky aktualizuje při aktualizaci privátního koncového bodu. V předchozím příkladu se po přidání nové oblasti zóna privátního DNS automaticky aktualizuje.

  • Pokud se skupina privátních zón DNS nepoužívá:

    Pokud nepoužíváte privátní skupinu zón DNS, přidání nebo odebrání oblastí do účtu služby Azure Cosmos DB vyžaduje, abyste pro tento účet přidali nebo odebrali položky DNS. Po přidání nebo odebrání oblastí můžete aktualizovat privátní zónu DNS podsítě tak, aby odrážela přidané nebo odebrané položky DNS a jejich odpovídající privátní IP adresy.

    V předchozím příkladu po přidání nové oblasti musíte přidat odpovídající záznam DNS do vaší privátní zóny DNS nebo vlastního DNS. Při odebrání oblasti můžete použít stejný postup. Po odebrání oblasti musíte odebrat odpovídající záznam DNS z privátní zóny DNS nebo vlastního DNS.

Aktuální omezení

Při použití služby Private Link s účtem služby Azure Cosmos DB platí následující omezení:

  • V jednom účtu služby Azure Cosmos DB nemůžete mít více než 200 privátních koncových bodů.

  • Pokud používáte Private Link s účtem Služby Azure Cosmos DB prostřednictvím přímého připojení v režimu, můžete použít pouze protokol TCP. Protokol HTTP se v současné době nepodporuje.

  • Při použití rozhraní API služby Azure Cosmos DB pro účet MongoDB se pro účty na serveru verze 3.6 nebo vyšší podporuje privátní koncový bod (tj. účty používající koncový bod ve formátu *.mongo.cosmos.azure.com). Private Link se nepodporuje pro účty na serveru verze 3.2 (to znamená účty používající koncový bod ve formátu *.documents.azure.com). Pokud chcete používat Službu Private Link, měli byste migrovat staré účty do nové verze.

  • Pokud používáte rozhraní API služby Azure Cosmos DB pro účet MongoDB s privátním propojením, nástroje a knihovny musí podporovat identifikaci názvu služby (SNI) nebo předat appName parametr z připojovací řetězec pro správné připojení. Některé starší nástroje a knihovny nemusí být kompatibilní s funkcí Private Link.

  • Správce sítě by měl mít udělené alespoň Microsoft.DocumentDB/databaseAccounts/PrivateEndpointConnectionsApproval/action oprávnění v oboru účtu služby Azure Cosmos DB, aby se vytvořily automaticky schválené privátní koncové body.

  • V současné době nemůžete schválit odmítnuté připojení privátního koncového bodu. Místo toho znovu vytvořte privátní koncový bod, abyste obnovili privátní připojení. Služba Private Link služby Azure Cosmos DB automaticky schválí znovu vytvořený privátní koncový bod.

Omezení integrace privátní zóny DNS

Pokud nepoužíváte privátní skupinu zón DNS, záznamy DNS v privátní zóně DNS se při odstranění privátního koncového bodu nebo odebrání oblasti z účtu služby Azure Cosmos DB neodeberou automaticky. Před ručním odebráním záznamů DNS:

  • Přidání nového privátního koncového bodu propojeného s touto privátní zónou DNS
  • Přidání nové oblasti do libovolného databázového účtu, který má privátní koncové body propojené s touto privátní zónou DNS.

Pokud záznamy DNS nevyčistíte, může dojít k neočekávaným problémům s rovinou dat. Mezi tyto problémy patří výpadek dat do oblastí přidaných po odebrání privátního koncového bodu nebo odebrání oblasti.

Další kroky

Další informace o funkcích zabezpečení služby Azure Cosmos DB najdete v následujících článcích:

  • Informace o konfiguraci brány firewall pro službu Azure Cosmos DB najdete v tématu Podpora brány firewall.

  • Informace o konfiguraci koncového bodu služby virtuální sítě pro účet služby Azure Cosmos DB najdete v tématu Konfigurace přístupu z virtuálních sítí.

  • Další informace o službě Private Link najdete v dokumentaci ke službě Azure Private Link .