Microsoft Entra ID を使用した認証と認可

この記事では、Microsoft Entra ID を使用して Azure Event Grid の発行クライアントを認証する方法について説明します。

概要

Microsoft ID プラットフォームは、Microsoft Entra ID を ID プロバイダーとして使用するリソースとアプリケーションに対して、統合された認証とアクセス制御の管理を提供します。 Microsoft ID プラットフォームを使用して、アプリケーションでの認証と認可のサポートを提供します。 これは OAuth 2.0 や OpenID Connect などのオープン スタンダードに基づいており、多くの認証シナリオをサポートするツールやオープンソースのライブラリを提供しています。 また、多要素認証を必要としたり、特定の場所からのアクセスを許可するなどのポリシーを設定できる条件付きアクセスなどの高度な機能も備えています。

Microsoft Entra ID を使用することで向上するセキュリティ体制上の利点は、認証キーなどの資格情報をコードやリポジトリに格納する必要がないことです。 代わりに、保護されたリソースへの認証時にアプリケーションから提示される Microsoft ID プラットフォームから取得する OAuth 2.0 アクセス トークンに依存します。 イベント発行アプリケーションを Microsoft Entra ID に登録して、自分で管理および使用しているアプリに関連付けられたサービス プリンシパルを取得できます。 代わりに、システム割り当てまたはユーザー割り当てのマネージド ID を使用すると、ID ライフサイクルの一部がユーザーに代わって管理されるため、さらにシンプルな ID 管理モデルになります。

ロールベースのアクセス制御 (RBAC) を使用すると、特定のセキュリティ プリンシパル (ユーザー、グループ、またはアプリの ID) が Azure リソース上で操作を実行するための特定の権限を持つように、権限を設定することができます。 この方法では、Event Grid にイベントを送信するクライアント アプリケーションが使用するセキュリティ プリンシパルには、RBAC ロール EventGrid データ送信者が関連付けられている必要があります。

セキュリティ プリンシパル

Event Grid の発行クライアントの認証には、大きく分けて 2 つのカテゴリのセキュリティ プリンシパルがあります。

  • マネージド ID。 マネージド ID には、Azure リソース上で有効にしてそのリソースのみに関連付けられるシステム割り当てと、明示的に作成して名前を付けるユーザー割り当てがあります。 ユーザー割り当てマネージド ID は、複数のリソースに関連付けることが可能です。
  • アプリケーション セキュリティ プリンシパル。 セキュリティ プリンシパルの一種で、Microsoft Entra ID によって保護されているリソースにアクセスするアプリケーションを表します。

使用されるセキュリティ プリンシパル、マネージド ID、またはアプリケーション セキュリティ プリンシパルに関わらず、クライアントはその ID を使用して Microsoft Entra ID の前に認証を行い、Event Grid にイベントを送信するときに要求と一緒に送信される OAuth 2.0 アクセス トークンを取得します。 このトークンは暗号で署名され、Event Grid で受け取られた後、トークンが検証されます。 例えば、対象ユーザー (トークンの意図する受信者) が Event Grid (https://eventgrid.azure.net) であることなどが確認されます。 トークンには、クライアント ID に関する情報が含まれます。 Event Grid はその ID を受け取り、クライアントに EventGrid データ送信者というロールが割り当てられているか検証します。 より正確には、Event Grid は、イベント発行要求の完了を許可する前に、ID に関連付けられた RBAC ロールで Microsoft.EventGrid/events/send/action のアクセス許可を持っていることを検証します。

Event Grid SDK を使用している場合、アクセス トークンの取得をどのように実装するか、また Event Grid へのすべての要求にそれをどのように含めるかといった詳細については、Event Grid データプレーン SDK が行うため、ユーザーがこれについて心配する必要はありません。

Microsoft Entra 認証を使用するためのクライアント構成手順

トピック、ドメイン、またはパートナーの名前空間にイベントを送信する際に Microsoft Entra 認証を使用するようクライアントを構成するには、次の手順を実行します。

  1. 認証に使用するセキュリティ プリンシパルを作成または使用します。 マネージド ID またはアプリケーション サービス プリンシパルを使用することができます。
  2. EventGrid データ送信者ロールをセキュリティ プリンシパルに割り当て、セキュリティ プリンシパルにアクセス許可を付与してイベントを発行します。
  3. Event Grid SDK を使用して、Event Grid にイベントを発行します。

マネージド ID を使用して認証する

マネージド ID は、Azure リソースに関連付けられている ID です。 マネージド ID は、Microsoft Entra 認証をサポートしている Azure リソースの使用時にアプリケーションが使用する ID を提供します。 アプリケーションでは、仮想マシンや Azure App サービスなどのホスティング リソースのマネージド ID を使用して、Event Grid にイベントを発行する際に要求とともに提示される Microsoft Entra トークンを取得することができます。 アプリケーションが接続されると、Event Grid によってマネージド エンティティのコンテキストがクライアントにバインドされます。 マネージド ID に関連付けられると、Event Grid の発行クライアントは承認済みのすべての操作を実行できます。 承認は、マネージド エンティティを Event Grid RBAC ロールに関連付けることで付与されます。

マネージド ID により、Microsoft Entra ID で自動的に管理される ID が Azure サービスに提供されます。 他の認証方法とは異なり、ID 自体やアクセスする必要があるリソースに対して、アクセス キーや Shared Access Signatures (SAS) をアプリケーション コードや構成に格納して保護する必要はありません。

マネージド ID を使用してイベント発行クライアントを認証するには、まず、クライアント アプリケーションのホスティング Azure サービスを決定してから、その Azure サービス インスタンスでシステム割り当てまたはユーザー割り当てマネージド ID を有効にしてください。 例えば、VMAzure App Service、または Azure Functions でマネージド ID を有効にすることができます。

ホスティング サービスでマネージド ID を構成したら、その ID にイベントを発行するアクセス許可を割り当てます。

クライアント アプリケーションのセキュリティ プリンシパルを使用して認証する

マネージド ID の他にも、別の ID オプションとして、クライアント アプリケーションのセキュリティ プリンシパルを作成することもできます。 その目的で、お使いのアプリケーションを Microsoft Entra ID に登録する必要があります。 アプリケーションを登録することは、ID とアクセス管理の制御を Microsoft Entra ID に委任するという意思表示です。 「アプリケーションを登録する」セクションと「クライアント シークレットの追加」セクションの手順に従います。 開始前に前提条件を確認するようにしてください。

アプリケーション セキュリティ プリンシパルを作成し、上記の手順に従ったら、その ID にイベントを発行するアクセス許可を割り当てます

注意

ポータルでアプリケーションを登録すると、ホーム テナントにアプリケーション オブジェクトサービス プリンシパルが自動的に作成されます。 または、Microsoft Graph を使用アプリケーションを登録することもできます。 ただし、Microsoft Graph API を使用してアプリケーションを登録または作成する場合、サービス プリンシパル オブジェクトの作成は別の手順で行います。

セキュリティ プリンシパルにアクセス許可を割り当ててイベントを発行する

イベントを Event Grid に発行するために使用する ID には、イベントを Event Grid に送信することを許可する Microsoft.EventGrid/events/send/action アクセス許可が付与されている必要があります。 このアクセス許可は、組み込みの RBAC ロール Event Grid データ送信者に含まれています。 このロールは、セキュリティ プリンシパル、特定のスコープ (管理グループ、Azure サブスクリプション、リソース グループ、または特定の Event Grid トピックなど)、ドメイン、またはパートナー名前空間に割り当てることができます。 Azure ロールの割り当てに関するページの手順に従って EventGrid データ送信者ロールをセキュリティ プリンシパルに割り当て、そのセキュリティ プリンシパルを使用するアプリケーションにイベントを送信するためのアクセスを許可します。 または、Microsoft.EventGrid/events/send/action アクセス許可を含むカスタム ロールを定義し、そのカスタム ロールをセキュリティ プリンシパルに割り当てることもできます。

RBAC のアクセス許可の準備ができたので、これでイベントを Event Grid に送信するクライアント アプリケーションを構築することができるようになりました。

注意

Event Grid では、イベントの送信だけでなく、様々な RBAC ロールがサポートされています。 詳細については、Event Grid の組み込みロールに関するページを参照してください。

Event Grid のクライアント SDK を使用してイベントを発行する

Event Grid データ プレーン SDK を使用して、Event Grid にイベントを発行します。 Event Grid SDK では、Microsoft Entra 認証を含むすべての認証方法がサポートされています。

.NET SDK を使用して Event Grid にイベントを発行するサンプル コードを以下に示します。 トピック エンドポイントの情報は、Azure portal で、Event Grid トピックの [概要] ページから取得できます。 これは、https://<TOPIC-NAME>.<REGION>-1.eventgrid.azure.net/api/events という形式になっています。

ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredential();
EventGridPublisherClient client = new EventGridPublisherClient( new Uri("<TOPIC ENDPOINT>"), managedIdentityCredential);


EventGridEvent egEvent = new EventGridEvent(
        "ExampleEventSubject",
        "Example.EventType",
        "1.0",
        "This is the event data");

// Send the event
await client.SendEventAsync(egEvent);

前提条件

Event Grid に対する認証を行うための前提条件は以下の通りです。

Microsoft Entra 認証を使用してイベントを発行する

イベントをトピック、ドメイン、またはパートナー名前空間に送信するには、次のようにクライアントを構築します。 Microsoft Entra 認証のサポートが初めて提供された API のバージョンは 2018-01-01 です。 アプリケーションでは、その API バージョン、またはより新しいバージョンを使用します。

サンプル:

この C# スニペットでは、クライアント シークレットを持つアプリケーション (サービス プリンシパル) を使用して Event Grid パブリッシャー クライアントを作成します。DefaultAzureCredential メソッドを有効にするには Azure.Identity ライブラリを追加する必要があります。 公式 SDK を使用している場合は、SDK によってバージョンが処理されます。

Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", "");
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", "");
Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", "");

EventGridPublisherClient client = new EventGridPublisherClient(new Uri("your-event-grid-topic-domain-or-partner-namespace-endpoint"), new DefaultAzureCredential());

詳細については、次の記事を参照してください。

キーと Shared Access Signature 認証の無効化

Microsoft Entra 認証は、アクセス キーや Shared Access Signature (SAS) トークン認証よりも優れた認証サポートを提供します。 Microsoft Entra 認証では、ID は Microsoft Entra ID プロバイダーに対して検証されます。 Microsoft Entra 認証を使用する場合、開発者がコード内のキーを処理する必要はありません。 Microsoft ID プラットフォームに組み込みのすべてのセキュリティ機能 (条件付きアクセスなど) の恩恵を受けることもでき、アプリケーションのセキュリティ スタンスを向上させることができます。

Microsoft Entra 認証を使用すると決定したら、アクセス キーや SAS トークンに基づく認証を無効にできます。

Note

アクセス キーまたは SAS トークン認証は、ローカル認証の一種です。 Microsoft Entra ID に依存しないこのような種類の認証メカニズムについて話をする際に、"ローカル認証" という言葉を耳にすることがあります。 ローカル認証を無効にするための API パラメーターは、適切には disableLocalAuth と呼ばれています。

Azure portal

新しいトピックを作成するときに、[トピックの作成] ページの [詳細設定] タブでローカル認証を無効にできます。

Screenshot showing the Advanced tab of Create Topic page when you can disable local authentication.

既存のトピックの場合は、次の手順に従ってローカル認証を無効にします:

  1. トピックのEvent Grid トピックページに移動し、[ローカル認証] で [有効] を選択します

    Screenshot showing the Overview page of an existing topic.

  2. [ローカル認証] ポップアップウィンドウで、[無効] を選択し、[OK]を選択します。

    Screenshot showing the Local Authentication window.

Azure CLI

次の CLI コマンドは、ローカル認証が無効になっているカスタム トピックを作成する方法を示しています。 ローカル認証の無効化機能は現在プレビューとして使用でき、これには API バージョン 2021-06-01-preview を使用する必要があります。

az resource create --subscription <subscriptionId> --resource-group <resourceGroup> --resource-type Microsoft.EventGrid/topics --api-version 2021-06-01-preview --name <topicName> --location <location> --properties "{ \"disableLocalAuth\": true}"

参考までに、作成または更新するトピックに応じて使用できるリソースの種類の値を以下に示します。

トピックの種類 リソースの種類
ドメイン Microsoft.EventGrid/domains
パートナー名前空間 Microsoft.EventGrid/partnerNamespaces
カスタム トピック Microsoft.EventGrid/topics

Azure PowerShell

PowerShell を使用している場合は、次のコマンドレットを使用して、ローカル認証を無効にしたカスタム トピックを作成します。


Set-AzContext -SubscriptionId <SubscriptionId>

New-AzResource -ResourceGroupName <ResourceGroupName> -ResourceType Microsoft.EventGrid/topics -ApiVersion 2021-06-01-preview -ResourceName <TopicName> -Location <Location> -Properties @{disableLocalAuth=$true}

注意

リソース