マネージド ID を使用して他の Azure リソースに検索サービスを接続する

システム割り当てまたはユーザー割り当てマネージド ID と Azure ロールの割り当てを使用して他の Azure リソースに接続するように、Azure AI Search サービスを構成できます。 マネージド ID とロールの割り当てにより、接続文字列またはコードでシークレットと資格情報を渡す必要がなくなります。

前提条件

  • Basic レベル以上の検索サービス。

  • 有効なロールの割り当てを持つ Microsoft Entra ログインからの受信要求を許可する Azure リソース。

サポートされるシナリオ

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

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

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

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

2 エンリッチメント キャッシュを指定する方法の 1 つは、データのインポート ウィザードです。 現時点では、ウィザードはエンリッチメント キャッシュのマネージド ID 接続文字列を受け入れていません。 ただし、ウィザードが完了したら、インデクサー JSON 定義の接続文字列を更新して、システムまたはユーザー割り当てマネージド ID のいずれかを指定してから、インデクサーを再実行できます。

3 Azure ストレージ アカウントのキーの無効化は、データ ソースとして使用される Azure Table では現在サポートされていないことに注意してください。 マネージド ID はストレージ キーを明示的に提供するために使用されますが、AI 検索サービスでは引き続きこの実装にキーが使用されます。

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

システム割り当てマネージド ID が有効になると、Azure によって検索サービス用の ID が作成され、同じテナントとサブスクリプション内の他の Azure サービスに対する認証に使用することができます。 この ID は、インデックス作成中にデータへのアクセスを許可する Azure ロールベースのアクセス制御 (Azure RBAC) の割り当てで使用できるようになります。

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

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

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

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

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

    Screenshot of the Identity page in Azure portal.

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

    Screenshot of a system identity object identifier.

ユーザー割り当てマネージド ID (プレビュー) を作成する

ユーザー割り当てマネージド ID は Azure のリソースです。 さまざまなアプリケーションとシナリオに対して個別の ID を作成できるので、この機能はロールの割り当てにさらに細分性が必要な場合に便利です。

重要

この機能はパブリック プレビュー段階にあり、追加使用条件の下で提供されます。 ネットワークで保護されたストレージ アカウントへの接続では、ユーザー割り当てマネージド ID は現在サポートされていません。 現在、検索要求にはパブリック IP アドレスが必要です。

  1. Azure ポータル

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

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

    Screenshot of the user assigned managed identity tile in Azure Marketplace.

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

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

    次のいくつかの手順で、ユーザー割り当てマネージド ID を検索サービスに割り当てます。

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

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

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

ファイアウォール アクセスを許可する

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

ロールの割り当て

マネージド ID は、Azure リソースに対するアクセス許可を決定する Azure ロールと組み合わせとなっている必要があります。

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

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

次の手順は、Azure Storage 向けです。 リソースが Cosmos DB または Azure SQL である場合、そのステップは似ています。

  1. Azure portal にサインインして、検索サービスがアクセスできる必要がある Azure リソースを見つける必要があります。

  2. [Azure Storage] で左側のナビゲーション ウィンドウにある [アクセス制御 (AIM)] を選択します。

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

  4. [ロール] ページで、検索サービスに必要なロールを選択します。

    タスク ロール割り当て
    インデクサーを使用した BLOB インデックス作成 ストレージ BLOB データ閲覧者を追加します
    インデクサーを使用した ADLS Gen2 インデックス作成 ストレージ BLOB データ閲覧者を追加します
    インデクサーを使用したテーブル インデックス作成 閲覧者とデータ アクセスを追加します
    インデクサーを使用したファイル インデックス作成 閲覧者とデータ アクセスを追加します
    ナレッジ ストアに書き込む オブジェクト プロジェクションとファイル プロジェクションに Storage Blob DataContributor を追加し、テーブル プロジェクションにリーダーとデータ アクセスを追加します。
    エンリッチメント キャッシュに書き込む ストレージ BLOB データ共同作成者を追加します
    デバッグ セッション状態を保存する ストレージ BLOB データ共同作成者を追加します
  5. [メンバー] ページで、[マネージド ID] を選択します。

  6. メンバーを選択します。 [マネージド ID の選択] ページ で、サブスクリプションを選択し、サービスの種類でフィルター処理してから、サービスを選択します。 選択できるのは、マネージド ID を持つサービスのみです。

    Screenshot of the select managed identity pane in the role assignment wizard.

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

接続文字列の例

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

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" プロパティで指定されます。 ポータルまたは REST API プレビュー バージョン 2021-04-30-Preview を使用して、この ID を設定できます。

"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 への接続文字列が含まれます。 Azure Storage で、ナレッジ ストアは、BLOB およびテーブルとしてプロジェクションを作成します。 接続文字列は、ストレージ アカウントの一意のリソース 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": [ ...]
}

関連項目