Azure AI 検索 インデクサーを使用して Microsoft Purview の秘密度ラベルを取り込み、ドキュメント レベルのセキュリティを適用する (プレビュー)

メモ

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

重要

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

Azure AI 検索 では、Microsoft Purview 機密ラベルの抽出とクエリ時の適用をサポートしています(プレビュー)。 インデックス作成中に、各ドキュメントの秘密度ラベルメタデータが自動的に抽出され、格納されます。 クエリ時には、Microsoft Purviewの既存の情報保護ポリシーに従ってラベルベースのアクセス制御が適用され、承認されたユーザーのみが検索結果のラベル付きコンテンツを取得できるようになります。

この機能は、次のデータ ソースで使用できます。

秘密度ラベルでラベル付けされたドキュメントがAzure AI 検索にインデックス付けされる、管理された RAG ソリューションMicrosoft Purview示すアーキテクチャ図。 RAG オーケストレーターでは、ラベルによってクエリ結果がフィルター処理されるため、ジュニア ユーザーには全般コンテンツのみが表示され、エグゼクティブ ユーザーには [全般]、[社外秘]、[非常に機密性の高いコンテンツ] が表示されます。

前提 条件

重要

検索サービスは、システム割り当てマネージド ID を使用して、Microsoft Purviewで認証する必要があります。 この機能では、ユーザー割り当てマネージド ID はサポートされていません。

制限

  • Azure ポータルでは、この機能はサポートされていません。

  • オートコンプリート API と Suggest API は、ラベルベースのアクセス制御をまだ適用できないため、Purview 対応インデックスではサポートされていません。

  • ゲスト アカウント とテナント間クエリはサポートされていません。

  • ユーザー割り当てのマネージド ID は、Microsoft Purview のロール割り当てでサポートされていません。 ラベル抽出に必要な ロールと Content.SuperUser ロールを保持できるのは、サービスの UnifiedPolicy.Tenant.Read だけです。 これらのロールをサービス自身の ID に直接割り当てます。インデクサーの代わりに特権 EXTRACT 操作 (暗号化されたコンテンツとセキュリティ分類の読み取り) が実行されます。 手順 1 と手順 3 を参照してください。

  • 次のインデクサー機能では、秘密度ラベルを持つドキュメントはサポートされていません。 スキルセットまたはインデクサーでこれらの機能のいずれかを使用する場合、秘密度ラベルを持つドキュメントは処理されません。

ポリシーの適用のしくみ

秘密度ラベルのサポートには、インデックス作成とクエリ時間の適用という 2 つのフェーズがあります。

インデックス

スケジュールに基づいてインデックス作成を構成すると、インデクサーは新しいドキュメントと更新をデータ ソースからプルします。 ドキュメントごとに、次の情報がキャプチャされます。

  • ドキュメントコンテンツ
  • 関連付けられている秘密度ラベル
  • 前回のインデクサー実行以降のコンテンツまたはラベルの変更

メモ

インデックスには、次にインデクサーが正常に実行されるまで、ソース ドキュメントのラベルの変更は反映されません。

クエリの実行時制御

クエリ時に、Azure AI 検索は秘密度ラベルを評価し、ユーザーのMicrosoft Entra ID トークンとMicrosoft Purview ラベル ポリシーに基づいて document レベルのアクセス制御を適用します。 特定のラベルのすぐ下にある READ 使用法 のコンテンツにアクセスする権限を持つユーザーのみが、検索結果内の対応するドキュメントを取得できます。

承認された管理者は、elevated read 要求を発行することもできます。この要求は、呼び出し元ユーザーが通常は表示しないラベル付きドキュメントを返し、返されるすべてのドキュメントに対してMicrosoft Purview監査ログ エントリを出力します。 昇格された読み取りには、検索サービスでの Search Index Data Contributor ロールと、API バージョン 2026-05-01-preview 以降が必要です。

エンドツーエンドの例

次の図は、秘密度ラベルが作成から検索エクスペリエンスにどのように流れるかを示しています。 最初の画像では、ユーザーが Confidential ラベルをMicrosoft Wordのドキュメントに適用します。 2 番目の画像では、エンタープライズ チャットボットがクエリ時にそのラベルを適用し、機密コンテンツのコピーと共有アクションをブロックします。

非ビジネス、パブリック、一般、機密、サブラベルとしてProject黒曜石と受信者のみ、極秘を含むラベル階層を示すMicrosoft Wordの秘密度メニューのスクリーンショット。現在、この文書には機密ラベルが適用されています。

番号付きの引用文献を含むポリシー対応の応答を表示する Contoso エンタープライズ チャットボットのスクリーンショット。参照パネルには、機密プロジェクト Obsidian 機密度ラベル バナー、コピーと共有のアクションがブロックされていること、およびドキュメントごとの機密度ラベルが表示されています。

1. AI Search マネージド ID を有効にする

Azure AI 検索 サービスのシステム割り当てマネージド ID を有効にします。この機能では、ユーザー割り当てマネージド ID はサポートされていません。 インデクサーは、この ID を使用してMicrosoft Purviewで認証し、秘密度ラベルのメタデータを抽出します。 また、 手順 3 でロールの割り当てを受け取る必要があります。

2. AI Search サービスで RBAC を有効にする

Azure AI 検索 サービスでロールベースのアクセス制御 (RBAC) を有効にします。 コンテンツのインデックス作成やインデックスのクエリなどのコンテンツ関連の操作が成功するためには、この手順が必要です。 API キーに依存する操作が中断されないように、RBAC キーと API キーの両方を保持します。

3. 秘密度ラベルを抽出するアクセス権を付与する

Microsoft Purview の機密ラベルメタデータにアクセスするには、暗号化されたコンテンツの読み込みやセキュリティ分類の確認など、高度な特権を必要とする操作が含まれます。 Azure AI 検索でこの機能を有効にするには、組織の内部ガバナンスと承認プロセスに従って、サービスのマネージド ID に特定のロールを付与する必要があります。

グローバル役割管理者または特権役割管理者を特定する

検索サービスのアクセス許可を承認できるユーザーを決定する必要がある場合は、Microsoft Entra テナントでアクティブまたは適格なグローバル管理者を見つけることができます。

  1. Azure ポータルで、Microsoft Entra ID を検索します。

    Microsoft Entra 製品の検索アクションのスクリーンショット

  2. 左側のナビゲーション ウィンドウで、[>ロールと管理者の管理] を選択します。

    [Entra ロールと管理者] ページのスクリーンショット。

  3. グローバル管理者または特権ロール管理者ロールを検索して選択します。

    グローバル管理者ロールの選択のスクリーンショット。

  4. [ 対象の割り当て ] と [ アクティブな割り当て] で、アクセス許可のセットアップ プロセスを実行する権限を持つ管理者の一覧を確認します。

    ロールの資格のある割り当てとアクティブな割り当てのスクリーンショット。

セキュリティで保護されたガバナンスの承認

内部のセキュリティチームまたはコンプライアンス チームと連携して、要求を確認します。 Microsoftは、ロールの割り当てを続行する前に、会社の標準的なガバナンスとセキュリティ レビュー プロセスに従うことをお勧めします。

承認されたら、グローバル管理者または特権ロール管理者は、Azure AI 検索システム割り当てマネージド ID に次のロールを割り当てる必要があります。

  • Content.SuperUser – ラベルとコンテンツ抽出用
  • UnifiedPolicy.Tenant.Read – Purview ポリシーとラベル メタデータへのアクセス

PowerShell を使用してロールを割り当てる

メモ

これらのロールは、ユーザー割り当てマネージド ID、サービス プリンシパル、または個々のユーザー アカウントではなく、Azure AI 検索 サービスのシステム割り当てマネージド ID にのみ割り当てます。 PowerShell スクリプトは、サービス リソースからマネージド ID オブジェクト ID を自動的に取得します。

グローバル管理者または特権ロール管理者は、次の PowerShell スクリプトを使用して、必要なアクセス許可を付与する必要があります。 プレースホルダーの値を実際のサブスクリプション、リソース グループ、および検索サービス名に置き換えます。

Install-Module -Name Az -Scope CurrentUser
Install-Module -Name Microsoft.Entra -AllowClobber
Import-Module Az.Resources
Connect-Entra -Scopes 'Application.ReadWrite.All'

$resourceIdWithManagedIdentity = "subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Search/searchServices/<searchServiceName>"
$managedIdentityObjectId = (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId

# Microsoft Information Protection (MIP)
$MIPResourceSP = Get-EntraServicePrincipal -Filter "appID eq '870c4f2e-85b6-4d43-bdda-6ed9a579b725'"
New-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityObjectId -Principal $managedIdentityObjectId -ResourceId $MIPResourceSP.Id -Id "8b2071cd-015a-4025-8052-1c0dba2d3f64"

# Microsoft Rights Management Services (MRMS) - Service Principal for policy read
$MRMSResourceSP = Get-EntraServicePrincipal -Filter "appID eq '00000012-0000-0000-c000-000000000000'"
New-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityObjectId -Principal $managedIdentityObjectId -ResourceId $MRMSResourceSP.Id -Id "7347eb49-7a1a-43c5-8eac-a5cd1d1c7cf0"

指定された PowerShell スクリプトの appID ロールは、次のAzureロールに関連付けられます。

AppID サービス プリンシパル
870c4f2e-85b6-4d43-bdda-6ed9a579b725 Microsoft Info Protection 同期サービス
00000012-0000-0000-c000-000000000000 Microsoft Rights Management サービス

4. Purview 秘密度ラベルを有効にするようにインデックスを構成する

秘密度ラベルのサポートが必要な場合は、purviewEnabled プロパティをtrueでに設定します。

重要

purviewEnabled プロパティは、インデックスの作成時にtrueに設定する必要があります。 この設定は永続的であり、後で変更することはできません。

purviewEnabledが true に設定されている場合、すべてのドキュメント操作 API で RBAC 認証のみがサポートされます。

API キーのアクセスは、インデックス スキーマの取得 (リストと取得) に制限されます。

PUT https://{service}.search.windows.net/indexes('{indexName}')?api-version=2026-08-01-preview
{
  "purviewEnabled": true,
  "fields": [
    {
      "name": "sensitivityLabel",
      "type": "Edm.String",
      "filterable": true,
      "sensitivityLabel": true,
      "retrievable": true
    }
  ]
}

5. データ ソースを構成する

秘密度ラベルの取り込みを有効にするには、indexerPermissionOptions プロパティを ["sensitivityLabel"] に設定して データ ソース を構成します。

{
  "name": "purview-sensitivity-datasource",
  "type": "azureblob", // < adjust type value according to the data source you are enabling this for: sharepoint, onelake, adlsgen2.
  "indexerPermissionOptions": [ "sensitivityLabel" ],
  "credentials": {
    "connectionString": <your-connection-string>;"
  },
  "container": {
    "name": "<container-name>"
  }
}

indexerPermissionOptions プロパティは、インジェスト中に秘密度ラベルメタデータを抽出し、インデックス付きドキュメントに添付するようにインデクサーに指示します。

6. スキルセットでインデックス プロジェクションを構成する (該当する場合)

インデクサーに スキルセット があり、 テキスト分割スキルを使用してデータ チャンクを実装する場合 (統合ベクター化など)、 スキルセット内のインデックス プロジェクションを使用して各チャンクに秘密度ラベルを投影します。

アクセス許可フィールドと ACL フィールドがインデクサー フィールド マッピングとインデックス プロジェクションに属する場合のより広範な規則については、「 ACL フィールドを設定する場所の選択」を参照してください。

この手順は、クエリ時の強制適用と、エージェント型検索の応答に各チャンクについてドキュメントごとの sensitivityLabelInfo を含めることの両方に必要です。 プロジェクション マッピングがないと、子チャンク行は正しくフィルター処理されません。

PUT https://{service}.search.windows.net/skillsets/{skillset}?api-version=2026-08-01-preview
{
  "name": "my-skillset",
  "skills": [
    {
      "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
      "name": "#split",
      "context": "/document",
      "inputs": [{ "name": "text", "source": "/document/content" }],
      "outputs": [{ "name": "textItems", "targetName": "chunks" }]
    }
    // ... (other skills such as embeddings, entity recognition, etc.)
  ],
  "indexProjections": {
    "selectors": [
      {
        "targetIndexName": "chunks-index",
        "parentKeyFieldName": "parentId",          // must exist in target index
        "sourceContext": "/document/chunks/*",     // match your split output path
        "mappings": [
          { "name": "chunkId",           "source": "/document/chunks/*/id" },     // if you create an id per chunk
          { "name": "content",           "source": "/document/chunks/*/text" },   // chunk text
          { "name": "parentId",          "source": "/document/id" },              // parent doc id
          { "name": "sensitivityLabel",  "source": "/document/metadata_sensitivity_label" } // <-- parent → child
        ]
      }
    ],
    "parameters": {
      "projectionMode": "skipIndexingParentDocuments"
    }
  }
}

7. インデクサーを構成する

  • 抽出されたラベル メタデータをインデックス フィールドにルーティングするように 、インデクサー定義 でフィールド マッピングを定義します。 データ ソースが別のフィールド名 ( metadata_sensitivity_label など) でラベル メタデータを出力する場合は、明示的にマップします。
{
  "fieldMappings": [
    {
      "sourceFieldName": "metadata_sensitivity_label",
      "targetFieldName": "sensitivityLabel"
    }
  ]
}
  • インデクサーは、スケジュールされたインデクサーの実行中にドキュメントのラベル、コンテンツ、またはメタデータへの変更を検出すると、秘密度ラベルの更新に自動的にインデックスを付けます。 定期的なスケジュールでインデクサーを構成します。 サポートされる最小間隔は 5 分ごとです。

次の手順