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

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

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

注

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

Azure Portal の使用

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

注

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

新しいトピックの場合

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

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

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

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

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

  3. [プライベート エンドポイントの接続] セクションで、[+ プライベート エンドポイント] ボタンを選択します。

    [トピックの作成] ページの [プライベート エンドポイント] ボタンを示すスクリーンショット。

  4. [プライベート エンドポイントの作成] ページで、次の手順を実行します。

    1. [名前] に、プライベート エンドポイントの名前を入力します。
    2. [仮想ネットワーク] を選択します。 ドロップダウン リストには、現在選択されているサブスクリプションおよび場所内の仮想ネットワークのみが一覧表示されます。
    3. 選択した仮想ネットワーク内のサブネットを選択します。
    4. プライベート エンドポイントをプライベート DNS ゾーンと統合するかどうかを選択します。
    5. [OK] を選択します。

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

  5. 次に、[トピックの作成] ページの下部にある [確認 + 作成] を選択します。

  6. [確認および作成] ページで、 [作成] を選択します。

既存のトピックの場合

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

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

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

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

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

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

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

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

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

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

    5. エンドポイントのリージョンを選択します。 プライベート エンドポイントは仮想ネットワークと同じリージョンに存在する必要がありますが、プライベート リンク リソースとは異なるリージョンに存在する可能性があります (この例では、Event Grid トピック)。

    6. [次へ: リソース >] を選択します。

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

  5. [リソース] ページで、[ターゲット サブリソース] でトピックが選択されていることを確認し、[次へ: Virtual Network >] を選択します。

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

  6. Virtual Network ページで、プライベート エンドポイントをデプロイするvirtual network内のサブネットを選択します。

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

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

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

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

    5. [次へ: DNS >] を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

注

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

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

    [ネットワーク] タブの [保留中] 状態のプライベート エンドポイント接続を示すスクリーンショット。

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

    コメント フィールドと [はい] ボタンが表示された [接続の承認] ダイアログ ボックスを示すスクリーンショット。

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

    [承認済み] 状態のプライベート エンドポイント接続を示すスクリーンショット。

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

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

注

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

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

    [拒否] ボタンが選択されている [プライベート エンドポイント接続] タブを示すスクリーンショット。

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

    コメント フィールドと [はい] ボタンが表示された [接続の拒否] ダイアログ ボックスを示すスクリーンショット。

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

    [拒否済み] 状態のプライベート エンドポイント接続を示すスクリーンショット。

    注

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

Azure CLI の使用

前提条件

次のコマンドを実行することで、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 <RESOURCE 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 には、topic または domain のリソース ID を指定します。 前述の例では、type: topic を使用しています。
  • group-idsには、topicまたはdomainを指定します。 前の例では、topic を使用しています。

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

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

注

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

サンプル スクリプト

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

  • リソース グループ
  • 仮想ネットワーク
  • 仮想ネットワーク内のサブネット
  • Azure Event Grid トピック
  • トピックのプライベート エンドポイント

注

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

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 スニペットでは、プライベート エンドポイントを承認する方法を示します。

注

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


# 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 を取得できます。

注

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

# 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 ポータルを使用する場合、拒否されたエンドポイントを承認することはできません。