Konfigurace Azure Private Linku pro účet Azure Cosmos DB

PLATÍ PRO: NoSQL MongoDB Cassandra Gremlin Tabulka

Pomocí 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 ve vaší virtuální síti. Pak můžete omezit přístup k účtu služby Azure Cosmos DB přes privátní IP adresy. V kombinaci Private Link s omezujícími zásadami NSG pomáhá 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 pomocí veřejného DNS. Filtrování příchozích požadavků probíhá na úrovni aplikace, nikoli na úrovni přenosu nebo sítě.

Private Link umožňuje uživatelům přistupovat 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.

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

Tento článek popisuje, jak nastavit privátní koncové body pro transakční úložiště služby Azure Cosmos DB. Předpokládá, ž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í Azure Portal

Pomocí těchto kroků vytvořte privátní koncový bod pro existující účet služby Azure Cosmos DB pomocí Azure Portal:

  1. Přihlaste se k 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ěry pro vytvoření privátního koncového bodu v Azure Portal

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

    Nastavení Hodnota
    Podrobnosti o projektu
    Předplatné Vyberte své předplatné.
    Skupina prostředků Vyberte skupinu prostředků.
    Podrobnosti o instancích
    Name Zadejte libovolný název privátního koncového bodu. Pokud je tento název převzatý, vytvořte jedinečný název.
    Oblast Vyberte oblast, do které chcete nasadit Private Link. Vytvořte privátní koncový bod ve stejném umístění, kde existuje vaše virtuální síť.
  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í Vyberte Připojit k prostředku Azure v mém adresáři.

    Pak můžete zvolit jeden ze svých prostředků, který chcete nastavit Private Link. Nebo se můžete připojit k prostředku někoho jiného pomocí ID prostředku nebo aliasu, 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ý dílčí zdroj Vyberte typ rozhraní API služby Azure Cosmos DB, který chcete mapovat. Ve výchozím nastavení je pro rozhraní API pro SQL, MongoDB a Cassandra nastavena pouze jedna volba. 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 zřízenou vyhrazenou bránu pro účet ROZHRANÍ API pro NoSQL, zobrazí se také možnost SqlDedicated.
  6. Vyberte Další: Virtual Network.

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

    Nastavení Hodnota
    Virtuální síť Vyberte svoji virtuální síť.
    Podsíť Vyberte svoji 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.

    K privátnímu připojení k 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ích zón 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, zóna privátního DNS se automaticky aktualizuje.
    Název konfigurace Vyberte předplatné a skupinu prostředků.

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

  11. Jakmile se zobrazí zpráva Ověření proběhlo úspěšně, vyberte Vytvořit.

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

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

Podrobnější vysvětlení o privátních zónách a konfiguracích DNS pro privátní koncový bod najdete v tématu Konfigurace DNS privátního koncového bodu Azure . Následující tabulka ukazuje mapování mezi různými typy rozhraní API účtu služby Azure Cosmos DB, podporovanými dílčími zdroji a odpovídajícími názvy privátních zón. K účtům Gremlin a API for Table 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 dílčích zdrojů 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
Tabulka Tabulka privatelink.table.cosmos.azure.com
Tabulka Sql privatelink.documents.azure.com

Načtení privátních IP adres

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

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

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

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

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

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

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 se zónou privátního DNS

Po vytvoření privátního koncového bodu ho můžete integrovat se zónou privátního 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 pomocí následujícího skriptu PowerShellu zadat dotaz na IP adresy a mapování plně kvalifikovaného názvu domény:

$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 se zónou privátního DNS

Po vytvoření privátního koncového bodu ho můžete integrovat se zónou privátního 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 Manager

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

Pomocí následujícího kódu vytvořte šablonu Resource Manager 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 v existují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 pro šablonu soubor parametrů 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 jenom jednu hodnotu. Tato hodnota je typem rozhraní API účtu. Povolené hodnoty jsou: Sql, SqlDedicated, , CassandraMongoDB, Gremlin, a Table. Některé typy účtů služby Azure Cosmos DB jsou přístupné prostřednictvím několika rozhraní API. Příklad:

  • Účty rozhraní API pro NoSQL mají 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 pro NoSQL.
  • K rozhraní API pro účty Table je možné přistupovat z účtů Table i API pro 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 jenom v Sql případě, že se chcete ke svému účtu připojit také pomocí standardní brány. Odpovídající typ rozhraní API je zadaný 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 Manager

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 se zónou privátního DNS

Pomocí následujícího kódu vytvořte šablonu Resource Manager 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 soubory parametrů. 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 Manager s názvem PrivateZoneGroup_template.json. Tato šablona vytvoří skupinu privátních 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 soubory parametrů. 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

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

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

Důležité

Je to 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 procházejí standardní veřejnou trasou. Ujistěte se, že váš místní DNS správně odkazuje na privátní IP adresu namapovanou vaším privátním koncovým bodem.

Při použití 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 má ve výchozím nastavení 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ích přenosů 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 vytvoříte privátní koncové body, bude účet Azure Cosmos DB přístupný jenom prostřednictvím privátních koncových bodů. Pokud nenakonfigurujete veřejný provoz nebo koncový bod služby, po zamítnutí nebo odstranění všech schválených privátních koncových bodů bude účet otevřený 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 nejsou nastavená konkrétní pravidla brány firewall, přidání privátního koncového bodu zajistí, že váš účet služby Azure Cosmos DB bude přístupný 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é k účtu Azure Cosmos DB získat přístup z veřejného provozu. Abyste měli jistotu, že je veřejný síťový přístup zakázaný i před vytvořením privátních koncových bodů, můžete při vytváření účtu nastavit publicNetworkAccess příznak na Zakázáno . Všimněte si, že tento příznak má přednost před jakýmkoli pravidlem PROTOKOLU IP nebo virtuální sítě. Veškerý provoz veřejné a virtuální sítě se zablokuje, když je příznak nastavený na Zakázáno, a to i v případě, že 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 Manager.

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

Ve výchozím nastavení má přidání privátního koncového bodu do existujícího účtu za následek krátký výpadek přibližně pět minut. Pokud chcete tomuto výpadku zabránit, postupujte podle těchto pokynů:

  1. Přidejte do konfigurace brány firewall pravidla protokolu IP nebo virtuální sítě, která explicitně povolí připojení klientů.
  2. Počkejte 10 minut, abyste se ujistili, že je použitá 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 používající sady SDK služby Azure Cosmos DB, může během aktualizace konfigurace dojít k přechodnému vypršení časových limitů. 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 v případě potřeby měla logiku opakování.

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

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

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

Existují tři oblasti pro nasazení účtu služby Azure Cosmos DB: USA – západ, USA – střed a Západní Evropa. Když pro svůj účet vytvoříte privátní koncový bod, jsou v podsíti rezervované č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. Zóna privátního DNS se aktualizuje následujícím způsobem:

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

    Pokud používáte skupinu privátních zón DNS, zóna privátního 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 skupinu zón privátního DNS, musíte přidat nebo odebrat oblasti do účtu služby Azure Cosmos DB, abyste pro tento účet přidali nebo odebrali položky DNS. Po přidání nebo odebrání oblastí můžete aktualizovat zónu privátního 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 musíte po přidání nové oblasti přidat odpovídající záznam DNS do privátní zóny DNS nebo do vlastního DNS. Stejný postup můžete použít i při odebrání oblasti. Po odebrání oblasti musíte odebrat odpovídající záznam DNS ze zóny privátního DNS nebo z vlastního DNS.

Aktuální omezení

Pokud používáte 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řipojení v přímém režimu, můžete použít pouze protokol TCP. Protokol HTTP se v současné době nepodporuje.

  • Pokud používáte rozhraní API služby Azure Cosmos DB pro účet MongoDB, podporuje se privátní koncový bod pro účty na serveru verze 3.6 nebo vyšší (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 (tj. účty používající koncový bod ve formátu *.documents.azure.com). Pokud chcete používat Private Link, měli byste migrovat staré účty na novou verzi.

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

  • Správci sítě by mělo být uděleno alespoň Microsoft.DocumentDB/databaseAccounts/PrivateEndpointConnectionsApproval/action oprávnění v oboru účtu služby Azure Cosmos DB, aby mohl vytvářet 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 skupinu privátních 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 automaticky neodeberou. Abyste mohli provést následující kroky, musíte záznamy DNS odebrat ručně:

  • Přidání nového privátního koncového bodu propojeného s touto zónou privátního DNS
  • Přidání nové oblasti do libovolného databázového účtu, který má privátní koncové body propojené s touto zónou privátního 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: