はじめに
- 以前投稿した、Azure OpenAIのデータ ソース機能を検証した(APIバージョン. 2024-02-01) では、Azure AI Searchにはアクセス制限をかけていなかったため、AI SearchのAPIKeyが漏れた場合に、不正アクセスがなされるリスクがあった
- 今回、APIKeyを使わずに、「システム割り当てマネージドID」を使った認証に切り替えることで、OpenAI以外からのアクセスを完全に防御し、リスクを排除した
- 備忘録として記事に残しておく。APIバージョンは前回と同じ、2024-02-01を使用している
手順
OpenAIの「システム割り当てマネージドID」を有効化する
- OpenAIのリソースを開き、Identity > System assignedと進み、初期値はOFFになっているので、ONにする
Azure AI SearchでマネージドID認証を有効化する
- AI Searchのリソースを開き、Keysより、「API Access control」を、「Role-based access control」か「Both」にする
- 従来のAPIKeyでのアクセス手段も残しておく必要のある場合はBothにしておこう。
Azure AI SearchのIAMで、OpenAIにアクセス権を付与する
- Azure AI SearchのIAMを開き、以下の2つのRoleを、OpenAIのマネージドIDに付与する
- Search Service Contributor
- Search Index Data Reader
「Managed Identity」を選択し、メンバーに該当のOpenAIを選択しよう
Azure AI SearchのFirewallを有効化し、パブリックアクセスを禁止する
- Azure AI Searchを開き、Networking > Firewalls and virtual networks より、「Public network access」を「Disabled」にし、Exceptionsにチェックを入れる
参考:マネージドID認証の場合のリクエストBody
- 以下のようになる。
{
"messages": [
{
"role": "user",
"content": "ペット連れだけど大丈夫?"
}
],
"data_sources": [
{
"type": "azure_search",
"parameters": {
"endpoint": "https://{AI Searchサブドメイン}.search.windows.net",
"index_name": "{インデックス名}",
"authentication": {
"type": "system_assigned_managed_identity"
}
}
}
],
"max_tokens": 200,
"stream": false
}
- 以前のAPI Keyの場合(↓)は、キーをBodyに埋め込んでいたが、それも不要になった
"authentication": {
"type": "api_key",
"key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
ハマりどころ
- Azure AI Searchは、設定変更後、反映までに数分ディレイがあるので、それも考慮して確認すること
- 設定がうまくいかずエラーになる場合がある。以下を参考にチェックしよう。
- 400エラーの場合は、権限(RBACやIAM)まわりに問題
- 403エラーの場合は、ネットワークアクセス制限まわりに問題