はじめに
社内で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を構築の流れ
- 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_IDREPOSITORY_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_IDREPOSITORY_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を使ってログイン管理をできるようにしていきます。ログイン管理実装の流れは以下の通りです。
:::message
**ログイン管理実装の流れ**
1. IPアドレスの確保
1. DNS設定
1. Cloud Load Balancingの作成・設定
1. Identity-Aware Proxy (IAP) の設定
:::
## IPアドレスの確保
以下のコマンドを実行します
```bash
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) の設定手順
- 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を安全に使いたい場合は参考にしてみてください。