프라이빗 엔드포인트를 통한 Azure Event Hubs 네임스페이스 액세스 허용

Azure Private Link Service를 사용하면 가상 네트워크의 프라이빗 엔드포인트를 통해 Azure 서비스(예: Azure Event Hubs, Azure Storage 및 Azure Cosmos DB)와 Azure 호스팅 고객/파트너 서비스에 액세스할 수 있습니다.

프라이빗 엔드포인트는 Azure Private Link가 제공하는, 서비스에 비공개로 안전하게 연결하는 네트워크 인터페이스입니다. 프라이빗 엔드포인트는 가상 네트워크의 개인 IP 주소를 사용하여 효과적으로 가상 네트워크에 서비스를 제공합니다. 서비스에 대한 모든 트래픽은 프라이빗 엔드포인트를 통해 라우팅할 수 있으므로 게이트웨이, NAT 디바이스, ExpressRoute 또는 VPN 연결 또는 공용 IP 주소가 필요하지 않습니다. 가상 네트워크와 서비스 간의 트래픽은 Microsoft 백본 네트워크를 통해 이동하여 공용 인터넷에서 노출을 제거합니다. Azure 리소스의 인스턴스에 연결하여 액세스 제어에서 가장 높은 수준의 세분성을 제공할 수 있습니다.

자세한 내용은 Azure Private Link란?을 참조하세요.

중요 사항

  • 이 기능은 기본 계층에서 지원되지 않습니다.
  • 프라이빗 엔드포인트를 사용하여 다른 Azure 서비스가 Event Hubs와 상호 작용하지 않도록 할 수 있습니다. 차단되는 요청에는 다른 Azure 서비스, Azure Portal, 로깅 및 메트릭 서비스 등이 포함됩니다. 예외적으로 프라이빗 엔드포인트가 활성화된 경우에도 특정 신뢰할 수 있는 서비스에서 Event Hubs 리소스에 대한 액세스를 허용할 수 있습니다. 신뢰할 수 있는 서비스 목록은 신뢰할 수 있는 서비스를 참조하세요.
  • 지정된 IP 주소 또는 가상 네트워크의 서브넷에서만 트래픽을 허용하도록 네임스페이스에 대해 하나 이상의 IP 규칙 또는 가상 네트워크 규칙을 지정합니다. IP 및 가상 네트워크 규칙이 없는 경우 액세스 키를 사용하여 공용 인터넷을 통해 네임스페이스에 액세스할 수 있습니다.

Azure Portal을 사용하여 프라이빗 엔드포인트 추가

사전 요구 사항

Event Hubs 네임스페이스를 Azure Private Link와 통합하려면 다음 엔터티 또는 사용 권한이 필요합니다.

  • Event Hubs 네임스페이스
  • Azure 가상 네트워크
  • 가상 네트워크의 서브넷 기본 서브넷을 사용할 수 있습니다.
  • 네임스페이스 및 가상 네트워크 모두에 대한 소유자 또는 기여자 권한

프라이빗 엔드포인트와 가상 네트워크는 동일한 지역에 있어야 합니다. 포털을 사용하여 프라이빗 엔드포인트에 대한 영역을 선택하면 해당 지역에 있는 가상 네트워크만 자동으로 필터링됩니다. 네임스페이스는 다른 지역에 있을 수 있습니다.

프라이빗 엔드포인트는 가상 네트워크에서 개인 IP 주소를 사용합니다.

단계

Event Hubs 네임스페이스가 이미 있는 경우 다음 단계에 따라 Private Link 연결을 만들 수 있습니다.

  1. Azure Portal에 로그인합니다.

  2. 검색 표시줄에 event hubs를 입력합니다.

  3. 목록에서 프라이빗 엔드포인트를 추가하려는 네임스페이스를 선택합니다.

  4. 네트워킹 페이지에서 공용 네트워크 액세스에 대해 다음 세 가지 옵션 중 하나를 설정할 수 있습니다. 프라이빗 엔드포인트를 통해서만 네임스페이스에 액세스하려면 사용 안 함을 선택합니다.

    • Disabled. 이 옵션은 네임스페이스에 대한 모든 공용 액세스를 사용하지 않도록 설정합니다. 네임스페이스는 프라이빗 엔드포인트를 통해서만 액세스할 수 있습니다.

      네트워킹 페이지 - 공용 액세스 탭 - 공용 네트워크 액세스가 사용하지 않도록 설정되어 있습니다.

    • 선택한 네트워크. 이 옵션은 선택한 네트워크의 액세스 키를 사용하여 네임스페이스에 대한 공용 액세스를 사용하도록 설정합니다.

      중요

      선택한 네트워크를 선택하는 경우 네임스페이스에 액세스할 수 있는 가상 네트워크 또는 IP 방화벽 규칙을 하나 이상 추가합니다. 프라이빗 엔드포인트를 통해서만 이 네임스페이스에 대한 모든 트래픽을 제한하려면 사용하지 않도록 설정를 선택합니다.

      네트워크 옵션이 선택된 네트워킹 페이지.

    • 모든 네트워크(기본값). 이 옵션은 액세스 키를 사용하여 모든 네트워크에서 공용 액세스를 사용하도록 설정합니다. 모든 네트워크 옵션을 선택하면 이벤트 허브는 액세스 키를 사용한 모든 IP 주소에서의 연결을 허용합니다. 이 설정은 0.0.0.0/0 IP 주소 범위를 수락하는 규칙과 같습니다.

      모든 네트워크 옵션이 선택된 공용 액세스 페이지를 보여 주는 스크린샷.

  5. 프라이빗 엔드포인트 연결 탭으로 전환합니다.

  6. 페이지 위쪽에서 + 프라이빗 엔드포인트 단추를 선택합니다.

    네트워킹 페이지 - 프라이빗 엔드포인트 연결 탭 - 프라이빗 엔드포인트 링크 추가.

  7. 기본 페이지에서 다음 단계를 수행합니다.

    1. 프라이빗 엔드포인트를 만들려는 Azure 구독을 선택합니다.

    2. 프라이빗 엔드포인트 리소스에 대한 리소스 그룹을 선택합니다.

    3. 프라이빗 엔드포인트에 대한 이름을 입력합니다.

    4. 네트워크 인터페이스의 이름을 입력합니다.

    5. 프라이빗 엔드포인트에 대한 지역을 선택합니다. 프라이빗 엔드포인트는 가상 네트워크와 동일한 영역에 있어야 하지만 연결할 프라이빗 링크 리소스와 다른 영역에 있을 수 있습니다.

    6. 페이지 하단에서 다음: 리소스 > 단추를 선택합니다.

      프라이빗 엔드포인트 만들기 마법사의 기본 페이지를 보여 주는 스크린샷.

  8. 리소스 페이지에서 설정을 검토하고 다음: Virtual Network를 선택합니다.

    프라이빗 엔드포인트 만들기 마법사의 리소스 페이지를 보여 주는 스크린샷.

  9. Virtual Network 페이지에서 프라이빗 엔드포인트를 배포할 가상 네트워크의 서브넷을 선택합니다.

    1. 가상 네트워크를 선택합니다. 드롭다운 목록에 현재 선택한 구독 및 위치의 가상 네트워크만 나열됩니다.

    2. 선택한 가상 네트워크의 서브넷을 선택합니다.

    3. 프라이빗 엔드포인트에 대한 네트워크 정책이 비활성화되어 있습니다. 이를 사용하도록 설정하려면 편집을 선택하고 설정을 업데이트하고 저장을 선택합니다.

    4. 개인 IP 구성에는 기본적으로 동적으로 IP 주소 할당 옵션이 선택되어 있습니다. 고정 IP 주소를 할당하려면 고정적으로 IP 주소 할당*을 선택합니다.

    5. 애플리케이션 보안 그룹의 경우 기존 애플리케이션 보안 그룹을 선택하거나 프라이빗 엔드포인트와 연결할 애플리케이션 보안 그룹을 만듭니다.

    6. 페이지 하단에서 다음: DNS > 단추를 선택합니다.

      프라이빗 엔드포인트 만들기 마법사의 Virtual Network 페이지를 보여 주는 스크린샷.

  10. DNS 페이지에서 프라이빗 엔드포인트를 프라이빗 DNS 영역과 통합할지 여부를 선택한 후 다음: 태그를 선택합니다.

  11. 태그 페이지에서 프라이빗 엔드포인트 리소스와 연결하려는 태그(이름 및 값)를 만듭니다. 그런 다음 페이지 아래쪽에서 검토 + 만들기 단추를 선택합니다.

  12. 검토 + 만들기에서 모든 설정을 검토하고 만들기를 선택하여 프라이빗 엔드포인트를 만듭니다.

    프라이빗 엔드포인트 만들기 - 검토 및 만들기 페이지

  13. 만든 프라이빗 엔드포인트 연결이 엔드포인트 목록에 표시되는지 확인합니다. 이 예에서는 디렉터리의 Azure 리소스에 연결할 수 있고 충분한 사용 권한이 있으므로 프라이빗 엔드포인트가 자동으로 승인됩니다.

    만든 프라이빗 엔드포인트

신뢰할 수 있는 Microsoft 서비스

신뢰할 수 있는 Microsoft 서비스에서 이 방화벽을 무시하도록 허용 설정을 사용하면 동일한 테넌트 내의 다음 서비스에 Event Hubs 리소스에 대한 액세스 권한이 부여됩니다.

신뢰할 수 있는 서비스 지원되는 사용 시나리오
Azure Event Grid Azure Event Grid에서 Event Hubs 네임스페이스의 이벤트 허브로 이벤트를 보낼 수 있습니다. 다음 단계도 수행해야 합니다.
  • 항목 또는 도메인에 대한 시스템 할당 ID 사용
  • Event Hubs 네임스페이스에서 Azure Event Hubs 데이터 보낸 사람 역할에 ID를 추가합니다.
  • 그런 다음, 시스템 할당 ID를 사용하도록 이벤트 허브를 엔드포인트로 사용하는 이벤트 구독을 구성합니다.

자세한 내용은 관리 ID를 사용한 이벤트 전달을 참조하세요.

Azure Monitor(진단 설정 및 작업 그룹) Azure Monitor가 Event Hubs 네임스페이스의 이벤트 허브에 진단 정보 및 경고 알림을 보낼 수 있도록 합니다. Azure Monitor는 이벤트 허브에서 읽고 이벤트 허브에 데이터를 쓸 수도 있습니다.
Azure Stream Analytics Azure Stream Analytics 작업이 Event Hubs 네임스페이스의 이벤트 허브에서 데이터를 읽거나(입력) 데이터를 작성(출력)할 수 있습니다.

중요: 관리 ID를 사용하여 이벤트 허브에 액세스하도록 Stream Analytics 작업을 구성해야 합니다. 자세한 내용은 관리 ID를 사용하여 Azure Stream Analytics 작업에서 Event Hub에 액세스(미리 보기)를 참조하세요.

Azure IoT Hub IoT Hub를 사용하면 Event Hub 네임스페이스의 이벤트 허브로 메시지를 보낼 수 있습니다. 다음 단계도 수행해야 합니다.
  • IoT 허브에 대해 시스템 할당 ID 사용
  • Event Hubs 네임스페이스에서 Azure Event Hubs 데이터 보낸 사람 역할에 ID를 추가합니다.
  • 그런 다음, ID 기반 인증을 사용하도록 이벤트 허브를 사용자 지정 엔드포인트로 사용하는 IoT Hub를 구성합니다.
Azure API Management

API Management 서비스를 사용하면 Event Hubs 네임스페이스의 이벤트 허브로 이벤트를 보낼 수 있습니다.

Azure IoT Central

IoT Central이 Event Hub 네임스페이스의 이벤트 허브로 데이터를 내보낼 수 있도록 합니다. 다음 단계도 수행해야 합니다.

  • IoT Central 애플리케이션에 대해 시스템 할당 ID를 사용하도록 설정합니다.
  • Event Hubs 네임스페이스에서 Azure Event Hubs 데이터 보낸 사람 역할에 ID를 추가합니다.
  • 그런 다음 ID 기반 인증을 사용하도록 Event Hubs IoT Central 애플리케이션의 내보내기 대상을 구성합니다.

신뢰할 수 있는 서비스가 네임스페이스에 액세스할 수 있도록 하려면 네트워킹 페이지에서 방화벽 및 가상 네트워크 탭으로 전환하고 신뢰할 수 있는 Microsoft 서비스가 이 방화벽을 우회하도록 허용하시겠습니까? 에 대해 를 선택합니다.

PowerShell을 사용하여 프라이빗 엔드포인트 추가

다음 예에서는 Azure PowerShell을 사용하여 프라이빗 엔드포인트 연결을 만드는 방법을 보여 줍니다. 자동으로 전용 클러스터를 만들지 않습니다. 이 문서의 단계에 따라 전용 Event Hubs 클러스터를 만듭니다.

$rgName = "<RESOURCE GROUP NAME>"
$vnetlocation = "<VIRTUAL NETWORK LOCATION>"
$vnetName = "<VIRTUAL NETWORK NAME>"
$subnetName = "<SUBNET NAME>"
$namespaceLocation = "<NAMESPACE LOCATION>"
$namespaceName = "<NAMESPACE NAME>"
$peConnectionName = "<PRIVATE ENDPOINT CONNECTION NAME>"

# create resource group
New-AzResourceGroup -Name $rgName -Location $vnetLocation 

# create virtual network
$virtualNetwork = New-AzVirtualNetwork `
                    -ResourceGroupName $rgName `
                    -Location $vnetlocation `
                    -Name $vnetName `
                    -AddressPrefix 10.0.0.0/16

# create subnet with endpoint network policy disabled
$subnetConfig = Add-AzVirtualNetworkSubnetConfig `
                    -Name $subnetName `
                    -AddressPrefix 10.0.0.0/24 `
                    -PrivateEndpointNetworkPoliciesFlag "Disabled" `
                    -VirtualNetwork $virtualNetwork

# update virtual network
$virtualNetwork | Set-AzVirtualNetwork

# create an event hubs namespace in a dedicated cluster
$namespaceResource = New-AzResource -Location $namespaceLocation `
                                    -ResourceName $namespaceName `
                                    -ResourceGroupName $rgName `
                                    -Sku @{name = "Standard"; capacity = 1} `
                                    -Properties @{clusterArmId = "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.EventHub/clusters/<EVENT HUBS CLUSTER NAME>"} `
                                    -ResourceType "Microsoft.EventHub/namespaces" -ApiVersion "2018-01-01-preview"

# create private endpoint connection
$privateEndpointConnection = New-AzPrivateLinkServiceConnection `
                                -Name $peConnectionName `
                                -PrivateLinkServiceId $namespaceResource.ResourceId `
                                -GroupId "namespace"

# get subnet object that you'll use later
$virtualNetwork = Get-AzVirtualNetwork -ResourceGroupName  $rgName -Name $vnetName
$subnet = $virtualNetwork | Select -ExpandProperty subnets `
                                | Where-Object  {$_.Name -eq $subnetName}  
   
# create a private endpoint   
$privateEndpoint = New-AzPrivateEndpoint -ResourceGroupName $rgName  `
                                -Name $vnetName   `
                                -Location $vnetlocation `
                                -Subnet  $subnet   `
                                -PrivateLinkServiceConnection $privateEndpointConnection

(Get-AzResource -ResourceId $namespaceResource.ResourceId -ExpandProperties).Properties


프라이빗 DNS 영역 구성

Event Hubs 도메인에 대한 프라이빗 DNS 영역을 만들고, Virtual Network와의 연결 링크를 만듭니다.

$zone = New-AzPrivateDnsZone -ResourceGroupName $rgName `
                            -Name "privatelink.servicebus.windows.net" 
 
$link  = New-AzPrivateDnsVirtualNetworkLink -ResourceGroupName $rgName `
                                            -ZoneName "privatelink.servicebus.windows.net" `
                                            -Name "mylink" `
                                            -VirtualNetworkId $virtualNetwork.Id  
 
$networkInterface = Get-AzResource -ResourceId $privateEndpoint.NetworkInterfaces[0].Id -ApiVersion "2019-04-01" 
 
foreach ($ipconfig in $networkInterface.properties.ipConfigurations) { 
    foreach ($fqdn in $ipconfig.properties.privateLinkConnectionProperties.fqdns) { 
        Write-Host "$($ipconfig.properties.privateIPAddress) $($fqdn)"  
        $recordName = $fqdn.split('.',2)[0] 
        $dnsZone = $fqdn.split('.',2)[1] 
        New-AzPrivateDnsRecordSet -Name $recordName -RecordType A -ZoneName "privatelink.servicebus.windows.net"  `
                                -ResourceGroupName $rgName -Ttl 600 `
                                -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $ipconfig.properties.privateIPAddress)  
    } 
}

Azure Portal을 사용하여 프라이빗 엔드포인트 관리

프라이빗 엔드포인트를 만들 때 연결이 승인되어야 합니다. 프라이빗 엔드포인트를 만드는 리소스가 디렉터리에 있는 경우 충분한 사용 권한이 있다면 연결 요청을 승인할 수 있습니다. 다른 디렉터리의 Azure 리소스에 연결하는 경우 해당 리소스의 소유자가 연결 요청을 승인할 때까지 기다려야 합니다.

다음 네 가지 프로비저닝 상태가 있습니다.

서비스 작업 서비스 소비자 프라이빗 엔드포인트 상태 Description
None Pending 연결이 수동으로 만들어지고, Private Link 리소스 소유자의 승인이 보류 중입니다.
승인 승인됨 연결이 자동 또는 수동으로 승인되었으며, 사용할 준비가 되었습니다.
거부 거부됨 Private Link 리소스 소유자가 연결을 거부했습니다.
제거 연결 끊김 Private Link 리소스 소유자가 연결을 제거했습니다. 프라이빗 엔드포인트는 정보를 제공하므로 정리를 위해 삭제해야 합니다.

프라이빗 엔드포인트 연결 승인, 거부 또는 제거

  1. Azure Portal에 로그인합니다.
  2. 검색 표시줄에 event hubs를 입력합니다.
  3. 관리하려는 네임스페이스를 선택합니다.
  4. 네트워킹 탭을 선택합니다.
  5. 승인, 거부 또는 제거하려는 작업에 따라 아래의 해당 섹션으로 이동합니다.

프라이빗 엔드포인트 연결 승인

  1. 보류 중인 연결이 있으면 프로비저닝 상태가 보류 중인 연결이 나열됩니다.

  2. 승인하려는 프라이빗 엔드포인트를 선택합니다.

  3. 승인 단추를 선택합니다.

    프라이빗 엔드포인트 승인

  4. 연결 승인 페이지에서 설명(선택 사항)을 추가하고 를 선택합니다. 아니요를 선택하면 아무 작업도 수행되지 않습니다.

  5. 목록에서 프라이빗 엔드포인트 연결의 상태가 승인됨으로 변경되어 있어야 합니다.

프라이빗 엔드포인트 연결 거부

  1. 보류 중인 요청 또는 기존 연결인지 여부에 관계없이 거부하려는 프라이빗 엔드포인트 연결이 있으면 연결을 선택하고 거부 단추를 클릭합니다.

    프라이빗 엔드포인트 거부

  2. 연결 거부 페이지에서 설명(선택 사항)을 입력하고 를 선택합니다. 아니요를 선택하면 아무 작업도 수행되지 않습니다.

  3. 목록에서 프라이빗 엔드포인트 연결 상태가 거부됨으로 변경되어 있어야 합니다.

프라이빗 엔드포인트 연결 제거

  1. 프라이빗 엔드포인트 연결을 제거하려면 목록에서 해당 연결을 선택하고 도구 모음에서 제거를 선택합니다.
  2. 연결 삭제 페이지에서 를 선택하여 프라이빗 엔드포인트의 삭제를 확인합니다. 아니요를 선택하면 아무 작업도 수행되지 않습니다.
  3. 상태가 연결 끊김으로 변경되어 있어야 합니다. 그러면 목록에서 엔드포인트가 사라지게 됩니다.

프라이빗 엔드포인트의 가상 네트워크 내에 있는 리소스가 개인 IP 주소를 통해 Event Hubs 네임스페이스에 연결되고 올바른 프라이빗 DNS 영역 통합이 있는지 확인해야 합니다.

먼저 Azure Portal에서 Windows 가상 머신 만들기의 단계에 따라 가상 머신을 만듭니다.

네트워킹 탭에서 다음을 수행합니다.

  1. 가상 네트워크서브넷을 지정합니다. 프라이빗 엔드포인트를 배포한 가상 네트워크를 선택해야 합니다.
  2. 공용 IP 리소스를 지정합니다.
  3. NIC 네트워크 보안 그룹없음을 선택합니다.
  4. 부하 분산아니요를 선택합니다.

VM에 연결하고 명령줄을 열어 다음 명령을 실행합니다.

nslookup <event-hubs-namespace-name>.servicebus.windows.net

결과가 다음과 같이 표시됩니다.

Non-authoritative answer:
Name:    <event-hubs-namespace-name>.privatelink.servicebus.windows.net
Address:  10.0.0.4 (private IP address associated with the private endpoint)
Aliases:  <event-hubs-namespace-name>.servicebus.windows.net

제한 사항 및 디자인 고려 사항

가격 책정: 가격 책정 정보는 Azure Private Link 가격 책정을 참조하세요.

제한 사항: 이 기능은 모든 Azure 공개 지역에서 사용할 수 있습니다.

Event Hubs 네임스페이스당 최대 프라이빗 엔드포인트 수: 120.

자세한 내용은 Azure Private Link 서비스: 제한 사항을 참조하세요.

다음 단계