Azure Event Grid カスタム トピックまたはドメインに対してプライベート エンドポイントを構成する

プライベート エンドポイントを使用すると、パブリック インターネットを経由せずにプライベート リンクを介して安全に仮想ネットワークからカスタム トピックおよびドメインへ直接、イベントのイングレスを行えるようになります。 プライベート エンドポイントは、カスタム トピックまたはドメインの VNet アドレス空間からの IP アドレスを使用します。 概念の詳細については、ネットワーク セキュリティに関する記事をご覧ください。

この記事では、カスタム トピックまたはドメインに対してプライベート エンドポイントを構成する方法について説明します。

注意

現在、プライベート エンドポイントはシステム トピックではサポートされていません。

Azure Portal の使用

このセクションでは、Azure portal を使用して、トピックまたはドメインに対してプライベート エンドポイントを作成する方法について説明します。

Note

このセクションで示す手順は、多くがカスタム トピックに関するものです。 同様の手順を使用して、ドメインのプライベート エンドポイントを作成できます。

新しいトピックを作成する場合

このセクションでは、Event Grid のトピックまたはドメインに対してプライベート ネットワーク アクセスを有効にする方法について説明します。 新しいトピックを作成する詳細な手順については、「カスタム トピックの作成」をご覧ください。

  1. トピックの作成ウィザードの [基本] ページで、必要なフィールドを入力した後、ページの下部にある [次: ネットワーク] を選びます。

    ページの下部でネットワーク・リンクの選択を示す画像。

  2. プライベート エンドポイント経由での Event Grid トピックへのアクセスを許可するには、[プライベート アクセス] オプションを選びます。

    トピックの作成ウィザードの [ネットワーク] ページで [プライベート アクセス] オプションの選択を示す画像。

  3. プライベート エンドポイントを追加する手順については、次のセクションをご覧ください。

既存のトピックの場合

  1. Azure portal にサインインし、ご自身のトピックまたはドメインに移動します。

  2. トピックページの [ネットワーク] タブに切り替えます。 [パブリック アクセス] タブで、[プライベート エンドポイントのみ] を選びます。

    [プライベート エンドポイントのみ] オプションが選択されている [パブリック ネットワーク アクセス] ページを示すスクリーンショット。

  3. [プライベート エンドポイントの接続] タブに切り替えてから、ツール バーの [+ プライベート エンドポイント] を選びます。

    [プライベート エンドポイント接続] タブの [+ プライベート エンドポイント] リンクの選択を示すスクリーンショット。

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

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

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

    3. エンドポイント名前を入力します。

    4. 必要に応じて、ネットワーク インターフェイス名前を更新します。

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

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

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

  5. [リソース] ページで、次の手順に従って、[ターゲット サブリソース][トピック] が選択されていることを確認し、ページの下部にある [次へ: 仮想ネットワーク]> ボタンを選択します。

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

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

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

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

    3. [IP アドレス] を静的に割り当てるか動的に割り当てるかを指定します。

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

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

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

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

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

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

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

プライベート エンドポイントを作成する際は、接続を承認する必要があります。 プライベート エンドポイントの作成対象のリソースが自分のディレクトリ内にある場合、十分なアクセス許可があれば、接続要求を承認することができます。 別のディレクトリ内の Azure リソースに接続している場合は、そのリソースの所有者が接続要求を承認するまで待機する必要があります。

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

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

プライベート エンドポイント接続を管理する方法

次のセクションでは、プライベート エンドポイント接続を承認または拒否する方法について説明します。

  1. Azure portal にサインインします。
  2. 検索バーで、 [Event Grid トピック] または [Event Grid ドメイン] に入力します。
  3. 管理するトピックまたはドメインを選択します。
  4. [ネットワーク] タブを選択します。
  5. 保留中の接続がある場合は、プロビジョニング状態に [保留] と表示されている接続が一覧表示されます。

プライベート エンドポイント接続を承認するには

保留状態のプライベート エンドポイントを承認できます。 承認するには、次の手順に従います。

Note

このセクションで示す手順は、多くがトピックに関するものです。 同様の手順を使用して、ドメインのプライベート エンドポイントを承認できます。

  1. 承認するプライベート エンドポイントを選択し、ツールバーの [承認] を選択します。

    プライベート エンドポイント - 保留状態

  2. [接続の承認] ダイアログ ボックスで、コメントを入力し (省略可能)、 [はい] を選択します。

    プライベート エンドポイント - 承認

  3. エンドポイントの状態が [承認済み] と表示されていることを確認します。

    プライベート エンドポイント - 承認済み状態

プライベート エンドポイント接続を拒否するには

保留状態または承認済み状態のプライベート エンドポイントを拒否できます。 拒否するには、次の手順に従います。

Note

このセクションで示す手順は、トピックに関するものです。 同様の手順を使用して、ドメインのプライベート エンドポイントを拒否できます。

  1. 拒否するプライベート エンドポイントを選択し、ツールバーの [拒否] を選択します。

    [ネットワーク] - [プライベート エンドポイント接続] で [拒否] が選択されたことを示すスクリーンショット。

  2. [接続の拒否] ダイアログ ボックスで、コメントを入力し (省略可能)、 [はい] を選択します。

    プライベート エンドポイント - 拒否

  3. エンドポイントの状態が [拒否] と表示されていることを確認します。

    プライベート エンドポイント - 拒否状態

    Note

    拒否された後は、Azure portal でプライベート エンドポイントを承認できません。

Azure CLI の使用

プライベート エンドポイントを作成するには、次の例で示すように、az network private-endpoint create メソッドを使用します。

az network private-endpoint create \
    --resource-group <RESOURECE GROUP NAME> \
    --name <PRIVATE ENDPOINT NAME> \
    --vnet-name <VIRTUAL NETWORK NAME> \
    --subnet <SUBNET NAME> \
    --private-connection-resource-id "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.EventGrid/topics/<TOPIC NAME>" \
    --connection-name <PRIVATE LINK SERVICE CONNECTION NAME> \
    --location <LOCATION> \
    --group-ids topic

例で使用するパラメーターの説明については、az network private-endpoint create のドキュメントを参照してください。 この例では、次の点に注意してください。

  • private-connection-resource-id には、private-connection-resource-idまたはドメインのリソース ID を指定します。 前の例では、種類にトピックを使用しています。
  • group-ids の場合、topic または domain を指定します。 前の例では、topic を使用しています。

プライベート エンドポイントを削除するには、次の例で示すように、az network private-endpoint delete メソッドを使用します。

az network private-endpoint delete --resource-group <RESOURECE GROUP NAME> --name <PRIVATE ENDPOINT NAME>

Note

このセクションで示す手順は、トピックに関するものです。 同様の手順を使用して、ドメインのプライベート エンドポイントを作成できます。

前提条件

次のコマンドを実行することで、CLI の Azure Event Grid 拡張機能を更新します。

az extension update -n eventgrid

拡張機能がインストールされていない場合は、次のコマンドを実行してインストールします。

az extension add -n eventgrid

プライベート エンドポイントの作成

プライベート エンドポイントを作成するには、次の例で示すように、az network private-endpoint create メソッドを使用します。

az network private-endpoint create \
    --resource-group <RESOURECE GROUP NAME> \
    --name <PRIVATE ENDPOINT NAME> \
    --vnet-name <VIRTUAL NETWORK NAME> \
    --subnet <SUBNET NAME> \
    --private-connection-resource-id "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.EventGrid/topics/<TOPIC NAME>" \
    --connection-name <PRIVATE LINK SERVICE CONNECTION NAME> \
    --location <LOCATION> \
    --group-ids topic

例で使用するパラメーターの説明については、az network private-endpoint create のドキュメントを参照してください。 この例では、次の点に注意してください。

  • private-connection-resource-id には、private-connection-resource-idまたはドメインのリソース ID を指定します。 前の例では、種類にトピックを使用しています。
  • group-ids の場合、topic または domain を指定します。 前の例では、topic を使用しています。

プライベート エンドポイントを削除するには、次の例で示すように、az network private-endpoint delete メソッドを使用します。

az network private-endpoint delete --resource-group <RESOURECE GROUP NAME> --name <PRIVATE ENDPOINT NAME>

Note

このセクションで示す手順は、トピックに関するものです。 同様の手順を使用して、ドメインのプライベート エンドポイントを作成できます。

サンプル スクリプト

次の Azure リソースを作成するサンプル スクリプトを示します。

  • Resource group
  • 仮想ネットワーク
  • 仮想ネットワーク内のサブネット
  • Azure Event Grid トピック
  • トピックのプライベート エンドポイント

Note

このセクションで示す手順は、トピックに関するものです。 同様の手順を使用して、ドメインのプライベート エンドポイントを作成できます。

subscriptionID="<AZURE SUBSCRIPTION ID>"
resourceGroupName="<RESOURCE GROUP NAME>"
location="<LOCATION>"
vNetName="<VIRTUAL NETWORK NAME>"
subNetName="<SUBNET NAME>"
topicName = "<TOPIC NAME>"
connectionName="<ENDPOINT CONNECTION NAME>"
endpointName=<ENDPOINT NAME>

# resource ID of the topic. replace <SUBSCRIPTION ID>, <RESOURCE GROUP NAME>, and <TOPIC NAME> 
# topicResourceID="/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.EventGrid/topics/<TOPIC NAME>"

# select subscription
az account set --subscription $subscriptionID

# create resource group
az group create --name $resourceGroupName --location $location

# create vnet 
az network vnet create \
    --resource-group $resourceGroupName \
    --name $vNetName \
    --address-prefix 10.0.0.0/16

# create subnet
az network vnet subnet create \
    --resource-group $resourceGroupName \
    --vnet-name $vNetName \
    --name $subNetName \
    --address-prefixes 10.0.0.0/24

# disable private endpoint network policies for the subnet
az network vnet subnet update \
    --resource-group $resourceGroupName \
    --vnet-name $vNetName \
    --name $subNetName \
    --disable-private-endpoint-network-policies true

# create event grid topic. update <LOCATION>
az eventgrid topic create \
    --resource-group $resourceGroupName \
    --name $topicName \
    --location $location

# verify that the topic was created.
az eventgrid topic show \
    --resource-group $resourceGroupName \
    --name $topicName

# create private endpoint for the topic you created
az network private-endpoint create \
    --resource-group $resourceGroupName \
    --name $endpointName \
    --vnet-name $vNetName \
    --subnet $subNetName \
    --private-connection-resource-id $topicResourceID \
    --connection-name $connectionName \
    --location $location \
    --group-ids topic

# get topic 
az eventgrid topic show \
    --resource-group $resourceGroupName \
    --name $topicName

プライベート エンドポイントの承認

次のサンプル CLI スニペットでは、プライベート エンドポイント接続を承認する方法を示します。

az eventgrid topic private-endpoint-connection approve \
    --resource-group $resourceGroupName \
    --topic-name $topicName \
    --name  $endpointName \
    --description "connection approved"

プライベート エンドポイントの拒否

次のサンプル CLI スニペットでは、プライベート エンドポイント接続を拒否する方法を示します。

az eventgrid topic private-endpoint-connection reject \
    --resource-group $resourceGroupName \
    --topic-name $topicName \
    --name $endpointName \
    --description "Connection rejected"

パブリック ネットワーク アクセスの無効化

既定では、Event Grid のトピックまたはドメインに対してパブリック ネットワーク アクセスが有効になっています。 プライベート エンドポイント経由でのアクセスのみを許可するには、次のコマンドを実行して、パブリック ネットワーク アクセスを無効にします。

az eventgrid topic update \
    --resource-group $resourceGroupName \
    --name $topicName \
    --public-network-access disabled

PowerShell の使用

このセクションでは、PowerShell を使用して、トピックまたはドメインに対してプライベート エンドポイントを作成する方法について説明します。 コメント付きのサンプル スクリプトを次に示します。


# name of an Azure resource group to be created
$resourceGroupName = "contosorg"

# location where you want the resources to be created
$location ="eastus"

# name of the VNet to be created
$vnetName = "contosovnet"

# name of the subnet to be created in the VNet
$subnetName = "example-privatelinksubnet"

# name of the Event Grid topic to be created
$egridTopicName = "contosotopic"

# name of the private link service connection to be created
$privateLinkServiceConnectionName = "spegridplsconn"

# name of the private endpoint connection to be created
$privateEndpointConnectionName = "spegridpe11"

#

# create resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location

# create virtual network
$virtualNetwork = New-AzVirtualNetwork `
                    -ResourceGroupName $resourceGroupName `
                    -Location $location `
                    -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

# get virtual network (optional)
$virtualNetwork = Get-AzVirtualNetwork `
                    -ResourceGroupName $resourceGroupName `
                    -Name $vnetName 

# create an Event Grid topic with public network access disabled. 
$topic = New-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $egridTopicName -Location $location -PublicNetworkAccess disabled

# create a private link service connection to the Event Grid topic. 
# For topics, set GroupId to 'topic'. For domains, it's 'domain'
$privateEndpointConnection = New-AzPrivateLinkServiceConnection `
                                -Name "privateLinkServiceConnectionName" `
                                -PrivateLinkServiceId $topic.id `
                                -GroupId "topic"

# get subnet info
$subnet = $virtualNetwork | Select -ExpandProperty subnets `
                             | Where-Object  {$_.Name -eq $subnetName }  

# now, you are ready to create a private endpoint 
$privateEndpoint = New-AzPrivateEndpoint -ResourceGroupName $resourceGroupName  `
                                        -Name privateEndpointConnectionName   `
                                        -Location $location `
                                        -Subnet  $subnet   `
                                        -PrivateLinkServiceConnection $privateEndpointConnection

# verify that the endpoint is created
Get-AzPrivateEndpoint -ResourceGroupName $resourceGroupName  -Name privateEndpointConnectionName  

プライベート エンドポイント接続を承認する

次のサンプル PowerShell スニペットでは、プライベート エンドポイントを承認する方法を示します。

Note

このセクションで示す手順は、トピックに関するものです。 同様の手順を使用して、ドメインのプライベート エンドポイントを承認できます。


# list all private endpoints for the topic
$topic = Get-AzEventGridTopic -ResourceGroup <RESOURCE GROUP NAME> - Name <TOPIC NAME>
$endpointList = Get-AzPrivateEndpointConnection -PrivateLinkResourceId $topic.Id

# filter the private endpoints using a name
 $pseEndpoint = $endpointList | Where-Object {     $_.Name.StartsWith('<MYENDPOINTNAME>') }

# approve the endpoint connection
Approve-AzPrivateEndpointConnection -ResourceId $pseEndpoint.Id

# get the endpoint connection to verify that it's approved
Get-AzPrivateEndpointConnection -ResourceId $pseEndpoint.Id

プライベート エンドポイント接続を拒否する

次の例では、PowerShell を使用して、プライベート エンドポイントを拒否する方法を示します。 前の GET コマンドの結果から、プライベート エンドポイントの GUID を取得できます。

Note

このセクションで示す手順は、トピックに関するものです。 同様の手順を使用して、ドメインのプライベート エンドポイントを拒否できます。

# list all private endpoints for the topic
$topic = Get-AzEventGridTopic -ResourceGroup <RESOURCE GROUP NAME> - Name <TOPIC NAME>
$endpointList = Get-AzPrivateEndpointConnection -PrivateLinkResourceId $topic.Id


# filter the private endpoints using a name
 $pseEndpoint = $endpointList | Where-Object {     $_.Name.StartsWith('<MYENDPOINT>') }

# deny or reject the private endpoint connection
Deny-AzPrivateEndpointConnection -ResourceId $pseEndpoint.Id

# get the endpoint connection to verify that it's rejected
Get-AzPrivateEndpointConnection -ResourceId $pseEndpoint.Id

API を介して拒否された後でも、接続を承認できます。 Azure portal を使用した場合、拒否されたエンドポイントを承認することはできません。

次のステップ