メモ
Azure AI 検索は、Azure ポータル、REST API、およびAzure SDKから使用できます。 また、Foundry IQ は、エンタープライズ コンテンツを、Microsoft Foundry ポータルのエージェントの再利用可能なアクセス許可に対応したナレッジ ベースに変換するマネージド ナレッジ レイヤーです。
この記事では、接続文字列で資格情報を指定するのではなく、マネージド ID を使用してAzure Cosmos DB データベースへのインデクサー接続を設定する方法について説明します。
システム割り当てマネージド ID またはユーザー割り当てマネージド ID を使用できます。 マネージド ID はログインMicrosoft Entraであり、Azure Cosmos DBのデータにアクセスするにはAzureロールの割り当てが必要です。 必要に応じて、Azure Cosmos DB for NoSQL アカウントにおいて、データ接続に対する唯一の認証方法としてロールベースのアクセスを強制することができます。そのためにはdisableLocalAuthをtrueに設定します。
前提 条件
- 検索サービスのマネージド ID を作成します。
制限
- Gremlin と MongoDB のAzure Cosmos DB (現在プレビュー段階) に接続するインデクサーは、legacy アプローチのみをサポートします。
マネージド ID 認証でサポートされるアプローチ
Azure AI 検索では、マネージド ID を使用してAzure Cosmos DBに接続するための 2 つのメカニズムがサポートされています。
legacy アプローチでは、ターゲット Azure Cosmos DB アカウントのコントロール プレーンに対する閲覧者アクセス許可を持つマネージド ID を構成する必要があります。 Azure AI 検索では、そのアイデンティティを使用して、バックグラウンドでCosmos DBアカウントのアカウントキーを取得し、データにアクセスするために使用します。 Cosmos DB アカウントに
"disableLocalAuth": trueがある場合、この方法は機能しません。modern アプローチでは、ターゲット Azure Cosmos DB アカウントのコントロールとデータ プレーンに対してマネージド ID の適切なロールを構成する必要があります。 Azure AI 検索は、Cosmos DB アカウント内のデータにアクセスするためのアクセス トークンを要求します。 この方法は、Cosmos DB アカウントに
"disableLocalAuth": trueがある場合でも機能します。
NoSQLのAzure Cosmos DBに接続するインデクサーは、legacy と modern アプローチの両方をサポートします 。modern アプローチをお勧めします。
NoSQLのAzure Cosmos DBに接続する
このセクションでは、modern アプローチを使用してNoSQLのAzure Cosmos DBへの接続を構成する手順について説明します。
制御プレーンの役割の割り当てを設定する
Azure ポータルにサインインし、cosmos DB for NoSQL アカウントを見つけます。
[アクセス制御 (IAM)] を選択します。
[ 追加] を選択し、[ ロールの割り当て] を選択します。
ジョブ関数ロールの一覧から、 Cosmos DB アカウント閲覧者を選択します。
[ 次へ] を選択します。
[ マネージド ID] を 選択し、[メンバー] を選択 します。
システム割り当てマネージド ID またはユーザー割り当てマネージド ID でフィルター処理します。 以前に検索サービス用に作成したマネージド ID が表示されます。 お持ちでない場合は、「 マネージド ID を使用するように検索を構成する」を参照してください。 既に設定しているが使用できない場合は、数分待ちます。
ID を選択し、ロールの割り当てを保存します。
詳細については、「
データ プレーン ロールの割り当てを構成する
マネージド ID には、Cosmos DB アカウントのデータ プレーンから読み取るロールを割り当てる必要があります。 検索サービスのシステム/ユーザー割り当て ID のオブジェクト (プリンシパル) ID は、検索サービスの [ID] タブから確認できます。この手順は、現時点ではAzure CLI経由でのみ実行できます。
変数を設定します。
$cosmosdb_acc_name = <cosmos db account name>
$resource_group = <resource group name>
$subsciption = <subscription ID>
$system_assigned_principal = <Object (principal) ID for the search service's system/user assigned identity>
$readOnlyRoleDefinitionId = "00000000-0000-0000-0000-000000000001"
$scope=$(az cosmosdb show --name $cosmosdb_acc_name --resource-group $resource_group --query id --output tsv)
システム割り当て ID のロールの割り当てを定義します。
az cosmosdb sql role assignment create --account-name $cosmosdb_acc_name --resource-group $resource_group --role-definition-id $readOnlyRoleDefinitionId --principal-id $system_assigned_principal --scope $scope
詳細については、「
データ ソース定義を構成する
both コントロール プレーンとデータ プレーン ロールの割り当てをNoSQLアカウントのAzure Cosmos DBに構成したら、そのロールで動作する接続を設定できます。
インデクサーは、外部データ ソースへの接続にデータ ソース オブジェクトを使用します。 このセクションでは、データ ソース 接続文字列でシステム割り当てマネージド ID またはユーザー割り当てマネージド ID を指定する方法について説明します。 その他の接続文字列例については、マネージド ID に関する記事を参照してください。
ヒント
Azure ポータルで、システム割り当てマネージド ID またはユーザー割り当てマネージド ID を指定して Cosmos DB へのデータ ソース接続を作成し、JSON 定義を表示して、接続文字列の作成方法を確認できます。
REST API、Azure ポータル、および .NET SDK は、システム割り当てマネージド ID またはユーザー割り当てマネージド ID の使用をサポートします。
システム割り当て ID を介して接続する
システム割り当てマネージド ID を使用して接続する場合、データ ソース定義の変更は "credentials" プロパティの形式のみです。 アカウント キーまたはパスワードを持たないデータベース名と ResourceId を指定します。 ResourceId には、Azure Cosmos DBのサブスクリプション ID、リソース グループ、およびAzure Cosmos DB アカウント名を含める必要があります。
最新のアプローチを実行するデータ ソースの作成 REST API を使用する例を次に示します。
POST https://[service name].search.windows.net/datasources?api-version=2026-04-01
{
"name": "my-cosmosdb-ds",
"type": "cosmosdb",
"credentials": {
"connectionString": "ResourceId=/subscriptions/[subscription-id]/resourceGroups/[rg-name]/providers/Microsoft.DocumentDB/databaseAccounts/[cosmos-account-name];Database=[cosmos-database];IdentityAuthType=AccessToken"
},
"container": { "name": "[my-cosmos-collection]" }
}
メモ
IdentityAuthType プロパティが接続文字列の一部でない場合、Azure AI 検索は既定で legacy アプローチに設定され、下位互換性が確保されます。
ユーザー割り当て ID を介して接続する
データ ソース定義に "identity" プロパティを追加する必要があります。ここでは、Azure Cosmos DB アカウントへの接続に使用される特定の ID (検索サービスに割り当てることができる ID のうち) を指定します。
最新のアプローチでユーザー割り当て ID を使用する例を次に示します。
POST https://[service name].search.windows.net/datasources?api-version=2026-04-01
{
"name": "[my-cosmosdb-ds]",
"type": "cosmosdb",
"credentials": {
"connectionString": "ResourceId=/subscriptions/[subscription-id]/resourceGroups/[rg-name]/providers/Microsoft.DocumentDB/databaseAccounts/[cosmos-account-name];Database=[cosmos-database];IdentityAuthType=AccessToken"
},
"container": { "name": "[my-cosmos-collection]"},
"identity" : {
"@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
"userAssignedIdentity": "/subscriptions/[subscription-id]/resourcegroups/[rg-name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[my-user-managed-identity-name]"
}
}
Gremlin/MongoDB のAzure Cosmos DBに接続する (プレビュー)
このセクションでは、legacy アプローチを使用して Gremlin/Mongo のAzure Cosmos DBへの接続を構成する手順について説明します。
制御プレーンの役割の割り当てを設定する
前と同じ手順に従って、Gremlin/MongoDB のAzure Cosmos DBのコントロール プレーンに適切なロールを割り当てます。
接続文字列を設定する
- MongoDB コレクションの場合は、接続文字列に "ApiKind=MongoDb" を追加し、プレビュー REST API を使用します。
- Gremlin グラフの場合は、接続文字列に "ApiKind=Gremlin" を追加し、プレビュー REST API を使用します。
- いずれの種類でも、legacy アプローチのみがサポートされます。つまり、
IdentityAuthType=AccountKeyまたは完全に省略することが唯一の有効な接続文字列です。
REST API 経由でシステム割り当て ID を使用して MongoDB コレクションに接続する例を次に示します。
POST https://[service name].search.windows.net/datasources?api-version=2026-08-01-preview
{
"name": "my-cosmosdb-ds",
"type": "cosmosdb",
"credentials": {
"connectionString": "ResourceId=/subscriptions/[subscription-id]/resourceGroups/[rg-name]/providers/Microsoft.DocumentDB/databaseAccounts/[cosmos-account-name];Database=[cosmos-database];ApiKind=MongoDb"
},
"container": { "name": "[my-cosmos-collection]", "query": null },
"dataChangeDetectionPolicy": null
}
ユーザー割り当て ID を使用して Gremlin グラフに接続する例を次に示します。
POST https://[service name].search.windows.net/datasources?api-version=2026-08-01-preview
{
"name": "[my-cosmosdb-ds]",
"type": "cosmosdb",
"credentials": {
"connectionString": "ResourceId=/subscriptions/[subscription-id]/resourceGroups/[rg-name]/providers/Microsoft.DocumentDB/databaseAccounts/[cosmos-account-name];Database=[cosmos-database];ApiKind=Gremlin"
},
"container": { "name": "[my-cosmos-collection]"},
"identity" : {
"@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
"userAssignedIdentity": "/subscriptions/[subscription-id]/resourcegroups/[rg-name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[my-user-managed-identity-name]"
}
}
インデクサーを実行してアクセス許可を確認する
リモート サービスの接続情報とアクセス許可は、インデクサーの実行中に実行時に検証されます。 インデクサーが成功した場合、接続構文とロールの割り当ては有効です。 詳細については、「 インデクサー、スキル、またはドキュメントを実行またはリセットする」を参照してください。
接続の問題解決
NoSQLのAzure Cosmos DBについては、アカウントのアクセスが選択されたネットワークに制限されているかどうかを確認します。 制限なしで接続を試すことで、ファイアウォールの問題を除外できます。 詳細については、「Azure ネットワーク セキュリティによって保護されたコンテンツへの Indexer アクセス」に関する情報を参照してください。
NoSQLのAzure Cosmos DBの場合、認証の問題が原因でインデクサーが失敗した場合は、Cosmos DB アカウントのコントロール プレーンとデータ プレーンbothでロールの割り当てが実行されていることを確認します。
Gremlin または MongoDB の場合、Azure Cosmos DB アカウント キーを最近ローテーションした場合、マネージド ID 接続文字列が機能するまで最大 15 分待つ必要があります。
関連項目
NoSQL用のAzure Cosmos DBを使用したインデックス作成 - MongoDB のAzure Cosmos DBを使用したインデックス作成 (プレビュー)
- Apache Gremlin のAzure Cosmos DBを使用したインデックス作成 (プレビュー)