Difyの公開アプリをBasic認証で特定の人に公開する方法︎

2024年10月24日
2024年11月02日
Shumpei Okanoue / Noviq Inc.代表
Shumpei Okanoue / Noviq Inc.代表
Difyの公開アプリをBasic認証で特定の人に公開する方法︎

Difyの弱みは作成したアプリケーションなどの認証の部分にあります。

公開したアプリを特定の人にしか使えないようにしたいなどのニーズがあると思いますが、

DifyのSaaS版などでは対応することが難しく、自社でのホスティングにおいても個別に設定が必要です。

アプリへのアクセス制限の選択肢

Dify SaaS版 Professional Dify SaaS版 Team Dify コミュニティ版 +Basic認証 Dify コミュニティ版 +フロントアプリでの認証
アプリ作成者 3人 無制限 無制限 無制限
アプリの限定公開の対応策 アプリケーションは公開せず Dify管理画面上から利用する アプリケーションは公開せず Dify管理画面上から利用する Basic認証を実装することでアプリ全体に制限を設けることが可能 フロントのアプリケーションを自作し、認証機能を実装
アプリ利用者 Dify招待者のみ Dify招待者のみ Basic認証のパスワードを知っている人は利用可能 フロントのアプリケーションの認証に依存
備考 ユーザ数の制限があるため 3人までしか利用できない Dify招待者は利用できる アプリごとなど細かい認証は不可能 DifyをAPIサーバーとして利用する 細かいカスタマイズは実装次第で可能

ニーズや予算によって適切な運用方法を検討しましょう。

この記事での環境

この記事では、Xserver VPS上にホストされたDifyアプリケーションの設定を前提にしています。具体的には、以下の環境を使用して進めます。

  • サーバー環境: Xserver VPS
  • Difyバージョン: 0.10.1

Xserver VPSは、仮想プライベートサーバーであり、ユーザーがシステム設定やサーバー管理に柔軟に対応できるホスティングサービスです。Difyは、LLM(大規模言語モデル)を利用したアプリケーション構築プラットフォームで、現在使用しているバージョンは0.10.1です。このバージョンに基づいて、設定手順を行っていきます。

この記事の注意事項

この記事で紹介している手順は特定の環境を想定していますが、システム環境や構成は利用者によって異なるため、実行前には適切な調整が必要です。特に、ファイルパスやコンテナ名は自分のシステムに合わせて確認してください。また、設定変更やコマンド実行はリスクを伴うため、必ずテスト環境で事前に動作確認を行い、本番環境に適用する際は慎重に進めましょう。

Basic認証のみでは十分なセキュリティ対策とは言えません。インターネット上でサービスを公開する場合は、SSL/TLS(HTTPS)を導入し、通信の暗号化を必ず行うことが推奨されます。NGINXの設定にミスがあるとサービスが停止する可能性があるため、設定変更後は必ずチェックを実施し、問題がないことを確認してからリロードや再起動を行ってください。

※全ての操作は自己責任で行ってください。障害を防ぐためには、設定ファイルやデータのバックアップを忘れずに取り、公式ドキュメントを確認すること、必要であれば専門家に相談することが重要です。

設定手順

手順1:apache2-utilsをインストール

以下のコマンドを実行してapache2-utilsをインストールします。

bash
sudo apt update
sudo apt install apache2-utils

インストールが完了したら、htpasswdコマンドが正しくインストールされているか確認します。

bash
htpasswd -v

このコマンドを実行して、バージョンが表示されればインストールは正常に完了しています。

以上の手順で、Basic認証に必要なhtpasswdコマンドを使用できるようになります。

手順2: docker-compose.yamlファイルを開く

最初に、docker-compose.yamlファイルを開いてNGINXの設定を確認します。以下のコマンドを実行して、ファイルを開きます。

bash
nano /root/dify/docker/docker-compose.yaml

手順3: NGINXセクションを確認する

ファイルを開いたら、nginxセクションを探します。特にvolumesセクションで./nginx/conf.d:/etc/nginx/conf.dのような記述を確認します。以下のような記述が出ると思います。

yaml
services:
  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/nginx.conf.template:/etc/nginx/nginx.conf.template

手順4: htpasswdコマンドを使用してパスワードファイルを作成

次に、htpasswdコマンドを使ってBasic認証用のパスワードファイルを作成します。

手順4-1: nginx/conf.dディレクトリに移動

以下のコマンドでnginx/conf.dディレクトリに移動します。

bash
cd /root/dify/docker/nginx/conf.d

手順4-2: htpasswdコマンドでパスワードファイルを作成

以下のコマンドを使用して、パスワードファイルを作成します。[username]の部分は実際のユーザー名に置き換えてください。

bash
sudo htpasswd -c ./.htpasswd [ログイン時に使用するユーザーネームを書く]

手順4-3: パスワードの入力

実行後、パスワードの入力を求められるので、2回入力して設定します。

bash
New password: ********
Re-type new password: ********
Adding password for user [username]

手順4-5: ファイルの確認

以下のコマンドでパスワードファイルが正しく作成されたか確認します。

bash
ls -l .htpasswd

手順5: default.conf.templateを編集してBasic認証を追加

次に、default.conf.templateファイルを編集してBasic認証を追加します。

手順5-1: nginx/conf.dディレクトリに移動

再度、nginx/conf.dディレクトリに移動します。

bash
cd /root/dify/docker/nginx/conf.d

手順5-2: default.conf.templateの編集

以下のコマンドでdefault.conf.templateファイルを開きます。

bash
sudo nano default.conf.template

手順5-3: location /ブロックに認証設定を追加

location /ブロックに以下の2行を追加してBasic認証を設定します。

bash
location / {
    auth_basic "Restricted";                          # Basic認証を有効にする
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd; # .htpasswdのパス
    proxy_pass http://web:3000;                       # リバースプロキシの設定
    include proxy.conf;
}

手順5-4: ファイルを保存して終了

編集が終わったら、Ctrl + Oでファイルを保存し、Ctrl + Xでエディタを終了します。

手順5-5: NGINXの設定をリロード

Docker内でNginxを再起動して設定を反映させます。

bash
docker exec -it docker-nginx-1 /bin/sh
nginx -s reload

手順6: Webサーバのコンテナに入って設定を確認

Basic認証が正しく適用されているか確認するため、Webサーバのコンテナに入って設定を確認します。

手順6-1: Webサーバのコンテナに入る

まず、コンテナの名前を確認し、以下のコマンドでWebサーバのコンテナに入ります。

bash
docker exec -it <コンテナ名> /bin/sh

例:

bash
docker exec -it docker-nginx-1 /bin/sh

手順6-2: .htpasswdファイルの確認

次に、.htpasswdファイルが正しく作成されているかを確認します。

bash
cd /etc/nginx/conf.d
ls -la
bash
cat .htpasswd

上記を行うと、ユーザー名:ハッシュ化されたパスワードが表示されればOKです。

手順6-3: default.confファイルの確認

次に、default.confファイルが正しく反映されているかを確認します。

bash
cat default.conf

以下のように、先ほど設定したBasic認証の設定が含まれていることを確認します。

bash
server {
    ...
    location / {
      auth_basic "Restricted";
      auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
      proxy_pass http://web:3000;
      include proxy.conf;
    }
    ...
}

手順6-4: Nginx設定ファイルのテスト

Nginxの設定が正しいかどうかテストします。

bash
docker exec -it docker-nginx-1 /bin/sh
nginx -t

syntax is okやtest is successfulと表示されれば問題ありません。

Difyにアクセスしてみる

スクリーンショット2024-10-2420.48.02.webp

きちんと認証できました。

スクリーンショット2024-10-2421.39.11.webp

まとめ

今回は、Xserverで立ち上げたDifyにBasic認証をつける方法を解説しました。
皆様の参考になれば幸いです。

弊社では、生成AI使い方がわからない、Dify使ってみたけど思うようにうまくいかない、そんな方にDifyのセットアップやワークフロー構築などの支援が可能です。ご興味をお持ちいただければ問い合わせよりお気軽にご相談お待ちしております。

参考文献

https://note.com/ko_yamazaki/n/nbcd7662923c2
https://note.com/herotaka/n/n8579f4f12911

記事をシェアする