Azure SignalR Service の Microsoft Entra ID を使ってアクセスを承認する

Azure SignalR Service では、そのリソースへの要求を承認するための Microsoft Entra ID がサポートされています。 Microsoft Entra ID を使用することで、ロールベースのアクセス制御 (RBAC) を使用してセキュリティ プリンシパルにアクセス許可を付与することができます。 セキュリティ プリンシパルは、ユーザーやリソース グループ、アプリケーション、またはシステム割り当て ID やユーザー割り当て ID などのサービス プリンシパルです。

Microsoft Entra ID では、セキュリティ プリンシパルを認証して OAuth 2.0 トークンを返します。 そのトークンを、Azure SignalR Service リソースに対する要求を承認するために使用します。

Microsoft Entra ID を使用した Azure SignalR Service に対する要求の認可は、アクセスキー認可と比較して優れたセキュリティと使いやすさを実現します。 可能な限り、Microsoft Entra ID を使用して認可することを強くお勧めします。それは、必要最小限の権限で確実にアクセスできるためです。

重要

ローカル認証を無効にすると、次のような影響があります。

  • 現在のアクセス キーのセットが完全に削除される。
  • 現在のアクセス キーのセットで署名されたトークンが利用できなくなる。

Microsoft Entra ID の概要

セキュリティ プリンシパルによって Azure SignalR Service リソースへのアクセスが試みられたら、その要求を承認する必要があります。 Microsoft Entra ID を使用してリソースにアクセスするには、次の 2 つの手順が必要です。

  1. Microsoft Entra ID では、セキュリティ プリンシパルを認証して OAuth 2.0 トークンを返します。
  2. 要求を認可するための Azure SignalR Service リソースへの要求の一部としてトークンを渡します。

Microsoft Entra ID を使用したクライアント側の認証

アクセス キーを使用すると、このキーはアプリ サーバー (または Function App) と Azure SignalR Service リソースの間で共有されます。 Azure SignalR Service では、共有キーを使用してクライアント接続要求を認証します。

Microsoft Entra ID を使用する場合、共有キーはありません。 代わりに、Azure SignalR Service は、クライアント接続で使用されるトークンの署名に一時アクセス キーを使用します。 ワークフローは、次の 4 つの手順で構成されています。

  1. セキュリティ プリンシパルが自身を認証するために Microsoft Entra ID に対して OAuth 2.0 トークンを要求します。
  2. セキュリティ プリンシパルにより SignalR 認証 API が呼び出され、一時アクセス キーが取得されます。
  3. セキュリティ プリンシパルにより、ネゴシエーション時のクライアント接続に使用する一時アクセス キーでクライアント トークンの署名が実行されます。
  4. クライアント トークンを使用して、クライアントが Azure SignalR Service リソースに接続します。

一時アクセス キーの有効期限は 90 分です。 1 時間に 1 回は新しいものを取得して古いものをローテーションすることをお勧めします。

ワークフローは、アプリ サーバー用の Azure SignalR Service SDK に組み込まれています。

アクセス権の Azure ロールを割り当てる

Microsoft Entra ID では、Azure RBAC を使用して、セキュリティで保護されたリソースへのアクセス権を認可します。 Azure SignalR Service では、Azure SignalR Service リソースへのアクセス用の一般的なアクセス許可セットを含む一連の Azure 組み込みロールが定義されます。 Azure SignalR Service リソースにアクセスするためのカスタム ロールを定義することもできます。

リソースのスコープ

セキュリティ プリンシパルに Azure RBAC ロールを割り当てる前に、セキュリティ プリンシパルに必要なアクセスのスコープを決定しなければならない場合があります。 できるだけ狭いスコープのみを付与することをお勧めします。 より広い範囲で定義されている Azure RBAC ロールは、その下のリソースによって継承されます。

Azure SignalR Service リソースへのアクセスのスコープは、次のレベルで指定できます (最も狭いスコープから順に示します)。

スコープ 説明
個々のリソース ターゲット リソースにのみ適用されます。
リソース グループ リソース グループ内のすべてのリソースに適用されます。
サブスクリプション サブスクリプションのすべてのリソースに適用されます。
管理グループ 管理グループに含まれるサブスクリプション内のすべてのリソースに適用されます。

Azure SignalR Service リソース用の Azure 組み込みロール

Role 説明 使用例
SignalR アプリ サーバー WebSocket 接続作成 API と認証 API へのアクセス。 アプリ サーバーにもっとも一般的に使用されます。
SignalR Service 所有者 REST API、WebSocket 接続作成 API、認証 API を含む、すべてのデータプレーン API へのフル アクセス。 サーバーレス モードで、REST API のアクセス許可と認証 API のアクセス許可の両方が必要になるため、Microsoft Entra ID による認証をサポートするために使用します。
SignalR REST API 所有者 データプレーン REST API へのフル アクセス。 接続を行ったり認証 API を呼び出したり "せずに"、接続やグループを管理するツールを作成する場合によく使用されます。
SignalR REST API 閲覧者 データプレーン REST API への読み取り専用アクセス。 一般的に、Azure SignalR Service データプレーンの読み取り専用 REST API のみを呼び出す監視ツールを記述する場合に使用されます。

次のステップ