マネージド ID に Event Grid の配信先へのアクセスを許可する

このセクションでは、システム トピック、カスタム トピックまたはドメインの ID を Azure ロールに追加する方法について説明します。

前提条件

次の記事の指示に従って、システムによって割り当てられたマネージド ID を割り当てます。

サポートされている配信先と Azure ロール

Event Grid カスタム トピックまたはドメインに対して ID を有効にすると、Azure によって Microsoft Entra ID 内で自動的に ID が作成されます。 カスタム トピックまたはドメインによってサポート対象の配信先にイベントを転送できるように、適切な Azure ロールにこの ID を追加します。 たとえば、ある Azure Event Hubs 名前空間の Azure Event Hubs データ送信者ロールに ID を追加すると、Event Grid カスタム トピックによってその名前空間のイベント ハブにイベントを転送できるようになります。

現在、Azure Event Grid では、システム割り当てマネージド ID で構成されたカスタム トピックやドメインによって、次の配信先にイベントを転送することをサポートしています。 この表は、カスタム トピックによってイベントを転送できるようにするために、ID を含めるべきロールも示しています。

到着地 Azure ロール
Service Bus のキューとトピック Azure Service Bus データ送信者
Azure Event Hubs Azure Event Hubs データ送信者
Azure BLOB ストレージ ストレージ BLOB データ共同作成者
Azure Queue Storage ストレージ キュー データ メッセージ送信者

Azure ポータルの使用

カスタム トピックやドメインによってイベントを配信先に転送できるようにするために、Azure portal を使用して、カスタム トピックやドメインの ID を適切なロールに割り当てることができます。

次の例では、msitesttopic という名称の Event Grid カスタム トピックのマネージド ID を、キューまたはトピックのリソースが含まれている Service Bus の名前空間の Azure Service Bus データ送信者ロールに追加します。 名前空間レベルでロールに追加すると、Event Grid カスタム トピックによりイベントをその名前空間内のすべてのエンティティに転送できるようになります。

  1. Azure portal で、ご利用の Service Bus 名前空間に移動します。

  2. 左ペインの [アクセス制御] を選択します。

  3. [ロールの割り当ての追加 (プレビュー)] セクションで [追加] を選択します。

    Image showing the selection of Add role assignment (Preview) menu

  4. [ロールの割り当ての追加] ページで、 [Azure Service Bus のデータ送信者] を選択して、 [次へ] を選択します。

    Image showing the selection of the Azure Service Bus Data Sender role

  5. [メンバー] タブで、次の手順のようにします。

    1. [User, group, or service principal]\(ユーザー、グループ、またはサービス プリンシパル\) を選択して、 [+ メンバーの選択] をクリックします。 [マネージド ID] オプションでは、Event Grid の ID はまだサポートされていません。

    2. [メンバーの選択] ウィンドウで、カスタム トピックと同じ名前のサービス プリンシパルを検索して選択します。 次の例では spcustomtopic0728 です。

      Image showing the selection of the User, group, or service principal option

    3. [メンバーの選択] ウィンドウで、 [選択] をクリックします。

      Image showing the selection of the Managed identity option

  6. 次に、 [メンバー] タブに戻り、 [次へ] を選択します。

    Image showing the selection of the Next button on the Members page

  7. [Review + assign]\(確認と割り当て\) ページで、設定を確認してから [Review + assign]\(確認と割り当て\) を選択します。

表に示されている他のロールへの ID の追加の手順も同様です。

Azure CLI の使用

このセクションの例では、Azure CLI を使用して ID を Azure ロールに追加する方法を説明します。 サンプル コマンドは、Event Grid カスタム トピックのものです。 Event Grid ドメインのコマンドも同様です。

カスタム トピックのシステム ID のプリンシパル ID を取得する

最初に、カスタム トピックのシステム マネージド ID のプリンシパル ID を取得して、その ID を適切なロールに割り当てます。

topic_pid=$(az ad sp list --display-name "$<TOPIC NAME>" --query [].objectId -o tsv)

様々なスコープでイベント ハブへのロールの割り当てを作成する

次の CLI の例は、カスタム トピックの ID を、名前空間レベルまたはイベント ハブ レベルで Azure Event Hubs データ送信者ロールに追加する方法を示しています。 名前空間レベルでロールの割り当てを作成すると、カスタム トピックによりイベントをその名前空間のすべてのイベント ハブに転送できるようになります。 ロールの割り当てをイベント ハブ レベルで作成すると、カスタム トピックによりイベントをその特定のイベント ハブにのみ転送できるようになります。

role="Azure Event Hubs Data Sender" 
namespaceresourceid=$(az eventhubs namespace show -n $<EVENT HUBS NAMESPACE NAME> -g <RESOURCE GROUP of EVENT HUB> --query "{I:id}" -o tsv) 
eventhubresourceid=$(az eventhubs eventhub show -n <EVENT HUB NAME> --namespace-name <EVENT HUBS NAMESPACE NAME> -g <RESOURCE GROUP of EVENT HUB> --query "{I:id}" -o tsv) 

# create role assignment for the whole namespace 
az role assignment create --role "$role" --assignee "$topic_pid" --scope "$namespaceresourceid" 

# create role assignment scoped to just one event hub inside the namespace 
az role assignment create --role "$role" --assignee "$topic_pid" --scope "$eventhubresourceid" 

様々なスコープで Service Bus トピックへのロールの割り当てを作成する

次の CLI の例は、Event Grid カスタム トピックの ID を、名前空間レベルまたは Service Bus トピック レベルで Azure Service Bus データ送信者ロールに追加する方法を示しています。 名前空間レベルでロールの割り当てを作成すると、Event Grid トピックによりイベントをその名前空間内のすべてのエンティティ (Service Bus キューまたはトピック) に転送できるようになります。 ロールの割り当てを Service Bus キューまたはトピックのレベルで作成すると、Event Grid カスタム トピックにより、その特定の Service Bus のキューまたはトピックにのみイベントを転送できるようになります。

role="Azure Service Bus Data Sender" 
namespaceresourceid=$(az servicebus namespace show -n $RG\SB -g "$RG" --query "{I:id}" -o tsv 
sbustopicresourceid=$(az servicebus topic show -n topic1 --namespace-name $RG\SB -g "$RG" --query "{I:id}" -o tsv) 

# create role assignment for the whole namespace 
az role assignment create --role "$role" --assignee "$topic_pid" --scope "$namespaceresourceid" 

# create role assignment scoped to just one hub inside the namespace 
az role assignment create --role "$role" --assignee "$topic_pid" --scope "$sbustopicresourceid" 

次の手順

システムによって割り当てられた ID をシステム トピック、カスタム トピック、またはドメインに割り当て、配信先の適切なロールに ID を追加しました。ID を使用した配信先へのイベント配信については、「マネージド ID を使用してイベントを配信する」を参照してください。