BLOB インデクサーまたはナレッジ ソースを使用して RBAC スコープメタデータを取り込む (プレビュー)

メモ

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

Important

機能、またはマークされたプロパティ (プレビュー) は、サービス レベル アグリーメントの対象ではなく、運用環境のワークロードには推奨されず、一般公開される前に変更または制約される可能性があります。 Azure AI 検索 プレビューの用語は、スタンドアロンでも一般公開されている機能の一部でも、すべてのプレビュー機能に適用されます。

Azure Storageでは、BLOB ストレージ内のコンテナーに対するロールベースのアクセスが許可されます。この場合、Storage BLOB データ閲覧者や Storage BLOB データ共同作成者誰かがコンテンツにアクセスできるかどうかを判断します。 Azure AI 検索では、ドキュメント インジェストと共にユーザーアクセス許可 (プレビュー) の取り込みをサポートしているため、これらのアクセス許可を使用して検索結果へのアクセスを制御できます。 ユーザーがAzure Storageの特定のディレクトリまたはファイルに対するアクセス許可を持っていない場合、たとえあなたがインデックスに対して個人的にSearch Index Data Readerの割り当てを持っていても、そのユーザーはAzure AI 検索の結果における対応するドキュメントにアクセスできません。

  • 2025-05-01-preview 以降では、 BLOB インデクサーを使用して RBAC スコープのメタデータを取り込むことができます。
  • 2025-11-01-preview 以降では、Azure Storageの Blob ナレッジ ソースに同等のサポートが提供されます。

RBAC スコープはコンテナー レベルで設定され、アクセス許可の継承を通じてすべての BLOB (ドキュメント) にフローされます。 RBAC スコープは、インデックス作成中にアクセス許可メタデータとしてキャプチャされます。 プッシュ API を使用して、コンテンツとアクセス許可のメタデータを手動でアップロードおよびインデックス付けできます ( プッシュ REST API を使用したインデックス作成のアクセス許可を参照)、またはインデクサーまたはナレッジ ソースを使用してデータ インジェストを自動化できます。 この記事では、インデックス作成の自動化に重点を置いています。

クエリ時に、呼び出し元の ID は、 x-ms-query-source-authorization パラメーターを使用して要求ヘッダーに含まれます。 ユーザーが検索結果を表示する場合、ID はドキュメントのアクセス許可メタデータと一致する必要があります。

この記事では、この基盤に基づいて構築されたインデックス作成の自動化アプローチについて説明します。

前提 条件

  • Microsoft Entra ID認証と承認。 サービスとアプリは、同じテナント内にある必要があります。 すべてのテナントがMicrosoft Entra IDされている限り、ユーザーは異なるテナントに存在できます。 認証された接続ごとにロールの割り当てが使用されます。

  • Azure AI 検索、どのリージョンでも、マネージド ID のサポートに対して課金対象レベル (Basic 以上) が必要です。 検索サービスは 、ロールベースのアクセス用に構成する 必要があり、 マネージド ID (システムまたはユーザー) を持っている必要があります。

  • RBAC で保護されたコンテナーまたは BLOB を使用する、Azure Storage、Standard パフォーマンス (汎用 v2)、ホット、クール、コールド アクセス層。

  • インデクサーとナレッジ ソースのしくみと、インデックスを作成する方法を理解する必要があります。 この記事では、データ ソースとインデクサーの構成設定について説明しますが、インデックスを作成する手順については説明しません。 アクセス許可フィルター用に設計されたインデックスの詳細については、「アクセス許可フィルター フィールドを使用してインデックスを作成する」を参照してください。

制限事項

Blob Storageの構成

BLOB コンテナーでロールベースのアクセスが使用されていることを確認します。

  1. Azure ポータルにサインインし、ストレージ アカウントを見つけます。

  2. コンテナーを展開し、インデックスを作成する BLOB を含むコンテナーを選択します。

  3. Access Control (IAM) を選択してロールの割り当てを確認します。 ストレージ BLOB データ 閲覧者またはストレージ BLOB データ共同作成者を持つユーザーとグループは、コンテナーのインデックス作成後にインデックス内のドキュメントを検索するアクセス権を持ちます。

認証

インデクサーを実行するには、検索サービス ID に ストレージ BLOB データ 閲覧者 アクセス許可が必要です。 詳細については、「マネージド ID を使用してAzure Storageに接続するを参照してください。

検索サービスには次のものが必要であることを思い出してください。

認証

インデクサーを実行するには、API 呼び出しを発行するクライアントに、オブジェクトを作成するための Search Service Contributor 権限が必要です。 Search Index Data Contributor データインポートを実行するアクセス許可、およびインデックスのクエリを実行するインデックス データ 閲覧者ロールを使用してAzure AI 検索に接続するを参照してください。

ナレッジ ソースを構成する

ナレッジ ソースを使用している場合は、ナレッジ ソースの定義を使用して、完全なインデックス作成パイプライン (インデクサー、データ ソース、インデックス) を生成します。 RBAC スコープが検出され、生成されたインデックスに自動的に含まれます。 インデックス付きコンテンツでアクセス許可の継承が必要な場合は、生成されたオブジェクトを変更する必要はありません。

このシナリオで機能する構成に関する重要なポイントは次のとおりです。

  • isADLSGen2 は false に設定されています。これは、データ ソースがAzure Blob Storageされていることを意味します。
  • ingestionPermissionOptions は rbacScopeを指定します。
# Create / Update Azure Blob Knowledge Source
###
PUT {{url}}/knowledgesources/azure-blob-ks?api-version=2026-08-01-preview
api-key: {{key}}
Content-Type: application/json
 
{
    "name": "azure-blob-ks",
    "kind": "azureBlob",
    "description": "A sample azure blob knowledge source",
    "azureBlobParameters": {
        "connectionString": "{{blob-connection-string}}",
        "containerName": "blobcontainer",
        "folderPath": null,
        "isADLSGen2": false,
        "ingestionParameters": {
            "identity": null,
            "embeddingModel": {
                "kind": "azureOpenAI",
                "azureOpenAIParameters": {
                    "deploymentId": "text-embedding-3-large",
                    "modelName": "text-embedding-3-large",
                    "resourceUri": "{{aoai-endpoint}}",
                    "apiKey": "{{aoai-key}}"
                }
            },
            "chatCompletionModel": null,
            "disableImageVerbalization": true,
            "ingestionSchedule": null,
            "ingestionPermissionOptions": ["rbacScope"],
            "contentExtractionMode": "minimal",
            "aiServices": {
                "uri": "{{ai-endpoint}}",
                "apiKey": "{{ai-key}}"
            }
        }
    }
}

リファレンス:ナレッジ ソースの作成または更新 (REST API)

インデクサーベースのインデックス作成を構成する

インデクサーを使用している場合は、BLOB からアクセス許可メタデータをプルするように、インデクサー、データ ソース、およびインデックスを構成します。

データ ソースを作成する

  • データ ソースの種類は azureblobする必要があります。

  • データ ソース解析モードが既定である必要があります。

  • データ ソースにはindexerPermissionOptionsとrbacScopeが必要です。

システム マネージド ID と indexerPermissionOptionsを含む JSON の例:

{
    "name" : "my-blob-datasource",
    "type": "azureblob",
    "indexerPermissionOptions": ["rbacScope"],
    "credentials": {
    "connectionString": "ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Storage/storageAccounts/<your storage account name>/;"
    },
    "container": {
        "name": "<your-container-name>",
        "query": "<optional-query-used-for-selecting-specific-blobs>"
    }
}

接続文字列のユーザーマネージド ID を持つ JSON スキーマの例:

{
    "name" : "my-blob-datasource",
    "type": "azureblob",
    "indexerPermissionOptions": ["rbacScope"],
    "credentials": {
    "connectionString": "ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Storage/storageAccounts/<your storage account name>/;"
    },
    "container": {
        "name": "<your-container-name>",
        "query": "<optional-query-used-for-selecting-specific-blobs>"
    },
    "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 AI 検索で、インデックスにアクセス許可メタデータのフィールド定義が含まれていることを確認します。 アクセス許可メタデータは、データ ソース定義で indexerPermissionOptions が指定されている場合にインデックスを作成できます。

推奨されるスキーマ属性 RBAC スコープ:

  • rbacScope permissionFilter 値を持つ RBAC スコープ フィールド。
  • プロパティ permissionFilterOption クエリ時にフィルター処理を有効にします。
  • 権限メタデータに文字列フィールドを使用する
  • すべてのフィールドで filterable を true に設定します。

retrievableが false であることに注意してください。 開発中にアクセス許可が存在することを確認するために true を設定できますが、セキュリティ プリンシパル ID が結果に表示されないように、運用環境にデプロイする前に必ず false に戻すように設定してください。

JSON スキーマの例:

{
  ...
  "fields": [
    ...
    { 
        "name": "RbacScope", 
        "type": "Edm.String", 
        "permissionFilter": "rbacScope", 
        "filterable": true, 
        "retrievable": false 
    }
  ],
  "permissionFilterOption": "enabled"
}

インデクサーを構成する

インデクサー内のフィールド マッピングは、データ パスをインデックス内のフィールドに設定します。 名前またはデータ型によって異なるターゲット フィールドと変換先フィールドには、明示的なフィールド マッピングが必要です。 フィールド名を変更すると、Azure Blob Storageの次のメタデータ フィールドにフィールド マッピングが必要になる場合があります。

  • metadata_rbac_scope (Edm.String) - コンテナー RBAC スコープ。

インデクサーで fieldMappings を指定して、インデックス作成中にアクセス許可メタデータをターゲット フィールドにルーティングします。

JSON スキーマの例:

{
  ...
  "fieldMappings": [
    { "sourceFieldName": "metadata_rbac_scope", "targetFieldName": "RbacScope" }
  ]
}

インデクサーを実行する

インデクサー、データ ソース、およびインデックスが構成されたら、インデクサーを実行してプロセスを動かします。 構成またはアクセス許可に問題がある場合は、この手順でこれらの問題が発生します。

既定では、インデクサーは検索サービスに投稿するとすぐに実行されますが、インデクサーの構成に disabled が true に設定されている場合、インデクサーは無効な状態でポストされるため、インデクサーを手動で実行できます。

Azure ポータルからインデクサーを実行状態とメッセージを監視できるようにすることをお勧めします。

エラーがないと仮定すると、インデックスが設定され、 クエリとテストを進めることができます。

削除の追跡

BLOB の削除を効果的に管理するには、インデクサーを初めて実行する前に 削除の追跡 を有効にしてください。 この機能により、システムはソースから削除された BLOB を検出し、対応するコンテンツをインデックスから削除できます。

関連項目