注意
Azure AI 検索は、Azure ポータル、REST API、およびAzure SDKから使用できます。 また、Foundry IQ は、エンタープライズ コンテンツを、Microsoft Foundry ポータルのエージェントの再利用可能なアクセス許可に対応したナレッジ ベースに変換するマネージド ナレッジ レイヤーです。
この記事では、Azure App Service の組み込み認証機能 ("Easy Auth" とも呼ばれます) を使用して、Azure 関数アプリへのインデクサー接続を設定する方法について説明します。Azure 関数アプリは、インデクサーの実行中に取り込まれたコンテンツを強化するために Azure AI 検索 サービスが使用できるカスタム Web API をホストするための優れたソリューションです。また、 統合ベクター化にカスタム埋め込みモデルを使用している場合は、検索クエリでコンテンツをベクター化します。
検索サービスのシステム割り当てマネージド ID またはユーザー割り当てマネージド ID を使用して、Azure 関数アプリに対する認証を行うことができます。 この方法では、Azure 関数アプリの認証プロバイダーとして使用する Microsoft Entra ID アプリケーション登録を設定する必要があります。これについては、この記事で説明します。
前提条件
- 検索サービス用のマネージド アイデンティティ。
認証プロバイダーとして Microsoft Entra ID アプリケーションを構成する
Azure 関数アプリの認証プロバイダーとして Microsoft Entra ID を使用するには、アプリケーション登録を作成する必要があります。 2 つのオプションがあります。Azure 関数アプリ自体を使用して 1 つを自動的に作成するか、既存のアプリケーションを使用します。 これらの手順の詳細については、 App Service のドキュメントを参照してください。
オプションに関係なく、次の手順に従ってアプリの登録が構成されていることを確認し、Azure AI 検索 と互換性があることを確認します。
アプリの登録にアプリケーション ID URI が構成されていることを確認する
アプリの登録は、アプリケーション ID URI を使用して構成する必要があります。これは、Azure 関数アプリと Azure AI 検索 のトークン対象ユーザーとして使用できます。
api://<applicationId> 形式で構成します。 これを行うには、アプリの登録の [概要] セクションに移動し、[アプリケーション ID URI] フィールドを設定します。
認証でサポートされているアカウントの種類を設定する
アプリ登録の [認証 ] セクションに移動し、アプリ登録と同じ組織ディレクトリ内のアカウントのみが認証に使用できるように 、サポートされている アカウントの種類を構成します。
(省略可能) クライアント シークレットを構成する
App Service では、認証プロバイダー アプリケーションにクライアント シークレットを使用することをお勧めします。 委任されたアクセス許可が設定されている限り、認証はクライアント シークレットなしでも機能します。 クライアント シークレットを設定するには、アプリの登録の [証明書とシークレット] セクションに移動し、この記事で説明されているように新しいクライアント シークレットを追加します。
アクセス許可を委任するスコープを追加する
[API の公開] セクションに移動し、アプリの登録を構成して、管理者とユーザーのアクセス許可を委任するスコープを設定して、インデクサーの認証フローとの互換性を確保します。
委任されたアクセス許可スコープが設定されると、アプリの登録の [API アクセス許可] セクションで、Microsoft.Graph の User.Read API が設定されていることがわかります。
Azure 関数アプリで Microsoft Entra ID 認証プロバイダーを構成する
前の仕様に登録されているクライアント アプリケーションでは、 App Service のドキュメントに従って、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] をコピーし、Microsoft Entra ID テナントで検索します。 クライアント アプリケーションの要件として指定する必要がある GUID である [アプリケーション ID] が概要ページに一覧表示されている、一致するエンタープライズ アプリケーションが存在する必要があります。
注意
この手順は Azure 関数アプリで最も重要な構成であり、誤って実行すると、インデクサーが Azure 関数アプリへのアクセスを禁止される可能性があります。 ID のエンタープライズ アプリケーションの詳細の検索を正しく実行したことを確認し、適切な場所で [アプリケーション ID] と [オブジェクト (プリンシパル) ID] を指定してください。
- [テナントの要件] には、セキュリティ態勢に合ったオプションのいずれかを選択します。 詳細については、 App Service のドキュメントを参照してください。
Azure 関数アプリへの接続を設定する
Azure 関数アプリへの接続をカスタム Web API スキルとカスタム Web API ベクターライザーのどちらで行う必要があるかによって、JSON 定義は若干異なります。 どちらの場合も、Azure 関数アプリに対して正しい URI を指定し、authResourceId を、認証プロバイダー用に構成された [許可されたトークン対象ユーザー] と同じ値に設定します。
システム割り当て ID とユーザー割り当て ID のどちらを使用して接続するかによって、必要なプロパティが若干異なります。
システム割り当て ID を使用する
検索サービスのシステム割り当て ID が "Easy Auth" を使用して認証できるサンプル Azure Function アプリの 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]"
}
注意
カスタム Web API スキルまたはベクターライザー定義でユーザー割り当て ID を指定する前に、Azure AI 検索 サービスに ID を割り当てます。
インデクサー/ベクターライザーを実行してアクセス許可を確認する
カスタム Web API スキルの場合、インデクサーの実行時にアクセス許可が検証されます。 ベクター化の場合、カスタム Web API ベクターライザーを使用してベクター クエリが発行されたときに検証されます。 認証に関する特定の問題を除外するには、Azure 関数アプリで認証プロバイダーを無効にし、インデクサー/ベクターライザーからの呼び出しが確実に成功するようにすることでテストできます。
- 認証の問題が解決しない場合は、適切な ID 情報 (Azure AI 検索サービスの ID のアプリケーション ID、オブジェクト (プリンシパル) ID) が Azure 関数アプリの認証プロバイダーで指定されていることを確認します。