セキュリティチームのぐっちーです。Azure Logic Apps から Azure AI Search を呼び出す際、マネージド ID を使用した認証方法を紹介します。マネージド ID を使用することで、APIキーを Logic Apps 内に保存する必要がなくなり、セキュリティリスクを軽減できます。
前提条件
- Azure AI Search のリソースがデプロイされていること
- Azure Logic Apps(Basic)のリソースがデプロイされていること
ちなみに、Logic Apps から Azure OpenAI Service をマネージド ID で認証して呼び出す方法はマイクロソフトの中の方が個人的にブログにされていたのですが、AI Search ではちょっと手順が違ったのでブログにしています。
本ブログは2024年3月21日時点の情報を元に作成しています。
マネージド ID とは?
マネージド ID認証は、Azure リソースに「マネージドID」というIDを発行し、そのIDを使ってAzureの他のリソースに認証を行うことのできるサービスです。これにより、開発者がシークレット、資格情報、証明書、キーなどの管理を行う必要をなくしよりセキュアにサービスを構築することができます。1 本記事の場合は、Logic Apps 側にマネージドIDを発行し、そのIDを使って Azure AI Search にアクセスします。
手順
1. Logic App のマネージド ID を有効化
作成した Logic App を開き、左側のメニューから「設定」→「ID」を選択し、「システム割り当てマネージド ID」を「オン」に設定し、「保存」をクリックします。

2. Logic App のマネージド ID に Azure AI Search へアクセス許可を付与
Azure ポータルで Azure AI Search サービスを開き、左側のメニューから「設定」→「アクセス制御 (IAM)」を選択します。

「追加」→「ロールの割り当ての追加」をクリックし、「ロール」で「検索インデックス データ閲覧者」を選択します。

[ロールのの割り当ての追加] で「Logic App」を選択し、使用する Logic App を選択し、「保存」をクリックします。

3. Azure AI Search でマネージド ID での認証を有効化
Azure ポータルで Azure AI Search サービスを開き、[キー]のタブで、APIアクセス制御を[両方]に変更します。これでAPIキーとマネージドID認証の2つを利用できます。

4. Logic App からの Azure AI Search の呼び出し
Logic App デザイナーを開き「HTTP」アクションを追加し、以下のように設定します。

- Method: POST
- URI:
https://<your-search-service-name>.search.windows.net/indexes/<your-index-name>/docs/search?api-version=20XX-XX-XX
- Headers:
- Content-Type:
application/json
- Content-Type:
- Authentication: Managed Identity
- Audience:
https://search.azure.com
- Body:
{ "search": "<your-search-query>", "queryType": "simple", "searchMode": "all" }
詳細パラメーターは以下のように設定します。

Audience は https://search.azure.com/
に設定します。2
動作確認
APIキーを設定してないですが、Azure AI Searchの実行が成功しました。初めてやった際には不思議でしたが、便利ですよねー!

おまめ:APIキーの利用を禁止する
Azure ポータルで Azure AI Search サービスを開き、[キー]のタブで、APIアクセス制御を[ロールベースのアクセス制御]に変更すると、完全にAPIキーが使えなくなります。Logic Appsなどを経由しないと外部から侵害する経路がなくなるので、よりセキュアに構成することができます。

試しに、Postmanを使ってAzure AI Searchを叩いてみると、キーを正しく設定しているのに、応答が返ってきませんでした。

まとめ
Azure でセキュアな構成をとるにはVNetなどを使うケースなどもありますが、ネットワーク系のサービスを使うと余計にお金がかかったりするので、要件が合えばマネージドIDで構成するのが楽かつお金が掛からなくて良いと思います。採用できるか否かはセキュリティ要件次第かとは思いますが、ぜひ活用いただくと良いと思います。