この記事では、App Services の組み込み認証機能 ("Easy Auth" とも呼ばれます) を使用して、Azure 関数アプリへのインデクサー接続を設定する方法について説明します。 Azure 関数アプリは、インデクサーの実行中に取り込まれたコンテンツを Azure AI 検索サービスがエンリッチするためや、垂直統合にカスタム埋め込みモデルを使用している場合に検索クエリ内のコンテンツをベクター化するために使用できる、カスタム Web API をホストするための優れたソリューションです。
Search Service のシステム割り当てまたはユーザー割り当て ID を使用して、Azure 関数アプリに対する認証を行うことができます。 この方法では、この記事で説明するように、Azure 関数アプリの認証プロバイダーとして使用する Microsoft Entra ID アプリケーション登録を設定する必要があります。
前提条件
- 検索サービス用のマネージド ID を作成します。
認証プロバイダーとして使用するように Microsoft Entra ID アプリケーションを構成する
Azure 関数アプリの認証プロバイダーとして Microsoft Entra ID を使用するには、アプリケーション登録を作成する必要があります。 これを行うには 2 つのオプションがあります。Azure 関数アプリ自体を使用して自動的に作成するか、既に作成された既存のアプリケーションを使用します。 これらの手順の詳細については、Azure App Services のドキュメントに従ってください。
どちらのオプションであっても、Azure AI 検索との互換性が確保されるように、次の手順に従ってアプリの登録が構成されていることを確認します。
アプリの登録にアプリケーション ID URI が構成されていることを確認する
アプリの登録は、Azure 関数アプリと Azure AI 検索でトークン対象ユーザーとして使用できる、アプリケーション ID URI を使用して構成する必要があります。
api://<applicationId>
形式で構成します。 これを行うには、アプリの登録の [概要] セクションに移動し、[アプリケーション ID URI] フィールドを設定します。
認証でサポートされているアカウントの種類を設定する
アプリの登録の [認証] セクションに移動し、サポートされているアカウントの種類を構成し、アプリの登録と同じ組織ディレクトリ内のアカウントのみがこれを認証に使用できるようにします。
(省略可能) クライアント シークレットを構成する
App Services では、認証プロバイダー アプリケーションにクライアント シークレットを使用することをお勧めします。 委任されたアクセス許可が設定されている限り、認証はクライアント シークレットなしでも機能します。 クライアント シークレットを設定するには、アプリの登録の [証明書とシークレット] セクションに移動し、この記事で説明されているように新しいクライアント シークレットを追加します。
アクセス許可を委任するスコープを追加する
[API の公開] セクションに移動し、アプリの登録を構成して、管理者とユーザーのアクセス許可を委任するスコープを設定して、インデクサーの認証フローとの互換性を確保します。
委任されたアクセス許可スコープが設定されると、アプリの登録の [API アクセス許可] セクションで、Microsoft.Graph の User.Read API が設定されていることがわかります。
Azure 関数アプリで Microsoft Entra ID 認証プロバイダーを構成する
上記の正確な仕様に登録されているクライアント アプリケーションでは、App Services のガイドに従って、Azure 関数アプリの Microsoft Entra ID 認証を設定できます。 Azure 関数アプリの [認証] セクションに移動して、認証の詳細を設定します。
Azure AI 検索が Azure 関数アプリに対して正常に認証できるように、次の設定が構成されていることを確認します。
認証設定を構成する
- [App Service 認証] を確実に [有効済み] にします
- Azure 関数アプリへのアクセスを [認証が必要] に制限します
- [認証されていない要求] では、[HTTP 401: 認可されていない] を優先します
次のスクリーンショットでは、サンプルの Azure 関数アプリに対するこれらの特定の設定が強調表示されています。
Microsoft Entra ID 認証プロバイダーを追加する
- Azure 関数アプリの認証プロバイダーとして Microsoft Entra ID を追加します。
- 新しいアプリの登録を作成するか、以前に構成したアプリの登録を選択します。 このドキュメントの前のセクションのガイドラインに従って構成されていることを確認します。
-
[許可されるトークン対象ユーザー] セクションで、アプリの登録のアプリケーション ID URI が指定されていることを確認します。
api://<applicationId>
形式で、前に作成したアプリの登録で構成されたものと一致する必要があります。 - 必要に応じて、特にインデクサーに対するアクセスを制限する追加のチェックを構成できます。
追加のチェックを構成する
- [特定の ID からの要求を許可する] オプションをオンにし、[ID] セクションに [オブジェクト (プリンシパル) ID] を入力して、特定の Azure AI 検索サービスの ID の[オブジェクト (プリンシパル) ID] が [ID の要件] として指定されていることを確認します。
- [クライアント アプリケーションの要件] で、[特定のクライアント アプリケーションからの要求を許可する] オプションを選択します。 Azure AI 検索サービスの ID のクライアント ID を検索する必要があります。 これを行うには、前の手順の [オブジェクト (プリンシパル) ID] をコピーし、Microsoft Entra ID テナントで検索します。 クライアント アプリケーションの要件として指定する必要がある GUID である [アプリケーション ID] が概要ページに一覧表示されている、一致するエンタープライズ アプリケーションが存在する必要があります。
Note
この手順は Azure 関数アプリで最も重要な構成であり、誤って実行すると、インデクサーが Azure 関数アプリへのアクセスを禁止される可能性があります。 ID のエンタープライズ アプリケーションの詳細の検索を正しく実行したことを確認し、適切な場所で [アプリケーション ID] と [オブジェクト (プリンシパル) ID] を指定してください。
- [テナントの要件] には、セキュリティ態勢に合ったオプションのいずれかを選択します。 詳細については、Azure App Service のドキュメントを参照してください。
Azure 関数アプリへの接続の設定
Azure 関数アプリへの接続をカスタム Web API スキルとカスタム Web API ベクターライザーのどちらで行う必要があるかによって、JSON 定義は若干異なります。 どちらの場合も、Azure 関数アプリに対して正しい URI を指定し、authResourceId
を、認証プロバイダー用に構成された [許可されたトークン対象ユーザー] と同じ値に設定します。
システム割り当て ID またはユーザー割り当て ID のどちらを使用して接続するかによって、必要な詳細が若干異なります。
システム割り当て ID を使用する
Search Service のシステム割り当て ID で "Easy Auth" による認証が許可される、サンプル Azure 関数アプリの test
という名前の関数を呼び出す例を次に示します。
"uri": "https://contoso-function-app.azurewebsites.net/api/test?",
"authResourceId": "api://00000000-0000-0000-0000-000000000000"
ユーザー割り当て ID を使用する
特定のユーザー割り当て ID で "Easy Auth" による認証が許可される、同じ関数を呼び出す例を次に示します。 構成の identity
プロパティで使用する正確なユーザー割り当て ID のリソース ID を指定する必要があります。
"uri": "https://contoso-function-app.azurewebsites.net/api/test?",
"authResourceId": "api://00000000-0000-0000-0000-000000000000",
"identity" : {
"@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
"userAssignedIdentity": "/subscriptions/[subscription-id]/resourcegroups/[rg-name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[my-user-managed-identity-name]"
}
Note
このユーザー割り当て ID は、カスタム Web スキル/ベクターライザー定義で指定するために、Azure AI 検索サービスに実際に割り当てる必要があります。
インデクサー/ベクターライザーを実行してアクセス許可を確認する
カスタム Web API スキルの場合、インデクサーの実行時にアクセス許可が検証されます。 ベクターライザーの場合、カスタム Web API ベクターライザーを使用してベクター クエリが発行されたときに検証されます。 認証に関する特定の問題を除外するには、Azure 関数アプリで認証プロバイダーを無効にし、インデクサー/ベクターライザーからの呼び出しが確実に成功するようにすることでテストできます。
- 認証の問題が解決しない場合は、適切な ID 情報 (Azure AI 検索サービスの ID のアプリケーション ID、オブジェクト (プリンシパル) ID) が Azure 関数アプリの認証プロバイダーで指定されていることを確認します。