次の方法で共有


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

Microsoft Entra ID セキュリティ プリンシパルとロールの割り当てを、Azure AI Search から他の Azure リソースへの送信接続に使用して、インデックス作成またはクエリ中にデータ、適用された AI、またはベクター化を提供できます。

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

[前提条件]

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

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

  • マネージド ID を作成するには、所有者ロールまたはユーザー アクセス管理者ロールである必要があります。 ロールを割り当てるには、所有者、ユーザー アクセス管理者、ロールベースのアクセス制御管理者、または Microsoft.Authorization/roleAssignments/書き込みアクセス許可を持つカスタム ロールのメンバーである必要があります。

サポートされているシナリオ

これらのシナリオでは、マネージド ID を使用できます。

シナリオ システム ユーザー割り当て
インデクサー データ ソースへの接続1 イエス はい 2
スキル/ベクターライザーを使用して Azure OpenAI、Azure AI Foundry、Azure Functions の埋め込みとチャットの完了モデルに接続する 3 イエス イエス
カスタマー マネージド キー用の Azure Key Vault に接続する イエス イエス
(Azure Storage でホストされている) デバッグ セッションに接続する 1 イエス いいえ
(Azure Storage でホストされている) エンリッチメント キャッシュに接続する 1,4 イエス はい 2
ナレッジ ストア (Azure Storage でホスト) に接続する 1 イエス はい 2

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

データ ソース接続文字列では、2 つのユーザー割り当てマネージド ID を使用できます。 ただし、接続文字列でユーザー割り当てマネージド ID をサポートするのは、新しいプレビュー REST API とプレビュー パッケージのみです。 SearchIndexerDataUserAssignedIdentity をデータ ソース接続のidentityとして設定する場合は、必ずプレビュー API に切り替えます。

スキル /ベクター化を介した Azure OpenAI、Azure AI Foundry、Azure Functions への 3 つの接続には、 カスタム スキルカスタム ベクターライザーAzure OpenAI 埋め込みスキルAzure OpenAI ベクターライザーAML スキルAzure AI Foundry モデル カタログ ベクターライザーが含まれます。

現在、4 つの AI 検索サービスは、 共有キーアクセスが無効になっているストレージ アカウントのテーブルに接続できません。

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

システム割り当てマネージド ID は、Azure AI Search サービスなどの Azure リソースに自動的に作成され、リンクされる Microsoft Entra ID セキュリティ プリンシパルです。

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

システム割り当てマネージド ID を有効にすると、Microsoft Entra ID によって、他の Azure リソースに対する認証に使用される検索サービスのセキュリティ プリンシパルが作成されます。 その後、ロールの割り当てでこの ID を使用して、データと操作への承認されたアクセスを行うことができます。

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

  2. 左側のウィンドウで、 設定>Identity を選択します。

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

  4. 保存 を選択します。

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

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

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

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

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

ロールの割り当ての粒度を高める目的で、複数のユーザー割り当てマネージド ID を作成できます。 たとえば、ID を異なるアプリケーションやシナリオごとに分けることができます。 独立して作成されたマネージド リソースとして、サービス自体にバインドされません。

ユーザー割り当てマネージド ID を設定する手順は次のとおりです。

  • Azure サブスクリプションで、ユーザー割り当てマネージド ID を作成します。

  • 検索サービスで、ユーザー割り当てマネージド ID を検索サービスに関連付けます。

  • 接続する他の Azure サービスで、ID のロールの割り当てを作成します。

ユーザー割り当てマネージド ID と Azure AI Search サービスの関連付けは、Azure portal、Search Management REST API、および機能を提供する SDK パッケージでサポートされています。

  1. Azure portal にサインインします。

  2. ダッシュボードの左上隅にある [リソースの作成] を選択します。

  3. 検索ボックスを使用して ユーザー割り当てマネージド ID を検索し、[ 作成] を選択します。

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

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

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

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

  6. 検索サービス のページで、[設定]>[Identity] を選択します。

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

  8. サブスクリプションと、前に作成したユーザー割り当てマネージド ID を選択します。

ロールを割り当てる

マネージド 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. レビュー + 割り当て を選択します。

接続文字列の例

他の Azure リソースへの接続文字列でマネージド ID を使用できることを、シナリオの説明から思い出してください。 このセクションでは例を示します。 システム割り当てマネージド ID を使用して、一般公開されている REST API バージョンと Azure SDK パッケージを接続に使用できます。

ヒント

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

さまざまなシナリオの接続文字列の例を次に示します。

BLOB データ ソース (システム マネージド ID):

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

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

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

BLOB データ ソース (ユーザーマネージド ID):

ユーザー割り当てマネージド ID は、インデクサー データ ソース接続文字列でも使用できます。 ただし、データ ソース接続文字列でユーザー割り当てマネージド ID をサポートするのは、新しいプレビュー REST API とプレビュー パッケージのみです。 SearchIndexerDataUserAssignedIdentity をデータ ソース接続の 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 は、Azure portal の検索サービスの [ID] ページで確認できます。

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

デバッグ セッション:

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

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

カスタム スキル:

カスタム スキルは、カスタム コードをホストしている Azure 関数またはアプリのエンドポイントをターゲットとします。

  • uri は、関数またはアプリのエンドポイントです。

  • 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": [ ...]
}

モデルの接続例

マネージド ID を使用して行われた接続の場合、このセクションでは、検索サービスが別のリソースのモデルに接続するために使用する接続情報の例を示します。 システム マネージド ID を介した接続は透過的です。ID とロールが配置され、正しく構成されている場合は接続が成功します。 これに対し、ユーザーマネージド ID には追加の接続プロパティが必要です。

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

AI Search の Azure OpenAI 埋め込みスキルとベクターライザーは、埋め込みモデルをホストする Azure OpenAI のエンドポイントを対象とします。 エンドポイントは、Azure OpenAI 埋め込みスキル定義またはAzure OpenAI ベクター化定義で指定されます。

システム マネージド ID は、次の例の中で示すように、"apikey""authIdentity" が空の場合に自動的に使用されます。 "authIdentity" プロパティは、ユーザー割り当てマネージド ID にのみ使用されます。

システムマネージド 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"
    }
  ]
}

システム割り当てマネージド ID 用に構成されたベクトライザーの例を次に示します。 ベクトライザーは検索インデックス内で指定されます。

 "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"
      }
    }
  ]

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

"apiKey" が空で、かつ有効な "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"
    }
  ],
  "authIdentity": {
    "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
    "userAssignedIdentity": "/subscriptions/<subscription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned-managed-identity-name>"
   }
}

ユーザー割り当てマネージド ID 用に構成されたベクトライザーの例を次に示します。 ベクトライザーは検索インデックス内で指定されます。

 "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"
        "authIdentity": {
            "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
            "userAssignedIdentity": "/subscriptions/<subscription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned-managed-identity-name>"
          }
      }
    }
  ]

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

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

こちらも参照ください