管理されたアイデンティティを使ってAzure Event Gridでイベントを配信する

この記事では、Azure Event Gridシステムのトピック、カスタムトピック、ドメインに対してマネージドサービスIDを有効にする方法を説明します。 また、マネージドアイデンティティを使ってService Busのキューやトピック、イベントハブ、ストレージアカウントなど、サポートされている目的地にイベントを届ける方法も説明しています。

[前提条件]

  1. システムトピック、カスタムトピック、ドメインにシステム割り当てIDまたはユーザー割り当てIDを割り当てます。

  2. 宛先 (Service Bus キューなど) で、アイデンティティを Service Bus Data Sender などの適切なロールに追加します。 詳細な手順については、「宛先上の Azure ロールに ID を追加する」をご覧ください。

    現在、 プライベートエンドポイントを使ってイベントを配信することはできません。 詳細については、この記事の最後にある 「プライベート エンドポイント 」セクションを参照してください。

ID を使用するイベント サブスクリプションを作成する

管理されたIDを持つEvent Gridのカスタムトピック、システムトピック、ドメインを設定し、そのアイデンティティを宛先の適切な役割に追加した後、そのアイデンティティを使うサブスクリプションを作成する準備が整います。

Azure ポータルを使用する

イベントサブスクリプションを作成すると、「 エンドポイント詳細 」セクションでシステム割り当てまたはユーザー割り当てのアイデンティティを有効にするオプションが表示されます。

この例は、Service Busキューを宛先にしたイベントサブスクリプションを作成する際にシステム割り当てのアイデンティティを有効にする方法を示しています。

Service Busキューのサブスクリプションでシステム割り当てのIDを有効にするスクリーンショット。

追加機能 タブで、デッドレター処理用のシステム割り当て ID を有効にすることもできます。

デッドレター処理のためにシステム割り当てマネージド ID を有効にするスクリーンショット。

イベントサブスクリプションの作成後にマネージドアイデンティティを有効にしてください。 イベント サブスクリプションの [イベント サブスクリプション] ページで、[追加機能] タブに切り替えてオプションを表示します。 デッドレタリング用のアイデンティティをこのページで有効にすることもできます。

既存のイベントサブスクリプションでシステム割り当てのIDを有効にするスクリーンショットです。

トピックでユーザー割り当てIDを有効にすると、「 管理されたアイデンティティタイプ」のドロップダウンリストで「ユーザー割り当てアイデンティティ」オプションが有効になっているのが確認できます。 [マネージド ID の種類] で [ユーザー割り当て済み] を選択した場合は、イベントの配信に使用するユーザー割り当て ID を選択できます。

イベントサブスクリプションでユーザー割り当てIDを有効にするスクリーンショット。

Azure CLI を使用した Service Bus キューの利用

このセクションでは、Azure CLIを使ってシステム割り当てのアイデンティティを有効にし、Service Busキューにイベントを配信する方法を学びます。 この ID は、デッドレターに使用されるストレージ アカウント上の Azure Service Bus Data Sender ロールおよび Storage Blob Data Contributor ロールのメンバーである必要があります。

変数の定義

subid="<AZURE SUBSCRIPTION ID>"
rg="<RESOURCE GROUP of EVENT GRID CUSTOM TOPIC>"
topicname="<EVENT GRID TOPIC NAME>"

# get the service bus queue resource id
queueid=$(az servicebus queue show --namespace-name <SERVICE BUS NAMESPACE NAME> --name <QUEUE NAME> --resource-group <RESOURCE GROUP NAME> --query id --output tsv)
sb_esname="<Specify a name for the event subscription>"

配信にマネージド ID を使用してイベント サブスクリプションを作成する

このコマンドは、エンドポイントタイプをService Busキューに設定したEvent Gridのカスタムトピックのイベントサブスクリプションを作成します。

az eventgrid event-subscription create \
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname \
    --delivery-identity-endpoint-type servicebusqueue \
    --delivery-identity systemassigned \
    --delivery-identity-endpoint $queueid \
    -n $sb_esname

マネージド ID を使用して、配信とデッドレタリングのためのイベント サブスクリプションを作成する

このサンプル コマンドでは、エンドポイントの種類が Service Bus キューに設定された Event Grid カスタム トピックのイベント サブスクリプションを作成します。 また、Event Grid では、デッドレター処理にシステム割り当てマネージド ID を使用することも明記されています。

storageid=$(az storage account show --name demoStorage --resource-group gridResourceGroup --query id --output tsv)
deadletterendpoint="$storageid/blobServices/default/containers/<BLOB CONTAINER NAME>"

az eventgrid event-subscription create \
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname \
    --delivery-identity-endpoint-type servicebusqueue \
    --delivery-identity systemassigned \
    --delivery-identity-endpoint $queueid \
    --deadletter-identity-endpoint $deadletterendpoint \
    --deadletter-identity systemassigned \
    -n $sb_esname

Azure CLI の使用 - Event Hubs

このセクションでは、Azure CLIを使ってシステム割り当てのアイデンティティを有効にしてイベントハブにイベントを配信する方法を学びます。 識別情報はAzure Event Hubs データ送信者ロールのメンバーである必要があります。 また、デッドレター処理に使用するストレージ アカウントに対して、Storage Blob Data Contributor ロールが割り当てられている必要があります。

変数の定義

subid="<AZURE SUBSCRIPTION ID>"
rg="<RESOURCE GROUP of EVENT GRID CUSTOM TOPIC>"
topicname="<EVENT GRID CUSTOM TOPIC NAME>"

hubid=$(az eventhubs eventhub show --name <EVENT HUB NAME> --namespace-name <NAMESPACE NAME> --resource-group <RESOURCE GROUP NAME> --query id --output tsv)
eh_esname="<SPECIFY EVENT SUBSCRIPTION NAME>"

配信にマネージド ID を使用してイベント サブスクリプションを作成する

このサンプル コマンドでは、エンドポイントの種類が Event Hubs に設定された Event Grid カスタム トピックのイベント サブスクリプションを作成します。

az eventgrid event-subscription create \
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname \
    --delivery-identity-endpoint-type eventhub \
    --delivery-identity systemassigned \
    --delivery-identity-endpoint $hubid \
    -n $eh_esname

マネージド ID を使用して、配信とデッドレタリングのためのイベント サブスクリプションを作成する

このサンプル コマンドでは、エンドポイントの種類が Event Hubs に設定された Event Grid カスタム トピックのイベント サブスクリプションを作成します。 また、システムに割り当てられた管理型IDがデッドレター処理を行うことも明記されています。

storageid=$(az storage account show --name demoStorage --resource-group gridResourceGroup --query id --output tsv)
deadletterendpoint="$storageid/blobServices/default/containers/<BLOB CONTAINER NAME>"

az eventgrid event-subscription create \
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname \
    --delivery-identity-endpoint-type eventhub \
    --delivery-identity systemassigned \
    --delivery-identity-endpoint $hubid \
    --deadletter-identity-endpoint $deadletterendpoint \
    --deadletter-identity systemassigned \
    -n $eh_esname

Azure CLI - Azure Storage キューを使用する

このセクションでは、Azure CLIを使ってシステム割り当てのアイデンティティを有効にし、イベントをAzure Storageキューに配信する方法を学びます。 ID は、ストレージ アカウントの ストレージ キュー データ メッセージ送信者 ロールのメンバーである必要があります。 また、デッドレター処理に使用するストレージ アカウントに対して、Storage Blob Data Contributor ロールが割り当てられている必要があります。

変数の定義

subid="<AZURE SUBSCRIPTION ID>"
rg="<RESOURCE GROUP of EVENT GRID CUSTOM TOPIC>"
topicname="<EVENT GRID CUSTOM TOPIC NAME>"

# get the storage account resource id
storageid=$(az storage account show --name <STORAGE ACCOUNT NAME> --resource-group <RESOURCE GROUP NAME> --query id --output tsv)

# build the resource id for the queue
queueid="$storageid/queueservices/default/queues/<QUEUE NAME>"

sa_esname="<SPECIFY EVENT SUBSCRIPTION NAME>"

配信にマネージド ID を使用してイベント サブスクリプションを作成する

az eventgrid event-subscription create \
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname \
    --delivery-identity-endpoint-type storagequeue \
    --delivery-identity systemassigned \
    --delivery-identity-endpoint $queueid \
    -n $sa_esname

マネージド ID を使用して、配信とデッドレタリングのためのイベント サブスクリプションを作成する

storageid=$(az storage account show --name demoStorage --resource-group gridResourceGroup --query id --output tsv)
deadletterendpoint="$storageid/blobServices/default/containers/<BLOB CONTAINER NAME>"

az eventgrid event-subscription create \
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname \
    --delivery-identity-endpoint-type storagequeue \
    --delivery-identity systemassigned \
    --delivery-identity-endpoint $queueid \
    --deadletter-identity-endpoint $deadletterendpoint \
    --deadletter-identity systemassigned \
    -n $sa_esname

プライベート エンドポイント

現在、 プライベートエンドポイントを使ってイベントを配信することはできません。 つまり、配信されたイベント トラフィックがプライベート IP 領域を離れてはならない、厳密なネットワーク分離要件がある場合はサポートされません。

しかし、暗号化されたチャネルと送信者の既知のアイデンティティ(この場合はEvent Grid)を使って公開IP空間を使って安全にイベントを送信する要件がある場合は、この記事で示したようにAzure Event Gridのカスタムトピックや管理型アイデンティティを持つドメインを使ってEvent Hubs、Service Bus、Azure Storageサービスにイベントを配信することができます。 その後、Azure Functionsで設定したプライベートリンクや、仮想ネットワークにデプロイされたWebhookを使ってイベントを引き寄せることができます。 チュートリアル「 Azure Functions を使用してプライベート エンドポイントに接続する」を参照してください。

この構成では、トラフィックはEvent GridからPublic IP/インターネット経由でEvent Hubs、Service Bus、またはAzure Storageへ送られますが、チャネルを暗号化し、Event GridのマネージドIDを使うこともできます。 Azure Functionsや仮想ネットワークにデプロイされたWebhookを設定し、Event Hubs、Service Bus、またはプライベートリンク経由でAzure Storageを使うように設定すると、そのトラフィック部分はAzure内にとどまります。

管理型アイデンティティについて学ぶには、AzureリソースのマネージドIDが何かをご覧ください。