マネージド ID を使用してAzure SQLへのインデクサー接続を設定する

Note

Azure AI 検索は、Azure ポータルREST APIおよびAzure SDKから使用できます。 また、Foundry IQ は、エンタープライズ コンテンツを、Microsoft Foundry ポータルのエージェントの再利用可能なアクセス許可に対応したナレッジ ベースに変換するマネージド ナレッジ レイヤーです。

この記事では、接続文字列で資格情報を指定するのではなく、マネージド ID を使用してAzure SQL Databaseへのインデクサー接続を設定する方法について説明します。

システム割り当てマネージド ID またはユーザー割り当てマネージド ID を使用できます。 マネージド ID はログインMicrosoft Entraであり、Azure SQLのデータにアクセスするにはAzureロールの割り当てが必要です。

前提 条件

1 - データベースを読み取るアクセス許可を割り当てる

次の手順に従って、データベースを読み取る検索サービスまたはユーザー割り当てマネージド ID のアクセス許可を割り当てます。

  1. Visual Studioに接続します。

    connect to Visual Studio

  2. Microsoft Entra アカウントで認証します。

    認証

  3. 次のコマンドを実行します。

    検索サービス名またはユーザー割り当てマネージド ID 名の周りに角かっこを含めます。

    CREATE USER [insert your search service name here or user-assigned managed identity name] FROM EXTERNAL PROVIDER;
    EXEC sp_addrolemember 'db_datareader', [insert your search service name here or user-assigned managed identity name];
    

    新しいクエリ

    クエリの実行

アクセス許可の割り当て後に検索サービス ID またはユーザー割り当て ID を後で変更する場合は、ロール メンバーシップを削除し、SQL データベース内のユーザーを削除してから、アクセス許可の割り当てを繰り返す必要があります。 ロールのメンバーシップとユーザーを削除するには、次のコマンドを実行します。

sp_droprolemember 'db_datareader', [insert your search service name or user-assigned managed identity name];

DROP USER IF EXISTS [insert your search service name or user-assigned managed identity name];

2 - ロールの割り当てを追加する

このセクションでは、SQL Serverからデータを読み取るアクセス許可を Azure AI 検索 サービスに付与します。 詳細な手順については、Azure ポータルを使用して Azure ロールを割り当てるを参照してください。

  1. Azure ポータルで、Azure SQL Server ページに移動します。

  2. [アクセス制御 (IAM)] を選択します。

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

    [ロールの割り当ての追加] メニューが開いている [アクセス制御 (IAM)] ページを示すスクリーンショット。

  4. [ ロール ] タブで、適切な 閲覧者 ロールを選択します。

  5. [ メンバー ] タブで、[ マネージド ID] を選択し、[ メンバーの選択] を選択します。

  6. Azure サブスクリプションを選択します。

  7. システム割り当てマネージド ID を使用している場合は、[ システム割り当てマネージド ID] を選択し、検索サービスを検索して選択します。

  8. それ以外の場合は、ユーザー割り当てマネージド ID を使用している場合は、[ ユーザー割り当てマネージド ID] を選択し、ユーザー割り当てマネージド ID の名前を検索して選択します。

  9. [ 確認と割り当て ] タブで、[ 確認と割り当て ] を選択してロールを割り当てます。

3 - データ ソースを作成する

データ ソースを作成し、システム割り当てマネージド ID またはユーザー割り当てマネージド ID を指定します。

システムによって割り当てられたマネージド ID

REST API、Azure ポータル、およびAzure SDKはシステム割り当てマネージド ID をサポートします。

システム割り当てマネージド ID を使用して接続する場合、データ ソース定義の変更は "credentials" プロパティの形式のみです。 初期カタログまたはデータベース名と、アカウント キーまたはパスワードを持たない ResourceId を指定します。 ResourceId には、Azure SQL Databaseのサブスクリプション ID、SQL Database のリソース グループ、および SQL データベースの名前を含める必要があります。

Create Data Source REST API とマネージド ID 接続文字列を使用して、ストレージ アカウントからデータのインデックスを作成するデータ ソースを作成する方法の例を次に示します。 マネージド ID 接続文字列形式は、REST API、.NET SDK、および Azure ポータルで同じです。

POST https://[service name].search.windows.net/datasources?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-datasource",
    "type" : "azuresql",
    "credentials" : { 
        "connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
    },
    "container" : { 
        "name" : "my-table" 
    }
} 

ユーザー割り当てマネージド ID

REST API バージョン 2026-04-01 以降では、ユーザー割り当てマネージド ID に基づく接続がサポートされています。 ユーザー割り当てマネージド ID を使用して接続する場合、データ ソース定義には次の 2 つの変更があります。

  • まず、"credentials" プロパティの形式は、初期カタログ名またはデータベース名と、アカウント キーまたはパスワードを持たない ResourceId です。 ResourceId には、Azure SQL Databaseのサブスクリプション ID、SQL Database のリソース グループ、および SQL データベースの名前を含める必要があります。 これは、システム割り当てマネージド ID と同じ形式です。

  • 次に、ユーザー割り当てマネージド ID のコレクションを含む "identity" プロパティを追加します。 データ ソースの作成時に指定する必要があるユーザー割り当てマネージド ID は 1 つだけです。 "userAssignedIdentities" と入力するように設定します。

データ ソース - 作成または更新を使用してインデクサー データ ソース オブジェクトを作成する方法の例を次に示します。

POST https://[service name].search.windows.net/datasources?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-datasource",
    "type" : "azuresql",
    "credentials" : { 
        "connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
    },
    "container" : { 
        "name" : "my-table" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"
    }
}   

4 - インデックスを作成する

インデックスは、検索エクスペリエンスを形成するドキュメント、属性、およびその他のコンストラクト内のフィールドを指定します。

検索可能な フィールドを使用した booktitle REST API 呼び出しを次に示します。

POST https://[service name].search.windows.net/indexes?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "my-target-index",
    "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "booktitle", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
    ]
}

5 - インデクサーを作成する

インデクサーは、データ ソースをターゲット検索インデックスに接続し、データ更新を自動化するスケジュールを提供します。 インデックスとデータ ソースが作成されたら、インデクサーを作成する準備ができました。 インデクサーが成功した場合、接続構文とロールの割り当ては有効です。

Azure SQL インデクサー定義を使用した Create Indexer REST API 呼び出しを次に示します。 インデクサーは、要求を送信するときに実行されます。

POST https://[service name].search.windows.net/indexers?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-indexer",
    "dataSourceName" : "sql-datasource",
    "targetIndexName" : "my-target-index"
}

インデクサーが、クライアントがサーバーへのアクセスを許可されていないことを示すデータ ソースに接続しようとしたときにエラーが発生する場合は、 一般的なインデクサー エラーを確認してください。

関連項目

Azure SQL インデクサー