次の方法で共有


Azure リソースのマネージド ID を使用して Azure SignalR リソースへの要求を承認する

Azure SignalR Service では、 Azure リソースのマネージド ID からの要求を承認するための Microsoft Entra ID がサポートされています。

この記事では、マネージド ID を使用してリソースへの要求を承認するようにリソースとコードを設定する方法について説明します。

マネージド ID の構成

最初の手順では、アプリまたは仮想マシンでマネージド ID を構成します。

Azure portal でロールの割り当てを追加する

次の手順では、SignalR App Server ロールを Azure SignalR Service リソースのサービス プリンシパルまたはマネージド ID に割り当てる方法について説明します。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

Note

管理グループ、サブスクリプション、リソース グループ、単一リソースなど、任意のスコープにロールを割り当てることができます。 スコープの詳細については、「Azure RBAC のスコープについて」を参照してください。

  1. Azure portal で、Azure SignalR Service リソースに移動します。

  2. 左のペインで アクセスの制御 (IAM) を選択します。

  3. [追加]>[ロール割り当ての追加] の順に選択します。

    [アクセス制御] のページと、ロールの割り当てを追加するための選択を示すスクリーンショット。

  4. [ロール] タブで、[SignalR App Server]\(SignalR アプリ サーバー\) を選択します。 その他の Azure SignalR Service 組み込みロールは、シナリオによって異なります。

    役割 説明 利用事例
    SignalR アプリ サーバー サーバー接続を作成し、キーを生成する API へのアクセス。 Azure SignalR リソースが既定モードで実行されているアプリ サーバーでよく使用されます。
    SignalR Service 所有者 REST API、サーバー接続を作成する API、キー/トークンを生成する API など、すべてのデータ プレーン API へのフル アクセス。 サーバーレス モードで実行されている Azure SignalR Service リソースを持つネゴシエーション サーバーに使用されます。 REST API のアクセス許可と認証 API のアクセス許可の両方が必要です。
    SignalR REST API 所有者 データプレーン REST API へのフル アクセス。 Azure SignalR Management SDK で接続とグループを管理するために使用されますが、サーバー接続やネゴシエーション要求の処理は行われません
    SignalR REST API リーダー データプレーン REST API への読み取り専用アクセス。 読み取り専用 REST API を呼び出す監視ツールを作成するときに使用されます。
  5. [次へ] を選択します。

  6. Microsoft Entra アプリケーションの場合:

    1. [ アクセス権の割り当て ] 行で、[ ユーザー、グループ、またはサービス プリンシパル] を選択します。
    2. [ メンバー ] 行で、[ メンバーの選択] を選択し、ポップアップ ウィンドウで ID を選択します。
  7. Azure リソースのマネージド ID の場合:

    1. [ アクセスの割り当て] 行で 、[ マネージド ID] を選択します。
    2. [ メンバー ] 行で、[ メンバーの選択] を選択し、ポップアップ ウィンドウでアプリケーションを選択します。
  8. [次へ] を選択します。

  9. 割り当てを確認し、次に [ 確認と割り当て ] を選択してロールの割り当てを確定します。

重要

新しく追加されたロールの割り当ては、反映されるまでに最大 30 分かかる場合があります。

Azure ロールを割り当てて管理する方法の詳細については、以下を参照してください。

C 用に Microsoft.Azure.SignalR アプリ サーバー SDK を構成する#

C# 用 Azure SignalR サーバー SDK

Azure SignalR サーバー SDK は、 Azure.Identity ライブラリ を利用して、リソースに接続するためのトークンを生成します。 クリックして詳細な使用状況を確認します。

システム割り当て ID を使用する

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        new ServiceEndpoint(new Uri("https://<resource-name>.service.signalr.net"), new ManagedIdentityCredential()),
    };
});

ユーザー割り当て ID を使う

重要

オブジェクト (プリンシパル) ID ではなくクライアント ID を使用する

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        var clientId = "<your-user-assigned-identity-client-id>";
        new ServiceEndpoint(new Uri("https://<resource-name>.service.signalr.net"), new ManagedIdentityCredential(clientId)),
    };
});

その他のサンプルについては、このサンプル リンクを参照してください。

複数のエンドポイントを使用する

資格情報は、エンドポイントごとに異なる場合があります。

このサンプルでは、Azure SignalR SDK はシステム割り当てマネージド ID を使用して resource1 に接続し、ユーザー割り当てマネージド ID を使用して resource2 に接続します。

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        var clientId = "<your-user-assigned-identity-client-id>";
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential()),
        new ServiceEndpoint(new Uri("https://<resource2>.service.signalr.net"), new ManagedIdentityCredential(clientId)),
    };
});

Azure Functions における Azure SignalR Service のバインド

Azure Functions の Azure SignalR Service バインドでは、ポータルでアプリケーション設定を使用するか、ローカルで local.settings.json を使用して、Azure SignalR Service リソースにアクセスするようにマネージド ID を構成します。

ID を構成するには、キーと値のペアのグループが必要な場合があります。 すべてのキーと値のペアのキーは、接続名プレフィックス (既定値は AzureSignalRConnectionString) と区切り記号で始まる必要があります。 区切り記号は、ポータルではアンダースコア (__)、ローカルではコロン (:) です。 プレフィックスは、binding プロパティ ConnectionStringSetting を使用してカスタマイズできます。

システム割り当て ID を使用する

サービス URI のみを構成する場合は、DefaultAzureCredential クラスを使用します。 このクラスは、Azure とローカルの開発環境で同じ構成を共有する場合に便利です。 その仕組みについては、「DefaultAzureCredential」を参照してください。

Azure portal で、次の例を使用して DefaultAzureCredential を構成します。 これらの環境変数を構成しない場合は、システム割り当て ID が認証に使用されます。

<CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net

DefaultAzureCredential ファイル内の の構成サンプルを次に示します。 ローカル スコープでは、マネージド ID はありません。 Visual Studio、Azure CLI、Azure PowerShell アカウントを使用した認証が順番に試行されます。

{
  "Values": {
    "<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net"
  }
}

システム割り当て ID を個別に使用し、他の環境変数の影響を受けずに使用する場合は、接続名プレフィックスを持つ credential キーを managedidentity に設定します。 アプリケーション設定のサンプルを次に示します。

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity

ユーザー割り当て ID を使用する

ユーザー割り当て ID を使用する場合は、接続名プレフィックスを含め、clientId キーと serviceUri キーに加えて credential を割り当てる必要があります。 アプリケーション設定のサンプルを次に示します。

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
<CONNECTION_NAME_PREFIX>__clientId = <CLIENT_ID>

次のステップ

次の関連記事を参照してください。