プライベート エンドポイント経由での Azure Event Hubs 名前空間へのアクセスを許可する

Azure Private Link サービスを使用すると、仮想ネットワーク内のプライベート エンドポイント経由で、Azure サービス (Azure Event Hubs、Azure Storage、Azure Cosmos DB など) や、Azure でホストされている顧客またはパートナー サービスにアクセスできます。

プライベート エンドポイントとは、Azure Private Link を使用するサービスにプライベートかつ安全に接続するネットワーク インターフェイスです。 プライベート エンドポイントは、ご自分の仮想ネットワークからのプライベート IP アドレスを使用して、サービスを実質的に仮想ネットワークに取り込みます。 サービスへのすべてのトラフィックをプライベート エンドポイント経由でルーティングできるため、ゲートウェイ、NAT デバイス、ExpressRoute または VPN 接続、パブリック IP アドレスは必要ありません。 仮想ネットワークとサービスの間のトラフィックは、Microsoft のバックボーン ネットワークを経由して、パブリック インターネットからの公開を排除します。 最高レベルの細分性でアクセスを制御しながら Azure リソースのインスタンスに接続できます。

詳細については、「Azure Private Link とは」を参照してください。

重要なポイント

  • この機能は Basic レベルではサポートされていません。
  • プライベート エンドポイントを有効にすると、他の Azure サービスが Event Hubs と対話できないようにすることができます。 ブロックされる要求には、他の Azure サービスからの要求、Azure portal からの要求、ログおよびメトリック サービスからの要求などが含まれます。 例外として、プライベート エンドポイントが有効になっている場合でも、特定の信頼できるサービスからの Event Hubs リソースへのアクセスを許可できます。 信頼できるサービスの一覧については、信頼できるサービスに関するセクションを参照してください。
  • 指定した IP アドレスまたは仮想ネットワークのサブネットからのトラフィックのみを許可するには、名前空間に少なくとも 1 つの IP 規則または仮想ネットワーク規則を指定します。 IP 規則も仮想ネットワーク規則も指定しない場合は、パブリック インターネット経由で (アクセス キーを使用して) 名前空間にアクセスできます。

Azure portal を使用してプライベート エンドポイントを追加する

前提条件

Event Hubs 名前空間を Azure Private Link と統合するには、次のエンティティまたはアクセス許可が必要です。

  • Event Hubs 名前空間。
  • Azure 仮想ネットワーク。
  • 仮想ネットワーク内のサブネット。 既定のサブネットを使用できます。
  • 名前空間と仮想ネットワークの両方に対する所有者または共同作成者のアクセス許可。

プライベート エンドポイントと仮想ネットワークは、同じリージョンに存在する必要があります。 ポータルを使用してプライベート エンドポイントのリージョンを選択すると、自動的にフィルター処理が行われ、そのリージョン内にある仮想ネットワークのみが表示されます。 名前空間は、別のリージョンに配置することができます。

プライベート エンドポイントは、ご自分の仮想ネットワーク内のプライベート IP アドレスを使用します。

名前空間の作成時にプライベート アクセスを構成する

名前空間を作成するときは、名前空間へのパブリックのみ (すべてのネットワークから) またはプライベートのみ (プライベート エンドポイントを介してのみ) のアクセスを許可できます。

名前空間作成ウィザードの [ネットワーク] ページで [プライベート アクセス] オプションを選択した場合は、[+ プライベート エンドポイント] ボタンを選択して、そのページにプライベート エンドポイントを追加できます。 プライベート エンドポイントを追加する詳細な手順については、次のセクションを参照してください。

[プライベート アクセス] オプションが選択された名前空間の作成ウィザードの [ネットワーク] ページを示すスクリーンショット。

既存の名前空間のプライベート アクセスを構成する

Event Hubs の名前空間が既にある場合は、次の手順に従ってプライベート リンク接続を作成できます。

  1. Azure portal にサインインします。

  2. 検索バーで、「イベント ハブ」と入力します。

  3. プライベート エンドポイントを追加する名前空間を一覧から選択します。

  4. 名前空間にプライベート エンドポイント経由でのみアクセスする場合は、[ネットワーク] ページの [パブリック ネットワーク アクセス][無効] を選択します。

  5. [信頼された Microsoft サービスを許可して、このファイアウォールをバイパスする] については、信頼された Microsoft サービスを許可してこのファイアウォールをバイパスする場合は、[はい] を選択します。

    公衆ネットワーク アクセスを [無効] に設定した [ネットワーク] ページのスクリーンショット。

  6. **[プライベート エンドポイント接続]** タブに切り替えます。

  7. ページの上部にある [+ プライベート エンドポイント] ボタンを選択します。

    [ネットワーク] ページ - [プライベート エンドポイント接続] タブ - [プライベート エンドポイントの追加] リンク。

  8. [基本] ページで、次の手順を行います。

    1. プライベート エンドポイントを作成する Azure サブスクリプションを選択します。

    2. プライベート エンドポイント リソース用のリソース グループを選択します。

    3. プライベート エンドポイントの名前を入力します。

    4. ネットワーク インターフェイスの名前を入力します。

    5. プライベート エンドポイントのリージョンを選択します。 プライベート エンドポイントが存在するリージョンは仮想ネットワークと同じでなければなりませんが、接続しようとしているプライベート リンク リソースのリージョンとは異なっていても構いません。

    6. ページの下部にある [次へ: リソース] ボタンを選択します。

      [プライベート エンドポイントの作成] ウィザードの [基本] ページを示すスクリーンショット。

  9. [リソース] ページで設定を確認し、[次へ: 仮想ネットワーク] を選択します。

    [プライベート エンドポイントの作成] ウィザードの [リソース] ページを示すスクリーンショット。

  10. [仮想ネットワーク] ページで、プライベート エンドポイントのデプロイ先である仮想ネットワーク内のサブネットを選びます。

    1. [仮想ネットワーク] を選択します。 ドロップダウン リストには、現在選択されているサブスクリプションおよび場所内の仮想ネットワークのみが一覧表示されます。

    2. 選択した仮想ネットワーク内のサブネットを選択します。

    3. [プライベート エンドポイントのネットワーク ポリシー] が無効になっていることに注目してください。 有効にする場合は、[編集] を選択し、設定を更新して、[保存] を選択します。

    4. [プライベート IP 構成] は、既定で [IP アドレスを動的に割り当てる] オプションが選択されています。 静的 IP アドレスを割り当てる場合は、[IP アドレスを静的に割り当てる]* を選択します。

    5. [アプリケーション セキュリティ グループ] で、既存のアプリケーション セキュリティ グループを選択するか、プライベート エンドポイントに関連付けるアプリケーション セキュリティ グループを作成します。

    6. ページの下部にある [次へ: DNS>] ボタンを選択します。

      [プライベート エンドポイントの作成] ウィザードの [仮想ネットワーク] ページを示すスクリーンショット。

  11. [DNS] ページで、プライベート エンドポイントをプライベート DNS ゾーンに統合するかどうかを選択し、[次へ: タグ] を選択します。

  12. [タグ] ページでは、プライベート エンドポイント リソースに関連付ける任意のタグ (名前と値) を作成します。 次に、ページの下部にある [確認と作成] ボタンを選択します。

  13. [確認と作成] では、すべての設定を確認し、 [作成] を選択してプライベート エンドポイントを作成します。

    [プライベート エンドポイントの作成 - 確認と作成] ページ

  14. 作成したプライベート エンドポイント接続がエンドポイントの一覧に表示されていることを確認します。 この例では、自分のディレクトリ内の Azure リソースに接続していて、十分なアクセス許可を持っているため、プライベート エンドポイントは自動的に承認されます。

    作成されたプライベート エンドポイント

信頼できる Microsoft サービス

[信頼された Microsoft サービスがこのファイアウォールをバイパスすることを許可する] 設定を有効にした場合、同じテナント内の次のサービスに Event Hubs リソースへのアクセス権が与えられます。

信頼できるサービス サポートされる使用シナリオ
Azure Event Grid Event Hubs 名前空間のイベント ハブにイベントを送信することを Azure Event Grid に許可します。 次の手順も行う必要があります。
  • トピックまたはドメインに対してシステム割り当て ID を有効にする
  • Event Hubs 名前空間で Azure Event Hubs データ送信者ロールに ID を追加する
  • 次に、システムによって割り当てられた ID を使用するために、イベント ハブをエンドポイントとして使用するイベント サブスクリプションを構成する

詳細については、「マネージド ID を使用したイベント配信」を参照してください

Azure Stream Analytics Event Hubs 名前空間のイベント ハブからのデータの読み取り (入力) またはイベント ハブへの書き込み (出力) を Azure Stream Analytics ジョブに許可します。

重要:Stream Analytics ジョブは、マネージド ID を使用してイベント ハブにアクセスするように構成されている必要があります。 詳細については、「Azure Stream Analytics ジョブからマネージド ID を使用してイベント ハブにアクセスする (プレビュー)」を参照してください。

Azure IoT Hub Event Hubs 名前空間のイベント ハブにメッセージを送信することを IoT Hub に許可します。 次の手順も行う必要があります。
  • IoT ハブのシステム割り当て ID を有効にする
  • Event Hubs 名前空間で Azure Event Hubs データ送信者ロールに ID を追加する。
  • その後、ID ベースの認証を使用するため、イベント ハブをカスタム エンドポイントとして使用するように IoT Hub を構成する。
Azure API Management

API Management サービスを使用すると、Event Hubs 名前空間のイベント ハブにイベントを送信できます。

Azure Monitor ([診断設定] と [アクション グループ]) Event Hubs 名前空間のイベント ハブに診断情報とアラート通知を送信することを Azure Monitor に許可します。 Azure Monitor では、イベント ハブから読み取ることができ、イベント ハブにデータを書き込むこともできます。
Azure Synapse Azure Synapse が Synapse ワークスペースのマネージド ID を使用してイベント ハブに接続できるようにします。 Azure Event Hubs データ送信者、受信者、または所有者のロールを Event Hubs 名前空間の ID に追加します。
Azure Data Explorer Azure Data Explorer でクラスターのマネージド ID を使用してイベント ハブからイベントを受信できるようにします。 次の手順を行う必要があります。
  • Azure Data Explorer でマネージド ID を構成する
  • イベント ハブで、Azure Event Hubs データ受信者ロールを ID に付与します。
 
Azure IoT Central

Event Hubs 名前空間のイベント ハブにデータをエクスポートすることを IoT Central に許可します。 次の手順も行う必要があります。

Azure Health Data Services Healthcare API の IoT コネクタで Event Hubs 名前空間から医療デバイス データを取り込み、構成済みの高速ヘルスケア相互運用性リソース (FHIR®) サービスにデータを保持できるようにします。 IoT コネクタは、マネージド ID を使用してイベント ハブにアクセスするように構成されている必要があります。 詳細については、IoT コネクタの概要 - Azure Healthcare API に関する記事を参照してください。
Azure Digital Twins Azure Digital Twins が Event Hubs 名前空間内のイベント ハブにデータを送信できるようにします。 次の手順も行う必要があります。

  • Azure Digital Twins インスタンスのシステム割り当て ID を有効にします。
  • Event Hubs 名前空間で Azure Event Hubs データ送信者ロールに ID を追加します。
  • 次に、システム割り当て ID を使用して認証する Azure Digital Twins エンドポイントまたは Azure Digital Twins データ履歴接続を構成します。 Azure Digital Twins から Event Hubs リソースへのエンドポイントとイベント ルートの構成の詳細については、「Azure Digital Twins イベントのルーティング」と「Azure Digital Twins でエンドポイントを作成する」を参照してください。

Azure Event Hubs のその他の信頼できるサービスは次のとおりです:

  • Azure Arc
  • Azure Kubernetes
  • Azure Machine Learning
  • Microsoft Purview

信頼できるサービスが自分の名前空間にアクセスすることを許可するには、[ネットワークの種類] ページで [パブリック アクセス] タブに切り替え、[信頼された 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 ゾーンを作成し、仮想ネットワークとの関連付けリンクを作成します。

$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 リソースに接続している場合は、そのリソースの所有者が接続要求を承認するまで待機する必要があります。

プロビジョニングの状態には次の 4 つがあります。

サービス アクション サービス コンシューマーのプライベート エンドポイントの状態 説明
なし 保留中 接続が手動で作成されており、プライベート リンク リソースの所有者からの承認を待っています。
承認 Approved 接続が自動または手動で承認され、使用する準備が整っています。
Reject 拒否 プライベート リンク リソースの所有者によって接続が拒否されました。
[削除] [Disconnected](切断済み) プライベート リンク リソースの所有者によって接続が削除されました。プライベート エンドポイントは情報が多くなり、クリーンアップのために削除する必要があります。

プライベート エンドポイント接続の承認、拒否、または削除

  1. Azure portal にサインインします。
  2. 検索バーで、「イベント ハブ」と入力します。
  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。
  • トラフィックは、TCP 層ではなく、アプリケーション層でブロックされます。 そのため、パブリック アクセスが無効になっている場合でも、パブリック エンドポイントに対して TCP 接続または nslookup 操作が成功していることがわかります。

詳細については、Azure Private Link サービスの制限事項に関するセクションを参照してください。

次のステップ