1. 主要ページへ移動
  2. メニューへ移動
  3. ページ下へ移動

QES ブログ

記事公開日

Azure AI Search (旧称 "Azure Cognitive Search")で権限制御してみた2

  • このエントリーをはてなブックマークに追加

はじめに

以前の投稿で「Azure AI Search」で権限制御するための方法をご紹介しましたが、新たな権限制御方法がプレビュー機能として登場しましたので検証してみました。
※以前の記事(Azure AI Search (旧称 "Azure Cognitive Search")で権限制御してみた

新たな権限制御方法は、Azure Data Lake Storage Gen2 用に用意された機能で、特定のディレクトリまたはファイルへのユーザーごとのアクセス制御がEntra IDと連携して出来るようになっています。
検証してみた結果、通常のBlob Storageファイルに対しても使用できましたので、その方法をご紹介したいと思います。

事前にAzure AI Searchのポータル画面から「データのインポート」を使用してインデックス等作成した後、以下の対応を行います。
・セキュリティ用のフィールドを用意する
・用意したセキュリティ用のフィールドに値を設定する
・トークンを指定して検索する

セキュリティ用のフィールドを用意する

ポータル画面にてインデックスJSONエディターを表示し、以下のJSONを追加します。
    {
      "name": "UserIds",
      "type": "Collection(Edm.String)",
      "searchable": true,
      "filterable": true,
      "retrievable": false,
      "stored": true,
      "sortable": false,
      "facetable": true,
      "key": false,
      "permissionFilter": "userIds",
      "synonymMaps": []
    },
    {
      "name": "GroupIds",
      "type": "Collection(Edm.String)",
      "searchable": true,
      "filterable": true,
      "retrievable": false,
      "stored": true,
      "sortable": false,
      "facetable": true,
      "key": false,
      "permissionFilter": "groupIds",
      "synonymMaps": []
    },
permissionFilterがポイントのようです。また、typeを見ていただくと分かる通りコレクションになっていますので複数指定することが可能です。

用意したセキュリティ用のフィールドに値を設定する

本来は、スキルセットやインデクサーを用いて用意したフィールドに値を設定するところですが、検証ですのでREST APIを用いて値を更新していきます。
使用したPowerShellスクリプトは以下の通りです。
# パラメータの設定 
$serviceName = "<Azure AI Search名>" 
$indexName = "<インデックス名>" 
$apiVersion = "2025-05-01-preview" 
$adminKey = "<管理キー>" 

# リクエストの URL の作成 
$url = "https://$serviceName.search.windows.net/indexes/$indexName/docs/index?api-version=$apiVersion" 

# ヘッダーの設定 
$headers = @{ 
    "Content-Type" = "application/json" 
    "api-key" = $adminKey 
} 

# ボディの設定 (ここにインデックスするドキュメントの JSON データを指定) 
$body = @" 
{ 
    "value": [ 
        { 
            "@search.action": "merge", 
            "metadata_storage_path": "<更新対象のmetadata_storage_path>", 
            "UserIds": ["<ユーザーのオブジェクトID>"] 
            #"GroupIds": ["<グループのオブジェクトID>"]
        } 
    ] 
} 
"@ 

# POST リクエストの送信 
$response = Invoke-RestMethod -Method Post -Uri $url -Headers $headers -Body $body 

# レスポンスの表示 
$response | ConvertTo-Json 
こちらを用いて事前に用意していた3ファイルに権限を設定してみました。
No ファイル名 UserIds GroupIds
1 桃太郎.pdf 自身のオブジェクトIDを指定
2 浦島太郎.pdf 自身が所属するグループのオブジェクトIDを指定
3 金太郎.pdf

トークンを指定して検索する

検索する際に通常の問い合わせで3ファイルとも検索対象になってしまいますが、ヘッダーに「x-ms-query-source-authorization」を追加することで自身がアクセス許可された文書のみを対象に検索することが可能です。
使用したPowerShellスクリプトは以下の通りです。
# パラメータの設定 
$endpoint = "<Azure AI SearchのエンドポイントURL>" 
$indexName = "<インデックス名>" 
$apiVersion = "2025-05-01-preview" 
$searchToken ="<トークン>"

# リクエストの URL の作成 
$url = "$endpoint/indexes/$indexName/docs/search?api-version=$apiVersion" 

# ヘッダーの設定 
$headers = @{ 
    "Authorization" = "Bearer $searchToken" 
    "x-ms-query-source-authorization" = $searchToken
    "Content-Type" = "application/json" 
} 

# ボディの設定 
$body = @" 
{ 
    "search": "*"
} 
"@ 

# POST リクエストの送信 
$response = Invoke-RestMethod -Method Post -Uri $url -Headers $headers -Body $body 

# レスポンスの表示 
$response | ConvertTo-Json

※トークンは以下のコマンドから取得しました。
az login
az account get-access-token --scope https://search.azure.com/.default

結果は以下の通り、桃太郎.pdfと浦島太郎.pdfのみ取得できていることが分かると思います。
a564-01.jpg

まとめ

まだプレビューの機能ですが、グループに関してはネストしていても適切に判断してくれます。部署単位でセキュリティグループが用意されていることも多いと思いますので、この機能を使用することで部署単位で検索範囲を制限することが以前よりも容易になりそうです。
要望の多いSharePointのコンテンツ検索についてもこの機能が応用できそうですので、近い将来SharePointも対応してくれることを心待ちにしたいと思います。

QUICK E-Solutions では、各AIサービスを利用したシステム導入のお手伝いをしております。それ以外でも様々なアプリケーションの開発・導入を行っております。提供するサービス・ソリューションにつきましては こちら に掲載しております。

システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味を抱かれましたら、是非一度 お問い合わせ ください。

※このブログで参照されている、Microsoft、Azure AI Search、Azure OpenAI、Document Intelligence、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。
※その他の会社名、製品名は各社の登録商標または商標です。

 

  • このエントリーをはてなブックマークに追加

お問い合わせ

Contact

ご質問やご相談、サービスに関する詳細など、何でもお気軽にご連絡ください。下記のお問い合わせフォームよりお気軽に送信ください。

お問い合わせ

資料ダウンロード

Download

当社のサービスに関する詳細情報を掲載した資料を、下記のページよりダウンロードいただけます。より深く理解していただける内容となっております。ぜひご活用ください。

資料ダウンロード