Azure AI 検索でマネージド ID を使用して接続するように検索サービスを構成する

重要

ユーザー割り当てマネージド ID の割り当ては、追加の使用条件のもとでパブリック プレビュー段階にあります。 Management プレビュー REST API は、Azure AI 検索のユーザー割り当てマネージド ID の割り当てを提供します。 システム割り当てマネージド ID のサポートは一般提供されています。

Azure AI 検索から、インデックス作成またはクエリ中にデータ、応用 AI、またはベクター化を提供するリソースへの送信接続には、Microsoft Entra ID とロールの割り当てを使用できます。

送信接続でロールを使用するには、まず、Microsoft Entra テナントの検索サービスのセキュリティ原則として、システム割り当てまたはユーザー割り当てマネージド ID のいずれかを使用するように検索サービスを構成します。 マネージド ID を取得したら、承認されたアクセスのロールを割り当てることができます。 マネージド ID とロールの割り当てにより、接続文字列またはコードでシークレットと資格情報を渡す必要がなくなります。

前提条件

  • 任意のリージョンの Basic レベル以上の検索サービス。

  • 有効なロールの割り当てを持つ Microsoft Entra セキュリティ プリンシパルからの受信要求を許可する Azure リソース。

サポートされるシナリオ

Azure AI 検索は、システム割り当てまたはユーザー割り当てマネージド ID で他の Azure リソースに接続できます。

  • システム割り当てマネージド ID の検索サービスの構成は一般提供されています。
  • ユーザー割り当てマネージド ID の検索サービスの構成は、追加の使用条件のもとでパブリック プレビュー段階にあります。
  • システム割り当てとユーザー割り当てのどちらの場合でも、マネージド ID のデータ プレーンの使用は一般提供されています。 たとえば、インデクサー データ ソース接続、キー コンテナー、デバッグ セッション、またはエンリッチメント キャッシュでユーザー割り当てマネージド ID が必要な場合は、使用する機能も一般提供されているものであると仮定して、一般提供の REST API バージョンを使用して接続を作成できます。

システム マネージド ID は、接続文字列が、Microsoft Entra ID に対応するサービスまたはアプリケーションの一意リソース ID である場合に示されます。 ユーザー割り当てマネージド ID は、"identity" プロパティを介して指定されます。

検索サービスでは、Azure Storage をインデクサー データ ソースとして使用し、デバッグ セッション、エンリッチメント キャッシュ、ナレッジ ストアのデータ シンクとして使用します。 ストレージに書き戻す検索機能の場合、「ロールの割り当て」セクションで説明されているように、マネージド ID には共同作成者ロールの割り当てが必要です。

シナリオ System ユーザー割り当て
サポートされている Azure データ ソースへのインデクサー接続1 はい はい
カスタマー マネージド キーの Azure Key Valut はい はい
デバッグ セッション (Azure Storage でホストされている)1 はい いいえ
エンリッチメント キャッシュ (Azure Storage でホストされている)1、2 はい はい
ナレッジ ストア (Azure Storage でホストされている)1 はい はい
Azure OpenAI または Azure AI への接続 3 はい はい

1 検索とストレージの間の接続では、ネットワーク セキュリティ構成により、使用できるマネージド ID の種類に制約が課されます。 信頼されたサービスの例外またはリソース インスタンス ルールによるストレージへの同一リージョン接続に使用できるのは、システム マネージド ID だけです。 詳細については、「ネットワークで保護されたストレージ アカウントへのアクセス」を参照してください。

2 Azure Table Storage でのエンリッチメント キャッシュの場合、現在、共有キー アクセスがオフになっているストレージ アカウントのテーブルに検索サービスを接続することはできません。

3 Azure OpenAI または Azure AI への接続には、カスタム スキルカスタム ベクター化Azure OpenAI 埋め込みスキルAzure OpenAI ベクター化AML スキルAzure AI Studio モデル カタログ ベクター化Azure AI Vision マルチモーダル埋め込みスキルAzure AI Vision ベクター化が含まれます。

システム マネージド ID を作成する

システム割り当てマネージド ID を有効にすると、Microsoft Entra ID によって検索サービス用の ID が作成され、これを同じテナント内の他の Azure サービスに対する認証に使用できるようになります。 その後に、データとモデルにアクセスするためのロールの割り当てでこの ID を使用できます。

システム割り当てマネージド ID は検索サービスに固有であり、その有効期間中サービスにバインドされます。 検索サービスは、1 つのシステム割り当てマネージド ID しか持つことができません。

  1. Azure portal にサインインし、ご利用の検索サービスを探します

  2. [設定] にある [ID] を選択します。

  3. [システム割り当て] タブの [状態] で、[オン] を選択します。

  4. [保存] を選択します。

    Azure portal の [ID] ページのスクリーンショット。

    設定を保存すると、ページが更新され、検索サービスに割り当てられているオブジェクト識別子が表示されます。

    システム ID オブジェクト識別子のスクリーンショット。

ユーザー割り当てマネージド ID を作成する

重要

このシナリオの一部はパブリック プレビュー段階にあり、追加使用条件の下で提供されます。 Management プレビュー REST API は、Azure AI 検索のユーザー割り当てマネージド ID の構成を提供します。

ユーザー割り当てマネージド ID は Azure のリソースです。 ロールの割り当てをよりきめ細かく行う場合は、複数のユーザー割り当てマネージド ID を作成します。 たとえば、ID を異なるアプリケーションやシナリオごとに分けることができます。

手順は次のとおりです。

  • Azure サブスクリプションで、ユーザー割り当てマネージド ID を作成します。
  • 検索サービスで、サービス定義を更新してユーザー割り当てマネージド ID を有効にします (この手順はプレビュー段階です)。
  • 接続する他の Azure サービスで、ID のロールの割り当てを作成します。
  • インデクサー データ ソースなどの Azure AI 検索上のデータ ソース接続では、接続の詳細でユーザー マネージド ID を参照します (この手順は、その機能のサポートが一般提供されている場合は一般提供になります)。

ユーザー割り当てマネージド ID のスコープは、サブスクリプション、リソース グループ、またはリソースの種類に設定できます。

ユーザー割り当てマネージド ID の関連付けは、Azure portal、Management REST API のプレビュー バージョン、およびこの機能を提供するベータ SDK パッケージでサポートされています。

  1. Azure ポータル

  2. [リソースの作成] を選択します。

  3. [サービスとマーケットプレースを検索してください] 検索バーで、[ユーザー割り当てマネージド ID] を検索し、[作成] を選択します。

    Azure Marketplaceでユーザーが割り当てられたマネージド ID タイルのスクリーンショット。

  4. サブスクリプション、リソース グループ、リージョンを選択します。 ID にわかりやすい名前を付けます。

  5. [作成] を選択し、リソースのデプロイが完了するまで待ちます。

    ID を使用できるようになるまで数分かかります。

  6. 検索サービス ページの [設定] から、[ID] を選択します。

  7. 割り当てられたユーザー タブで、追加 を選択します。

  8. サブスクリプションを選択し、前の手順で作成したユーザー割り当て管理対象リソースを選択します。

ロールの割り当て

マネージド ID を取得したら、Azure リソースに対する検索サービスのアクセス許可を決定するロールを割り当てます。

  • インデクサー データ接続と、Azure Key Vault のカスタマー マネージド キーへのアクセスには、読み取りのアクセス許可が必要です。

  • Azure Storage を使用してデバッグ セッション データ、エンリッチメント キャッシュ、およびナレッジ ストア内の長期的なコンテンツ ストレージをホストする AI エンリッチメント機能には、書き込みアクセス許可が必要です。

次の手順はロールの割り当てのワークフローを示しています。 この例は、Azure OpenAI 用です。 その他の Azure リソースについては、「Azure Storage への接続」、「Azure Cosmos DB への接続」、「Azure SQL への接続」を参照してください。

  1. Azure アカウントを使用して Azure portal にサインインし、Azure OpenAI リソースに移動します。

  2. 左側のメニューから [アクセスの制御] を選択します。

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

  4. [職務権限ロール] で、[Cognitive Services OpenAI ユーザー] を選択し、[次へ] を選択します。

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

  6. サブスクリプションとリソースの種類 (Search Service) でフィルター処理し、検索サービスのマネージド ID を選択します。

  7. [レビューと割り当て] を選択します。

接続文字列の例

検索サービス用のマネージド ID を定義してロールの割り当てを付与した後は、他の Azure リソースの一意のリソース ID を使用するように送信接続を変更できます。 さまざまなシナリオの接続文字列の例を次に示します。

これらの接続には、一般公開されている REST API バージョンと Azure SDK パッケージを使用できます。

ヒント

これらのオブジェクトのほとんどは Azure portal で作成できます。システムまたはユーザー割り当てマネージド ID のいずれかを指定して、JSON 定義を表示して接続文字列を取得します。

BLOB データ ソース (システム):

インデクサー データ ソースには、データ ソースへの接続方法を決定する "credentials" プロパティが含まれています。 次の例は、ストレージ アカウントの一意のリソース ID を指定する接続文字列を示しています。

Microsoft Entra ID は、検索サービスのシステム マネージド ID を使用して要求を認証します。 接続文字列にコンテナーが含まれることに注意してください。 データ ソース定義では、接続文字列ではなく、コンテナー名が "container" プロパティ (表示されていません) で指定されます。

"credentials": {
    "connectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
    }

BLOB データ ソース (ユーザー):

Azure Storage への検索要求は、ユーザー割り当てマネージド ID でも作成できます。 検索サービスのユーザー ID は、"identity" プロパティで指定されます。

"credentials": {
    "connectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
    },
  . . .
"identity": {
    "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
    "userAssignedIdentity": "/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{user-assigned-managed-identity-name}"
  }

ナレッジ ストア:

ナレッジ ストアの定義は、Azure Storage への接続文字列が含まれます。 接続文字列は、ストレージ アカウントの一意のリソース ID です。 文字列には、パスにコンテナーまたはテーブルが含まれています。 これらは、接続文字列ではなく、埋め込みプロジェクション定義で定義されます。

"knowledgeStore": {
  "storageConnectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/storage-account-name};"
}

エンリッチメント キャッシュ:

インデクサーは、キャッシュされたエンリッチメントに使用されるコンテナーを作成、使用、および記憶します。 コンテナーをキャッシュ接続文字列に含める必要はありません。 オブジェクト ID は、ポータルの検索サービスの [ID] ページで確認できます。

"cache": {
  "enableReprocessing": true,
  "storageConnectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
}

デバッグ セッション:

デバッグ セッションはポータルで実行され、セッションの開始時に接続文字列を取得します。 次の例のような文字列を貼り付けることができます。

"ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}/{container-name};",

カスタム スキル:

カスタム スキルは、カスタム コードをホストしている Azure 関数またはアプリのエンドポイントを対象とします。 エンドポイントは、カスタム スキル定義で指定されます。 "authResourceId" が存在する場合、検索サービスはマネージド ID を使用して接続し、このプロパティに含まれるターゲット関数またはアプリのアプリケーション ID を渡します。

{
  "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
  "description": "A custom skill that can identify positions of different phrases in the source text",
  "uri": "https://contoso.count-things.com",
  "authResourceId": "<Azure-AD-registered-application-ID>",
  "batchSize": 4,
  "context": "/document",
  "inputs": [ ... ],
  "outputs": [ ...]
}

Azure OpenAI 埋め込みスキルAzure OpenAI ベクター化:

AI 検索の Azure OpenAI 埋め込みスキルとベクター化は、埋め込みモデルをホスティングする Azure OpenAI サービスのエンドポイントを対象とします。 エンドポイントは、Azure OpenAI 埋め込みスキル定義またはAzure OpenAI ベクター化定義で指定されます。 システム マネージド ID は、構成されている場合、および "apikey" と "authIdentity" が空である場合に使用されます。 "authIdentity" プロパティは、ユーザー割り当てマネージド ID にのみ使用されます。

{
  "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
  "description": "Connects a deployed embedding model.",
  "resourceUri": "https://url.openai.azure.com/",
  "deploymentId": "text-embedding-ada-002",
  "modelName": "text-embedding-ada-002",
  "inputs": [
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "embedding"
    }
  ]
}
 "vectorizers": [
    {
      "name": "my_azure_open_ai_vectorizer",
      "kind": "azureOpenAI",
      "azureOpenAIParameters": {
        "resourceUri": "https://url.openai.azure.com",
        "deploymentId": "text-embedding-ada-002",
        "modelName": "text-embedding-ada-002"
      }
    }
  ]

ファイアウォール アクセスを確認する

Azure リソースがファイアウォールの背後にある場合は、検索サービスからの要求を受け入れる受信規則があることを確認します。

関連項目