チュートリアル: Azure AI Search でのフルテキスト検索用の暗号化された BLOB のインデックス付けと強化

このチュートリアルでは、Azure AI Search を使用して、Azure Blob Storage 内でカスタマー マネージド キーで事前に暗号化されたドキュメントにインデックスを付ける方法を紹介します。

通常、インデクサーは Azure Key Vault のカスタマー マネージド暗号化キーにアクセスできないため、Azure Blob Storage クライアント ライブラリのクライアント側暗号化を使用して暗号化された BLOB からコンテンツを抽出することはできません。 しかし、DecryptBlobFile カスタム スキルを利用した後、DocumentExtractionSkill を利用することにより、キーへの制御されたアクセスを提供してファイルを解読した後、そこからコンテンツを抽出することができます。 これにより、格納されているドキュメントの暗号化状態を損なうことなく、これらのドキュメントにインデックスを作成するして強化する機能のロックが解除されます。

Azure Blob Storage の PDF、HTML、DOCX、PPTX など、以前に暗号化されたドキュメント全体 (非構造化テキスト) から、このチュートリアルでは REST クライアントと Search REST API を使用して、次のタスクを実行します。

  • ドキュメントを解読し、そこからテキストを抽出するパイプラインを定義する。
  • 出力を格納するためのインデックスを定義する。
  • パイプラインを実行して、インデックスを作成し、データを読み込む。
  • フルテキスト検索と豊富なクエリ構文を使用して結果を探索する。

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

前提条件

カスタムスキルデプロイでは、Azure Function アプリと Azure Storage アカウントが作成されます。 これらのリソースは作成されるため、前提条件として一覧表示されません。 このチュートリアルが終了したら、使用していないサービスに対して課金されないように、リソースのクリーンアップを忘れないで行ってください。

注意

スキルセットでは、多くの場合、Azure AI マルチサービス リソースをアタッチする必要があります。 記載されているように、このスキルセットは Azure AI サービスに依存しないため、キーは必要ありません。 組み込みのスキルを呼び出す基づく拡張を後で追加する場合は、それに応じてスキルセットを更新することを忘れないでください。

1 - サービスを作成し、資格情報を収集する

カスタム スキルをデプロイする

この例では、GitHub の Azure Search Power Skills リポジトリのサンプル プロジェクト DecryptBlobFile を使用します。 このセクションでは、スキルセットで使用できるようにスキルを Azure 関数にデプロイします。 組み込みのデプロイ スクリプトにより、名前が psdbf-function-app- で始まる Azure 関数リソースが作成されて、スキルが読み込まれます。 サブスクリプションとリソース グループを指定するように求められます。 Azure Key Vault インスタンスが存在するのと同じサブスクリプションを選択してください。

運用上、DecryptBlobFile スキルによって、各 BLOB の URL と SAS トークンが入力として受け取られ、Azure AI Search で必要なファイル参照コントラクトを使用して、ダウンロードされて解読されたファイルが出力されます。 解読を実行するには、DecryptBlobFile に暗号化キーが必要であることを思い出してください。 設定の一部として、Azure Key Vault 内の暗号化キーへのアクセスを DecryptBlobFile 関数に許可するアクセス ポリシーも作成します。

  1. DecryptBlobFile のランディング ページにある [Azure に配置する] ボタンをクリックします。提供された Resource Manager テンプレートが Azure portal で開かれます。

  2. Azure Key Vault インスタンスが存在するのと同じサブスクリプションを選択します (別のサブスクリプションを選択した場合、このチュートリアルは機能しません)。

  3. 既存のリソース グループを選択するか、新しいリソース グループを作成します。 専用のリソース グループを使用すると、後でクリーンアップを簡単に行うことができます。

  4. [確認および作成] を選択し、使用条件に同意していることを確認した後、 [作成] を選択して Azure 関数をデプロイます。

    Azure portal の ARM テンプレート ページのスクリーンショット。

  5. デプロイが完了するまで待ちます。

暗号化解除ロジックと、アプリケーションデータを格納する Azure Storage リソースを含む Azure Function アプリが必要です。 次のいくつかの手順では、キー コンテナーにアクセスするためのアクセス許可をアプリに付与し、REST 呼び出しに必要な情報を収集します。

Azure Key Vault にアクセス許可を付与する

  1. ポータルで、Azure Key Vault サービスに移動します。 Azure Key Vault で、カスタム スキルへのアクセスをキーに許可するアクセス ポリシーを作成します。

  2. 左側のナビゲーション ウィンドウで アクセス ポリシー を選択し、+ 作成 を選択して、アクセス ポリシーの作成 ウィザードを開始します。

    左側のナビゲーション ペインのアクセス ポリシー コマンドのスクリーンショット。

  3. [テンプレートから構成][アクセス許可] ページで、[Azure Data Lake Storage] または [Azure Storage] を選択します。

  4. [次へ] を選択します。

  5. [プリンシパル] ページで、デプロイした Azure 関数インスタンスを選択します。 ステップ 2 でそれを作成するときに使用したリソース プレフィックスを使用して検索できます。既定のプレフィックス値は psdbf-function-app です。

  6. [次へ] を選択します。

  7. [レビュー + 作成] で、[作成] を選択します。

アプリ情報の収集

  1. ポータルで psdbf-function-app 関数に移動し、REST 呼び出しに必要な次のプロパティをメモしておきます。

  2. 関数の URL を取得します。これは、関数のメイン ページの [基本] にあります。

    Azure 関数アプリの概要ページと [Essentials] セクションのスクリーンショット。

  3. ホスト キー コードを取得します。[アプリ キー] に移動し、default キーをクリックして表示し、値をコピーします。

    Azure 関数アプリの [アプリ キー] ページのスクリーンショット。

  1. Azure portal にサインインし、自分の検索サービスの [概要] ページで、自分の検索サービスの名前を確認します。 エンドポイント URL を見ることで、自分のサービス名を確かめることができます。 エンドポイント URL が https://mydemo.search.windows.net だったら、自分のサービス名は mydemo になります。

  2. [設定]>[キー] で、サービスに対する完全な権限の管理キーを取得します。 管理キーをロールオーバーする必要がある場合に備えて、2 つの交換可能な管理キーがビジネス継続性のために提供されています。 オブジェクトの追加、変更、および削除の要求には、主キーまたはセカンダリ キーのどちらかを使用できます。

    サービス名、管理キー、クエリ キーの取得

すべての要求で、自分のサービスに送信される各要求のヘッダーに API キーが必要になります。 有効なキーにより、要求を送信するアプリケーションとそれを処理するサービスの間で、要求ごとに信頼が確立されます。

REST クライアントの設定

エンドポイントとキーの変数を作成します。

変数 情報の入手元
admin-key Azure AI Search サービスの [キー] ページ上。
search-service-name Azure AI Search サービスの名前。 URL は https://{{search-service-name}}.search.windows.net です。
storage-connection-string ストレージ アカウントの [アクセス キー] タブで、 [key1]>[接続文字列] を選択します。
storage-container-name インデックスを付ける暗号化されたファイルが含まれる BLOB コンテナーの名前。
function-uri メイン ページの [基本] の下にある Azure 関数内。
function-code Azure 関数で、 [アプリ キー] に移動し、default キーをクリックして表示し、値をコピー。
api-version 2020-06-30 のままにします。
datasource-name encrypted-blobs-ds のままにします。
index-name encrypted-blobs-idx のままにします。
skillset-name encrypted-blobs-ss のままにします。
indexer-name encrypted-blobs-ixr のままにします。

各要求を確認して実行する

HTTP 要求を使用して、エンリッチメント パイプラインのオブジェクトを作成します。

  • インデックスを作成するための PUT 要求: この検索インデックスには、Azure AI Search で使用され、返されるデータが保持されます。

  • データソースを作成するための POST 要求: このデータソースは、暗号化された BLOB ファイルを格納しているストレージアカウントへの接続を指定します。

  • スキルセットを作成するための PUT 要求:スキルセットにより、BLOB ファイルのデータを解読する Azure 関数のカスタム スキル定義と、解読された後の各ドキュメントからテキストを抽出するための DocumentExtractionSkill が指定されます。

  • インデクサーを作成するための PUT 要求: インデクサーを実行すると、BLOB が取得され、スキルセットが適用され、結果が格納されます。 この要求は最後に実行する必要があります。 スキルセットのカスタム スキルは、復号化ロジックを呼び出します。

インデックス作成の監視

インデックス作成とエンリッチメントは、インデクサー作成要求を送信するとすぐに開始されます。 ストレージ アカウントに含まれるドキュメントの数によっては、インデックス付けに時間がかかることがあります。 インデクサーがまだ実行されているかどうかを確認するには、インデクサー状態の取得要求を送信し、応答を確認して、インデクサーが実行されているかどうかを確認するか、エラーと警告の情報を表示します。

Free レベルを使用している場合は、次のメッセージが表示されます: "Could not extract content or metadata from your document. Truncated extracted text to '32768' characters"。 このメッセージが表示されるのは、Free レベルでの BLOB のインデックス作成には、文字の抽出に 32K の制限があるためです。 より上位のレベルでは、このデータ セットに対してこのメッセージは表示されません。

コンテンツを検索する

インデクサーの実行が完了したら、クエリを実行して、正常にデータが解読され、インデックスが付けられたことを確認できます。 ポータルで Azure AI Search Service に移動し、Search エクスプローラーを使用して、インデックスが付けられたデータに対してクエリを実行します。

リソースをクリーンアップする

所有するサブスクリプションを使用している場合は、プロジェクトの終了時に、不要になったリソースを削除することをお勧めします。 リソースを実行したままにすると、お金がかかる場合があります。 リソースは個別に削除することも、リソース グループを削除してリソースのセット全体を削除することもできます。

ポータルの左側のナビゲーション ウィンドウにある [すべてのリソース] または [リソース グループ] リンクを使って、リソースを検索および管理できます。

次のステップ

暗号化されたファイルに正常にインデックスを付けられたので、コグニティブなスキルをさらに追加して、このパイプラインを反復処理することができます。 これにより、データをエンリッチし、追加の分析情報を得ることができます。

二重に暗号化されたデータを使用している場合は、Azure AI Search で利用可能なインデックス暗号化機能を調査するようにします。 インデクサーでインデックスを付けるには解読されたデータが必要ですが、インデックスを付けた後は、カスタマー マネージド キーを使用して、検索インデックスで暗号化することができます。 これにより、データは保存時に常に暗号化されることが保証されます。 詳細については、Azure AI Search のデータ暗号化のためのカスタマー マネージド キーの構成に関する記事を参照してください。