VNet(가상 네트워크)에서 Azure Cosmos DB에 대한 액세스 구성

적용 대상: Nosql Mongodb 카산드라 그렘린 (미국) 테이블

VNET(가상 네트워크)의 특정 서브넷에서만 액세스할 수 있도록 Azure Cosmos DB 계정을 구성할 수 있습니다. 가상 네트워크 내의 서브넷에서 서비스 엔드포인트를 사용하도록 설정하여 Azure Cosmos DB에 대한 액세스를 제어합니다. 해당 서브넷의 트래픽은 서브넷 및 Virtual Network의 ID를 사용하여 Azure Cosmos DB에 보냅니다. Azure Cosmos DB 서비스 엔드포인트를 사용하도록 설정하고 나면, Azure Cosmos DB 계정에 추가하여 서브넷에 대한 액세스를 제한할 수 있습니다.

기본적으로 요청에 유효한 권한 부여 토큰이 포함되어 있으면 어떠한 원본에서든 Azure Cosmos DB 계정에 액세스할 수 있습니다. VNet 내에서 하나 이상의 서브넷을 추가하면 해당 서브넷에서 시작된 요청만 유효한 응답을 받습니다. 다른 원본에서 시작된 요청은 403(사용할 수 없음) 응답을 받습니다.

Azure 가상 네트워크의 특정 서브넷에서만 액세스할 수 있도록 Azure Cosmos DB 계정을 구성할 수 있습니다. 가상 네트워크의 서브넷에서 연결을 사용하여 Azure Cosmos DB 계정에 대한 액세스를 제한하려면 다음을 수행합니다.

  1. Azure Cosmos DB에 대한 서비스 엔드포인트를 사용하도록 설정하여 서브넷 및 가상 네트워크 ID를 Azure Cosmos DB에 보냅니다.

  2. Azure Cosmos DB 계정에 규칙을 추가하여 서브넷을 계정에 액세스할 수 있는 원본으로 지정합니다.

참고 항목

서브넷에서 Azure Cosmos DB 계정에 대한 서비스 엔드포인트를 사용하도록 설정하면 Azure Cosmos DB에 도달하는 트래픽의 원본이 공용 IP에서 가상 네트워크 및 서브넷으로 전환됩니다. 트래픽 전환은 이 서브넷에서 액세스하는 모든 Azure Cosmos DB 계정에 적용됩니다. Azure Cosmos DB 계정에 이 서브넷을 허용하는 IP 기반 방화벽이 있는 경우 서비스 사용 서브넷의 요청이 더 이상 IP 방화벽 규칙과 일치하지 않으며 거부됩니다.

자세히 알아보려면 이 문서의 IP 방화벽 규칙에서 가상 네트워크 액세스 제어 목록으로 마이그레이션 섹션에 설명된 단계를 참조하세요.

다음 섹션에서는 Azure Cosmos DB 계정에 대한 가상 네트워크 서비스 엔드포인트를 구성하는 방법을 설명합니다.

Azure Portal을 사용하여 서비스 엔드포인트 구성

Azure Virtual Network 및 서브넷에 대한 서비스 엔드포인트 구성

  1. 모든 리소스 창에서 보호하려는 Azure Cosmos DB 계정을 찾습니다.

  2. 설정 메뉴에서 네트워킹을 선택합니다.

    Screenshot of the networking menu option.

  3. 선택한 네트워크에서 액세스를 허용하도록 선택합니다.

  4. 기존 가상 네트워크의 서브넷에 대한 액세스 권한을 부여하려면 가상 네트워크에서 기존 Azure 가상 네트워크 추가를 선택합니다.

  5. Azure 가상 네트워크를 추가할 구독을 선택합니다. Azure Cosmos DB 계정에 대한 액세스를 제공하려는 Azure 가상 네트워크서브넷을 선택합니다. 다음으로, "Microsoft.AzureCosmosDB"에 대한 서비스 엔드포인트에서 선택한 네트워크를 사용하도록 설정하려면 [사용]을 선택합니다. 완료되면 추가를 선택합니다.

    Screenshot of the dialog to select an existing Azure Virtual Network and subnet with an Azure Cosmos DB service endpoint.

    참고 항목

    VNET 서비스 엔드포인트 구성이 전파되는 데 최대 15분이 걸릴 수 있으며 이 기간 동안에는 엔드포인트가 일관되지 않은 동작을 발생시킬 수 있습니다.

  6. Azure Cosmos DB 계정을 가상 네트워크에서 액세스할 수 있도록 활성화한 후에 선택한 이 서브넷의 트래픽만 허용합니다. 추가한 가상 네트워크 및 서브넷은 다음 스크린샷과 같이 표시됩니다.

    Screenshot of an Azure Virtual Network and subnet configured successfully in the list.

참고 항목

가상 네트워크 서비스 엔드포인트를 사용하도록 설정하려면 다음 구독 권한이 필요합니다.

  • 가상 네트워크를 사용하여 구독: 네트워크 기여자
  • Azure Cosmos DB 계정을 포함한 구독: DocumentDB 계정 기여자
  • 가상 네트워크와 Azure Cosmos DB 계정이 서로 다른 구독에 있는 경우 가상 네트워크가 있는 구독에도 Microsoft.DocumentDB 리소스 공급자가 등록되어 있는지 확인합니다. 리소스 공급자를 등록하려면 Azure 리소스 공급자 및 유형 문서를 참조하세요.

리소스 공급자에 구독을 등록하는 방법은 다음과 같습니다.

새 Azure 가상 네트워크 및 서브넷에 대한 서비스 엔드포인트 구성

  1. 모든 리소스 창에서 보호하려는 Azure Cosmos DB 계정을 찾습니다.

  2. 설정 메뉴에서 방화벽 및 가상 네트워크를 선택하고, 선택한 네트워크에서 액세스를 허용하도록 선택합니다.

  3. 새로운 Azure 가상 네트워크에 대한 액세스를 허용하려면 가상 네트워크에서 새로운 가상 네트워크 추가를 선택합니다.

  4. 새 가상 네트워크를 만드는 데 필요한 세부 정보를 제공한 다음, 만들기를 선택합니다. 서브넷은 "Microsoft.AzureCosmosDB"에 대한 서비스 엔드포인트를 사용하도록 설정하여 만들어집니다.

    Screenshot of the dialog to create a new Azure Virtual Network, configure a subnet, and then enable the Azure Cosmos DB service endpoint.

Azure Cosmos DB 계정이 Azure AI Search와 같은 다른 Azure 서비스에서 사용되거나 Stream Analytics 또는 Power BI에서 액세스되는 경우 전역 Azure 데이터 센터 내에서 연결 허용을 선택하여 액세스를 허용합니다.

포털에서 Azure Cosmos DB 메트릭에 액세스할 수 있도록 하려면 Azure Portal 옵션에서 액세스 허용을 사용하도록 설정해야 합니다. 이러한 옵션에 대한 자세한 내용은 IP 방화벽 구성 문서를 참조하세요. 액세스를 사용하도록 설정한 후 저장을 선택하여 설정을 저장합니다.

가상 네트워크 또는 서브넷 제거

  1. 모든 리소스 창에서 서비스 엔드포인트를 할당한 Azure Cosmos DB 계정을 찾습니다.

  2. 설정 메뉴에서 네트워킹을 선택합니다.

  3. 가상 네트워크 또는 서브넷 규칙을 제거하려면 가상 네트워크 또는 서브넷 옆에 있는 ...를 선택하고 제거를 선택합니다.

    Screenshot of the menu option to remove an associated Azure Virtual Network.

  4. 저장을 선택하여 변경 내용을 적용합니다.

Azure PowerShell을 사용하여 서비스 엔드포인트 구성

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

Azure PowerShell을 사용하여 Azure Cosmos DB 계정에 서비스 엔드포인트를 구성하려면 다음 단계를 사용합니다.

  1. Azure PowerShell을 설치하고 로그인합니다.

  2. 가상 네트워크의 기존 서브넷에 대해 서비스 엔드포인트를 사용하도록 설정합니다.

    $resourceGroupName = "<Resource group name>"
    $vnetName = "<Virtual network name>"
    $subnetName = "<Subnet name>"
    $subnetPrefix = "<Subnet address range>"
    $serviceEndpoint = "Microsoft.AzureCosmosDB"
    
    Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName | Set-AzVirtualNetworkSubnetConfig `
       -Name $subnetName `
       -AddressPrefix $subnetPrefix `
       -ServiceEndpoint $serviceEndpoint | Set-AzVirtualNetwork
    

    참고 항목

    PowerShell 또는 Azure CLI를 사용하는 경우 추가해야 하는 항목뿐만 아니라 매개 변수에 IP 필터 및 가상 네트워크 ACL의 전체 목록을 지정해야 합니다.

  3. 가상 네트워크 정보를 가져옵니다.

    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  4. Azure Cosmos DB Virtual Network 규칙 준비

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  5. 새 Virtual Network 엔드포인트 구성으로 Azure Cosmos DB 계정 속성을 업데이트합니다.

    $accountName = "<Azure Cosmos DB account name>"
    
    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  6. 다음 명령을 실행하여 Azure Cosmos DB 계정이 이전 단계에서 구성한 가상 네트워크 서비스 엔드포인트로 업데이트되었는지 확인합니다.

    $account = Get-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName
    
    $account.IsVirtualNetworkFilterEnabled
    $account.VirtualNetworkRules
    

Azure CLI를 사용하여 서비스 엔드포인트 구성

서브넷이 이미 구성된 경우 나중에 서비스 엔드포인트를 만들거나 업데이트할 때 이러한 서비스 엔드포인트에 대한 Azure Cosmos DB 계정을 구성할 수 있습니다. 서브넷이 아직 구성되지 않은 Azure Cosmos DB 계정에서 서비스 엔드포인트를 사용하도록 설정할 수도 있습니다. 그런 다음, 나중에 서브넷이 구성되면 서비스 엔드포인트가 작동하기 시작합니다. 이러한 유연성을 통해 Azure Cosmos DB 계정과 가상 네트워크 리소스 모두에 액세스할 수 없는 관리자가 서로 독립적인 구성을 만들 수 있습니다.

새 Azure Cosmos DB 계정을 만들고 새 가상 네트워크의 백 엔드 서브넷에 연결합니다.

다음 예제에서 가상 네트워크와 서브넷은 만들 때 둘 다에 사용하도록 설정된 서비스 엔드포인트를 사용하여 만들어집니다.

# Create an Azure Cosmos DB Account with a service endpoint connected to a backend subnet

# Resource group and Azure Cosmos DB account variables
resourceGroupName='MyResourceGroup'
location='West US 2'
accountName='mycosmosaccount'

# Variables for a new Virtual Network with two subnets
vnetName='myVnet'
frontEnd='FrontEnd'
backEnd='BackEnd'

# Create a resource group
az group create -n $resourceGroupName -l $location

# Create a virtual network with a front-end subnet
az network vnet create \
   -n $vnetName \
   -g $resourceGroupName \
   --address-prefix 10.0.0.0/16 \
   --subnet-name $frontEnd \
   --subnet-prefix 10.0.1.0/24

# Create a back-end subnet with service endpoints enabled for Azure Cosmos DB
az network vnet subnet create \
   -n $backEnd \
   -g $resourceGroupName \
   --address-prefix 10.0.2.0/24 \
   --vnet-name $vnetName \
   --service-endpoints Microsoft.AzureCosmosDB

svcEndpoint=$(az network vnet subnet show -g $resourceGroupName -n $backEnd --vnet-name $vnetName --query 'id' -o tsv)

# Create an Azure Cosmos DB account with default values and service endpoints
az cosmosdb create \
   -n $accountName \
   -g $resourceGroupName \
   --enable-virtual-network true \
   --virtual-network-rules $svcEndpoint

Azure Cosmos DB 계정을 백 엔드 서브넷에 독립적으로 연결 및 구성

이 샘플은 Azure Cosmos DB 계정을 기존 또는 새 가상 네트워크에 연결하는 방법을 보여 주기 위한 것입니다. 다음 예제에서 서브넷은 아직 서비스 엔드포인트에 대해 구성되지 않았습니다. --ignore-missing-vnet-service-endpoint 매개 변수를 사용하여 서비스 엔드포인트를 구성합니다. 이 구성을 사용하면 가상 네트워크의 서브넷에 대한 구성이 완료되기 전에 Azure Cosmos DB 계정을 오류 없이 완료할 수 있습니다. 서브넷 구성이 완료되면 구성된 서브넷을 통해 Azure Cosmos DB 계정에 액세스할 수 있습니다.

# Create an Azure Cosmos DB Account with a service endpoint connected to a backend subnet
# that is not yet enabled for service endpoints.

# Resource group and Azure Cosmos DB account variables
resourceGroupName='MyResourceGroup'
location='West US 2'
accountName='mycosmosaccount'

# Variables for a new Virtual Network with two subnets
vnetName='myVnet'
frontEnd='FrontEnd'
backEnd='BackEnd'

# Create a resource group
az group create -n $resourceGroupName -l $location

# Create a virtual network with a front-end subnet
az network vnet create \
   -n $vnetName \
   -g $resourceGroupName \
   --address-prefix 10.0.0.0/16 \
   --subnet-name $frontEnd \
   --subnet-prefix 10.0.1.0/24

# Create a back-end subnet but without configuring service endpoints (--service-endpoints Microsoft.AzureCosmosDB)
az network vnet subnet create \
   -n $backEnd \
   -g $resourceGroupName \
   --address-prefix 10.0.2.0/24 \
   --vnet-name $vnetName

svcEndpoint=$(az network vnet subnet show -g $resourceGroupName -n $backEnd --vnet-name $vnetName --query 'id' -o tsv)

# Create an Azure Cosmos DB account with default values
az cosmosdb create -n $accountName -g $resourceGroupName

# Add the virtual network rule but ignore the missing service endpoint on the subnet
az cosmosdb network-rule add \
   -n $accountName \
   -g $resourceGroupName \
   --virtual-network $vnetName \
   --subnet svcEndpoint \
   --ignore-missing-vnet-service-endpoint true

read -p'Press any key to now configure the subnet for service endpoints'

az network vnet subnet update \
   -n $backEnd \
   -g $resourceGroupName \
   --vnet-name $vnetName \
   --service-endpoints Microsoft.AzureCosmosDB

직접 모드를 사용할 때의 포트 범위

직접 모드 연결을 통해 Azure Cosmos DB 계정으로 서비스 엔드포인트를 사용하는 경우 TCP 포트 범위가 10000에서 20000까지 열려 있는지 확인해야 합니다.

IP 방화벽 규칙에서 가상 네트워크 ACL로 마이그레이션

Azure Cosmos DB 계정을 IP 방화벽 규칙 사용에서 가상 네트워크 서비스 엔드포인트 사용으로 마이그레이션하려면 다음 단계를 사용합니다.

Azure Cosmos DB 계정이 서브넷의 서비스 엔드포인트에 대해 구성되면 해당 서브넷의 각 요청을 Azure Cosmos DB로 다르게 보냅니다. 요청을 원본 공용 IP 주소 대신 가상 네트워크 및 서브넷 원본 정보와 함께 보냅니다. 이러한 요청은 더 이상 Azure Cosmos DB 계정에 구성된 IP 필터와 일치하지 않기 때문에 가동 중지 시간을 방지하기 위해 다음 단계가 필요합니다.

  1. 가상 네트워크 및 서브넷 정보를 가져옵니다.

    $resourceGroupName = "myResourceGroup"
    $accountName = "mycosmosaccount"
    $vnetName = "myVnet"
    $subnetName = "mySubnet"
    
    $vnet = Get-AzVirtualNetwork `
       -ResourceGroupName $resourceGroupName `
       -Name $vnetName
    
    $subnetId = $vnet.Id + "/subnets/" + $subnetName
    
  2. Azure Cosmos DB 계정에 대한 새 Virtual Network 규칙 개체를 준비합니다.

    $vnetRule = New-AzCosmosDBVirtualNetworkRule `
       -Id $subnetId
    
  3. 서브넷에서 서비스 엔드포인트 액세스를 사용하도록 Azure Cosmos DB 계정을 업데이트합니다.

    Update-AzCosmosDBAccount `
       -ResourceGroupName $resourceGroupName `
       -Name $accountName `
       -EnableVirtualNetwork $true `
       -VirtualNetworkRuleObject @($vnetRule)
    
  4. 서브넷에서 액세스한 모든 Azure Cosmos DB 계정에 대해 이전 단계를 반복합니다.

  5. 이 문서의 가상 네트워크의 기존 서브넷에 대해 서비스 엔드포인트 사용 섹션에 표시된 단계에서 가상 네트워크 및 서브넷에서 Azure Cosmos DB 서비스 엔드포인트를 사용하도록 설정합니다.

  6. Azure Cosmos DB 계정의 방화벽 규칙에서 서브넷에 대한 IP 방화벽 규칙을 제거합니다.

자주 묻는 질문

가상 네트워크의 액세스 구성에 대해 몇 가지 자주 묻는 질문은 다음과 같습니다.

Notebooks 및 Mongo/Cassandra Shell이 현재 Virtual Network 사용 계정과 호환되는지 여부

현재 Azure Cosmos DB 데이터 탐색기의 Mongo 셸Cassandra 셸 통합과 Jupyter Notebooks 서비스는 VNET 액세스에서 지원되지 않습니다. 이 기능은 현재 적극적으로 개발 중입니다.

가상 네트워크 서비스 엔드포인트 및 IP 액세스 제어 정책 모두 Azure Cosmos DB 계정에서 지정할 수 있나요?

Azure Cosmos DB 계정에서 가상 네트워크 서비스 엔드포인트와 IP 액세스 제어 정책(방화벽이라고도 함)을 모두 사용하도록 설정할 수 있습니다. 이러한 두 기능은 상호 보완적이며 전체적으로 Azure Cosmos DB 계정의 격리 및 보안을 보장합니다. IP 방화벽을 사용하면 고정 IP가 계정에 액세스할 수 있습니다.

가상 네트워크 내에서 서브넷에 대한 액세스를 제한할 어떻게 할까요? 있나요?

서브넷의 Azure Cosmos DB 계정에 대한 액세스를 제한하려면 두 단계가 필요합니다. 먼저 서브넷의 트래픽이 서브넷 및 가상 네트워크 ID를 Azure Cosmos DB로 전송하도록 허용합니다. 트래픽의 ID 변경은 서브넷에서 Azure Cosmos DB에 대한 서비스 엔드포인트를 사용하도록 설정하여 수행됩니다. 다음은 이 서브넷을 계정에 액세스할 수 있는 소스로 지정하는 규칙을 Azure Cosmos DB 계정에 추가하는 것입니다.

가상 네트워크 ACL 및 IP 방화벽이 요청 또는 연결을 거부합니까?

IP 방화벽 또는 가상 네트워크 액세스 규칙이 추가되면 허용된 원본의 요청만 유효한 응답을 받습니다. 다른 요청은 거부되며 403(금지됨)이 수신됩니다. Azure Cosmos DB 계정의 방화벽을 연결 수준 방화벽과 구별하는 것이 중요합니다. 원본은 여전히 서비스에 연결할 수 있으며 연결 자체는 거부되지 않습니다.

서브넷에서 Azure Cosmos DB에 서비스 엔드포인트를 사용하도록 설정했을 때 내 요청이 차단되기 시작했습니다. 무슨 일이 일어났나요?

서브넷에서 Azure Cosmos DB에 대한 서비스 엔드포인트를 사용하도록 설정하면 계정에 도달하는 트래픽의 원본이 공용 IP에서 가상 네트워크 및 서브넷으로 전환됩니다. Azure Cosmos DB 계정에 IP 기반 방화벽이 있는 경우에만 서브넷을 사용하는 서비스의 요청이 더 이상 IP 방화벽 규칙과 일치하지 않아 거부됩니다. IP 기반 방화벽에서 가상 네트워크 기반 액세스 제어로 원활하게 마이그레이션하는 단계로 이동하세요.

VNET 서비스 엔드포인트를 사용하는 Azure Cosmos DB 계정에 추가적인 역할 기반 액세스 제어 권한이 필요한가요?

Azure Cosmos DB 계정에 VNet 서비스 엔드포인트를 추가한 후 계정 설정을 변경하려면 Azure Cosmos DB 계정에 구성된 모든 VNET의 Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action 작업에 액세스해야 합니다. 권한 부여 프로세스는 속성을 평가하기 전에 리소스(예: 데이터베이스 및 가상 네트워크 리소스)에 대한 액세스의 유효성을 검사하기 때문에 이 권한이 필요합니다.

권한 부여는 사용자가 Azure CLI를 사용하여 VNET ACL을 지정하지 않더라도 VNet 리소스 작업에 대한 권한의 유효성을 검사합니다. 현재 Azure Cosmos DB 계정의 컨트롤 플레인은 Azure Cosmos DB 계정의 전체 상태 설정을 지원합니다. 컨트롤 플레인 호출에 대한 매개 변수 중 하나는 .입니다 virtualNetworkRules. 이 매개 변수가 지정되지 않으면 Azure CLI에서 데이터베이스 가져오기를 호출하여 virtualNetworkRules를 검색하고 업데이트 호출에서 이 값을 사용합니다.

피어링된 가상 네트워크도 Azure Cosmos DB 계정에 액세스할 수 있나요?

Azure Cosmos DB 계정에 추가된 가상 네트워크 및 해당 서브넷만 액세스할 수 있습니다. 피어링된 가상 네트워크 내의 서브넷이 계정에 추가될 때까지 피어링된 VNet은 계정에 액세스할 수 없습니다.

단일 Azure Cosmos DB 계정에 액세스할 수 있는 최대 서브넷 수는 얼마인가요?

현재 Azure Cosmos DB 계정에 허용되는 최대 서브넷 수는 256개입니다.

VPN 및 Express Route에서 액세스를 사용하도록 설정할 수 있나요?

온-프레미스에서 ExpressRoute를 통해 Azure Cosmos DB 계정에 액세스하려면 Microsoft 피어링을 사용하도록 설정해야 합니다. IP 방화벽 또는 가상 네트워크 액세스 규칙을 입력한 후에는 Azure Cosmos DB 계정 IP 방화벽에서 Microsoft 피어링에 사용되는 공용 IP 주소를 추가하여 Azure Cosmos 계정에 대한 온-프레미스 서비스 액세스를 허용할 수 있습니다.

NSG(네트워크 보안 그룹) 규칙을 업데이트해야 하나요?

NSG 규칙은 가상 네트워크를 사용하는 서브넷과의 연결을 제한하는 데 사용됩니다. Azure Cosmos DB에 대한 서비스 엔드포인트를 서브넷에 추가하는 경우 Azure Cosmos DB 계정에 대해 NSG에서 아웃바운드 연결을 열 필요가 없습니다.

모든 VNet에서 서비스 엔드포인트를 사용할 수 있나요?

아니요, Azure Resource Manager 가상 네트워크만 서비스 엔드포인트를 사용하도록 설정할 수 있습니다. 클래식 가상 네트워크는 서비스 엔드포인트를 지원하지 않습니다.

Azure Cosmos DB 계정에 대해 전역 Azure 데이터 센터 내에서 연결을 수락해야 하는 경우는 언제인가요?

이 설정은 Azure Cosmos DB 계정이 모든 Azure 지역의 모든 Azure 서비스에 액세스할 수 있도록 하려는 경우에만 활성화해야 합니다. Azure Data Factory 및 Azure AI Search와 같은 다른 Azure 자사 서비스는 Azure Cosmos DB 계정을 포함하여 데이터 원본에 대한 액세스를 보호하는 방법에 대한 설명서를 제공합니다. 예를 들면 다음과 같습니다.

다음 단계

  • Azure Cosmos DB에 대한 방화벽을 구성하려면 방화벽 지원 문서를 참조하세요.