はじめに
社内でChatGPTを活用する際に、Web上で公開されているChatGPTのUIを使用するのは、セキュリティ上、不安があります。APIを介してChatGPTを利用することで、会話の内容が学習に使用される心配がありません。そのため、Google Cloud Runを使用して、API経由でChatGPTを利用するChatbot UIを構築してみました。
そして、Cloud RunにデプロイしたChatbot UIをCloud Load BalancingとIdentity-Aware Proxyを使ってログイン管理をできるようにしていきます。
Cloud Run上でChatbot UIを構築
gcloudを使用して、コマンドで構築していきます。Chatbot UIを構築の流れは以下の通りです。
- Chatbot UIのGitHub から OSSのプログラム をクローンする
- Artifact Registry にリポジトリを作成する
- クローンした リポジトリ内のDocker ファイルをイメージにビルドする
- Artifact Registry の認証をする
- Artifact Registry のリポジトリにイメージをプッシュする
- Cloud Run上で、Chatbot UIを作成する
-
Chatbot UIのGitHub から OSSのプログラム をクローンする
git clone https://github.com/mckaywrigley/chatbot-ui.git
-
Artifact Registry にリポジトリを作成する
- [REPOSITORY_NAME]: 適当な名前
gcloud artifacts repositories create [REPOSITORY_NAME] --location=asia-northeast1 --repository-format=docker
-
クローンした リポジトリ内のDocker ファイルをイメージにビルドする
- [PROJECT_ID]: GCPのPROJECT_ID
- [REPOSITORY_NAME]: 先ほど作成したリポジトリ名
- [IMAGE_NAME]: 適当な名前
docker build ./chatbot-ui -t asia-northeast1-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE_NAME]
-
Artifact Registry の認証をする
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
-
Artifact Registry のリポジトリにイメージをプッシュする
- [PROJECT_ID]: GCPのPROJECT_ID
- [REPOSITORY_NAME]: 先ほど作成したリポジトリ名
- [IMAGE_NAME]: 先ほど作成したIMAGE_NAME
docker push asia-northeast1-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE_NAME]
-
Cloud Run上で、Chatbot UIを作成する
- [my-chatgpt-ui]: 適当な名前
gcloud run deploy [my-chatgpt-ui] \ --ingress=internal-and-cloud-load-balancing \ --image asia-northeast1-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE_NAME] \ --allow-unauthenticated \ --region=asia-northeast1
ログイン管理をする必要のない場合は、--ingress=allに変更してください。
この変更を行えば、Chatbot UIをすぐに利用できます。
ログイン管理
次に、Cloud RunにデプロイしたChatbot UIをCloud Load BalancingとIdentity-Aware Proxyを使ってログイン管理をできるようにしていきます。ログイン管理実装の流れは以下の通りです。
- IPアドレスの確保
- DNS設定
- Cloud Load Balancingの作成・設定
- Identity-Aware Proxy (IAP) の設定
IPアドレスの確保
以下のコマンドを実行します
gcloud compute addresses create [IPADDRESS_NAME] --project=[PROJECT_ID] --global
DNSの設定
確保した IP アドレスを参照する A レコードを Cloud DNS に設定します
Cloud Load Balancingの作成・設定
- ロードバランサの作成画面でHTTP(S) ロードバランシングを選択
-
以下の選択欄にチェックを入れる
- インターネットから VM またはサーバーレスサービスへ
- グローバル HTTP(S) ロードバランサ
-
フロントエンドを構成
- プロトコル の項目でHTTPS(HTTP/2 を含む)を選択
- 確保した IP アドレスを設定し、証明書を作成
-
バックエンドを構成
- バックエンド タイプ 項目でサーバーレス ネットワーク エンドポイント グループを選択
- 新しいバックエンド 項目でサーバーレス ネットワーク エンドポイント グループを作成
💡IAPを使う場合は、Cloud CDN オフにしましょう。 -
証明書の確認
- 作成したロードバランサの詳細画面から、証明書のステータスを確認する
- 証明書のステータスがACTIVEになっていれば成功
Identity-Aware Proxy (IAP) の設定
ロードバランサを介してCloud Runサービスに接続できましたが、現状ではインターネット上のユーザーがこのサービスにアクセスできてしまいます。そのため、ロードバランサにIAPを設定し、アクセス可能なユーザーを制限します。
手順は以下の通りです。
- Identity-Aware Proxy にアクセスし、先ほど作成したロードバランサのIAPをオンにする
-
IAPにアクセスを許可するアカウントをプリンシパルとして追加
- アクセスさせたいアカウントにロールとして、IAP-secured Web App Userを与える
まとめ
Google Cloud Runを使用して、Chatbot UIを構築してみました。
そして、Cloud RunにデプロイしたChatbot UIをCloud Load BalancingとIdentity-Aware Proxyを使ってログイン管理をできるようにしました。
社内でChatGPTを安全に使いたい場合は参考にしてみてください。