こんにちは、igaです。
先日、久しぶりにライブで声を出したらのどが枯れてしまいました。
前回に引き続き、Azure OpenAIのセキュリティを向上させるため、ネットワークのアクセス制限について確認します。
今回は、以前検証した独自データを使用する場合のネットワークのアクセス制限について確認します。
Azure OpenAIの構成
前回の構成で、Azure OpenAIに対してインターネットからのアクセス制限を行いました。
独自データ(原文の表記はon your data)を使用する場合、構築した直後はデータを保持するCognitive Searchがインターネット上のどこからでもREST APIによるリクエストが受信可能な状態になっています。
Cognitive Searchを利用するためには、通常、APIキーが必要になります。
APIキー自体、ランダムな数字と文字で生成されるもので、これだけでもある程度セキュリティは確保できるものの、もし、APIキーが外部に知られてしまうと、想定していない人や環境から、自社のAzure OpenAIにアクセスされてしまいます。
APIキーが万が一漏洩してしまった場合に、前回のAzure OpenAIと同様にCognitive Searchを不正に利用されないようにするため、ネットワークのアクセスを制限します。
ネットワークアクセス制限のポイント
2023年9月時点では、Azure OpenAIがon your dataで利用するCognitive Searchのネットワークアクセスを制限するには、Microsoftへの申請が必要になります。
(以下のページの内容で、「仮想ネットワークのサポート & プライベート エンドポイントのサポート」を参照してください。)
learn.microsoft.com
申請に対しての審査が行われ、審査がOKであれば5営業日以内にメールでAzure OpenAIからのアクセス先URLがメールで連絡されます。
利用までの流れは次のようになります。
①Azure OpenAIをデプロイする
②Azure OpenAI Studioからon your dataの投入を行う
③ネットワークアクセス制限の申請を行う
④Cognitive Searchのネットワークアクセスを制限する
⑤Azure OpenAIのネットワークアクセスを制限する
①Azure OpenAIをデプロイする
こちらの記事を参考に、Azure OpenAIをデプロイします。
Azure OpenAI Service のはじめ方 - Taste of Tech Topics
②Azure OpenAI Studioからon your dataの投入を行う
こちらの記事を参考に、Azure OpenAIにon your dataでデータを登録します。
Azure OpenAI Service 「on your data」 で独自データを使ったチャットを実現する - Taste of Tech Topics
③ネットワークアクセス制限の申請を行う
以下のヘルプにあるように、on your dataを投入したCognitive SearchとAzure OpenAIにアクセス制限を行うための申請を行います。
learn.microsoft.com
申請画面には、Cognitive SearchとAzure OpenAIの情報を記入するようになっています。
Cognitive SearchのリソースIDを指定します。
Cognitive Searchの「プロパティ」を選択して、要点のIDに表示される値をFormに入力します。
Azure OpenAIの場所を指定します。
Azure OpenAIの「概要」を選択して、基本の場所に表示される値をFormに入力します。
これで、申請が通るまで待ちます。
④Cognitive Searchのネットワークアクセスを制限する
Cognitive Searchの「ネットワーク」から「パブリックアクセス」を選択します。
作成した状態では「すべてのネットワーク」が選択された状態になっているため、インターネットからアクセスできる状態になっています。
これを、「選択されたネットワーク」にすることで限られたネットワークからのアクセスに制限します。
「クライアントIPアドレスの追加」を押すことで、Azure Portalを操作しているネットワークからの接続が許可されるので、「保存」を押して設定した情報を反映します。
続いて、「プライベートアクセス」タブを選択すると、申請したCognitive Searchへのプライベートエンドポイントが表示されます。
接続状態が「保留中」になっているため、利用可能な状態にするため「承認」を押します。
承認の確認ダイアログが表示されるので、説明を入力して「OK」を押すとプライベートエンドポイントの接続状態が「承認済み」になり利用できるようになります。
⑤Azure OpenAIのネットワークアクセスを制限する
前回の内容を元にして、Azure OpenAIのネットワークアクセスを制限します。
acro-engineer.hatenablog.com
Azure OpenAIにアクセスするPythonのプログラムで、on your dataを利用するため、dataSourcesオプションを指定します。
import os import math import json import requests def chat_to_ai(): api_type = "azure" api_base = "https://xxxxx.openai.azure.com" api_version = "2023-06-01-preview" # on your data に対応したAPIバージョンを指定する api_key = os.getenv("OPENAI_API_KEY") deployment_id = "ChatTest" api_url = f'{api_base}/openai/deployments/{deployment_id}/chat/completions?api-version={api_version}' req_headers = { "Content-Type": "application/json", "api-key": f'{api_key}' } # 問い合わせ内容 messages = [ { "role":"system", "content":"You are an AI assistant that helps people find information." }, { "role": "user", "content": "SQLインジェクションによる脅威と根本的な対策を教えてください" } ] # on your dataの指定 dataSources = [ { "type": "AzureCognitiveSearch", "parameters": { "endpoint": "https://xxxxxxx.search.windows.net", "key": "xxxxxxxxxxx", "indexName": "on-your-data-index", "semanticConfiguration": "", "queryType": "simple", "fieldsMapping": None, "inScope": True, "roleInformation": "You are an AI assistant that helps people find information." } } ] req_body = { "messages": messages, "dataSources": dataSources # On your dataを利用する } response = requests.post(api_url, headers=req_headers, data=json.dumps(req_body)) if response.status_code == 200: # Azure OpenAIから正常応答が返ってきた場合は、レスポンスBodyをJSON形式に変換して返す return json.loads(response.text) else: # Azure OpenAIから正常応答が返ってこない場合は、Azure OpenAIのレスポンスと同じ構造でHTTPステータスコードを返す return { 'choices': [ { 'message': { 'content': f'error status: {response.status_code}' } } ] } if __name__ == '__main__': ai_response = chat_to_ai() print(ai_response.get('choices', [{}])[0].get('message', {}).get('content', 'NO_CONTENT'))
このプログラムを動かすと、on your dataに含まれる内容を要約して返してくれます。
プライベートアクセス時の制限
Azure OpenAIのネットワークアクセス制限を行うと、Azure OpenAI StudioからAzure OpenAIに対する操作ができなくなります。
そのため、on your dataのデータ投入を行ってからネットワークアクセスの制限を行うことになります。
まとめ
Azure OpenAIでon your dataを利用するネットワークの制限を行う方法を確認しました。
アクセス制限を行うことで、意図しない利用を避けることができるため、要件に応じて導入を検討してください。
Acroquest Technologyでは、キャリア採用を行っています。
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- Elasticsearch等を使ったデータ収集/分析/可視化
- マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。Kaggle Grandmasterと一緒に働きたエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの採用 - Wantedlywww.wantedly.com