Azure Data Explorer でMicrosoft Entra アプリケーションの登録を作成する
Microsoft Entraアプリケーション認証は、ユーザーが存在せずに Azure Data Explorerにアクセスする必要がある無人サービスやスケジュールされたフローなどのアプリケーションに使用されます。 Web アプリなどのアプリケーションを使用して Azure Data Explorer データベースに接続している場合は、サービス プリンシパル認証を使用して認証を行う必要があります。 この記事では、Microsoft Entra サービス プリンシパルを作成して登録し、Azure Data Explorer データベースへのアクセスを承認する方法について詳しく説明します。
アプリケーション登録Microsoft Entra作成する
アプリケーション認証Microsoft Entra、アプリケーションを作成してMicrosoft Entra IDに登録する必要があります。 Microsoft Entra テナントでアプリケーション登録が作成されると、サービス プリンシパルが自動的に作成されます。
アプリの登録は、Azure portalで作成することも、Azure CLI を使用してプログラムで作成することもできます。 シナリオに合ったタブを選択します。
アプリを登録する
Azure portalにサインインし、[Microsoft Entra ID] ブレードを開きます。
アプリの登録に移動し、[新しい登録] を選択します。
アプリケーションに名前を付けます ("example-app" など)。
サポートされているアカウントを選択します。これにより、アプリケーションを使用できるユーザーを決定します。
[リダイレクト URI] で、作成するアプリケーションの種類で [Web] を選択します。 URI は省略可能であり、ここでは空白のままにします。
[登録] を選択します。
認証の設定
サービス プリンシパルで使用できる認証には、パスワードベースの認証 (アプリケーション シークレット) と証明書ベースの認証の 2 種類があります。 次のセクションでは、アプリケーションの資格情報にパスワードベースの認証を使用する方法について説明します。 または、X509 証明書を使用してアプリケーションを認証することもできます。 詳細については、「証明書ベースの認証Microsoft Entra構成する方法」を参照してください。
このセクションでは、 アプリケーション ID と キー値の値をコピーします。 これらの値をテキスト エディターなどのどこかに貼り付けて、 クライアント資格情報をデータベースに構成する手順で使用します。
[ 概要 ] ブレードを参照します。
アプリケーション (クライアント) ID とディレクトリ (テナント) ID をコピーします。
注意
サービス プリンシパルがデータベースにアクセスすることを承認するには、アプリケーション ID とテナント ID が必要です。
[ 証明書 & シークレット ] ブレードで、[ 新しいクライアント シークレット] を選択します。
説明と有効期限を入力します。
[追加] を選択します。
キー値をコピーします。
注意
このページから移動すると、キー値にアクセスできなくなります。
Microsoft Entra アプリケーションとサービス プリンシパルが作成されました。
アプリケーションの委任されたアクセス許可を構成する - 省略可能
アプリケーションが呼び出し元ユーザーの資格情報を使用してデータベースにアクセスする必要がある場合は、アプリケーションの委任されたアクセス許可を構成します。 たとえば、Web API を構築していて、API を 呼び出 しているユーザーの資格情報を使用して認証する場合です。
承認されたデータ リソースへのアクセスのみが必要な場合は、このセクションをスキップし、「 サービス プリンシパルにデータベースへのアクセスを許可する」に進むことができます。
アプリの登録の [API のアクセス許可] ブレードを参照します。
[アクセス許可の追加] を選択します。
[所属する組織で使用している API] を選択します。
[Azure Data Explorer] を検索して、選択します。
[ 委任されたアクセス許可] で、[ user_impersonation ] ボックスを選択します。
[アクセス許可の追加] を選択します.
サービス プリンシパルにデータベースへのアクセス権を付与する
アプリケーション登録が作成されたら、対応するサービス プリンシパルにデータベースへのアクセス権を付与する必要があります。 次の例では、ビューアーのアクセス権を付与します。 その他のロールについては、「 データベースのアクセス許可の管理」を参照してください。
前の手順でコピーしたアプリケーション ID とテナント ID の値を使用します。
クエリ エディターで次のコマンドを実行し、プレースホルダー値 ApplicationID と TenantID を実際の値に置き換えます。
.add database <DatabaseName> viewers ('aadapp=<ApplicationID>;<TenantID>') '<Notes>'
次に例を示します。
.add database Logs viewers ('aadapp=1234abcd-e5f6-g7h8-i9j0-1234kl5678mn;9876abcd-e5f6-g7h8-i9j0-1234kl5678mn') 'App Registration'
最後のパラメーターは、データベースに関連付けられているロールに対してクエリを実行するときに、メモとして表示される文字列です。
注意
アプリケーション登録を作成した後、参照できるようになるまで数分の遅延が発生する可能性があります。 アプリケーションが見つからないというエラーが表示された場合は、しばらくしてからやり直してください。
ロールの詳細については、「 ロールベースのアクセス制御」を参照してください。
アプリケーション資格情報を使用してデータベースにアクセスする
アプリケーションの資格情報を使用して、 クライアント ライブラリを使用してプログラムでデータベースにアクセスします。
. . .
string applicationClientId = "<myClientID>";
string applicationKey = "<myApplicationKey>";
string authority = "<myApplicationTenantID>";
. . .
var kcsb = new KustoConnectionStringBuilder($"https://{clusterName}.kusto.windows.net/{databaseName}")
.WithAadApplicationKeyAuthentication(
applicationClientId,
applicationKey,
authority);
var client = KustoClientFactory.CreateCslQueryProvider(kcsb);
var queryResult = client.ExecuteQuery($"{query}");
注意
先ほど作成したアプリケーション登録 (サービス プリンシパル) のアプリケーション ID とキーを指定します。
詳細については、「アプリで Microsoft Authentication Library (MSAL) で認証を行い、.NET Core Web アプリで Azure Key Vaultを使用する方法」を参照してください。
トラブルシューティング
無効なリソース エラー
アプリケーションを使用してユーザーまたはアプリケーションのアクセスを認証する場合は、サービス アプリケーションの委任されたアクセス許可を設定する必要があります。 アプリケーションがアクセスのためにユーザーまたはアプリケーションを認証できることを宣言します。 そうしないと、認証が試行されたときに、次のようなエラーが発生します。
AADSTS650057: Invalid resource. The client has requested access to a resource which is not listed in the requested permissions in the client's application registration...
手順に従って 、アプリケーションの委任されたアクセス許可を構成する必要があります。
ユーザーの同意の有効化に関するエラー
Microsoft Entraテナント管理者は、テナント ユーザーがアプリケーションに同意できないようにするポリシーを制定する場合があります。 この状況では、ユーザーがアプリケーションにサインインしようとすると、次のようなエラーが発生します。
AADSTS65001: The user or administrator has not consented to use the application with ID '<App ID>' named 'App Name'
テナント内のすべてのユーザーに同意を付与するか、特定のアプリケーションに対してユーザーの同意を有効にするには、Microsoft Entra管理者に連絡する必要があります。