ブログ

AWS で Dify 運用時に Application Load Balancer (ALB) と Amazon Cognito で認証機能を導入してみる

 社内で AI の活用は進んでいますか?ノーコード・ローコードで手軽に生成 AI アプリを構築できる OSS の Dify が注目を集めており、Dify を一度は耳にしたことがある方も多いのではないでしょうか。Dify は確かに強力なツールですが、使用する際にはセキュリティとアクセス制御に十分な注意を払う必要があります。

 本ブログでは、AWS 上に構築した Dify のアクセス制御について、Application Load Balancer (ALB) と Amazon Cognito を組み合わせてどのように認証を実現できるかを説明していきます。

Dify とは

 Dify はオープンソースプラットフォームで、生成 AI(ジェネレーティブ AI)アプリケーションの開発をプログラミングスキルなしで可能にできます。また、大きな特徴は直感的なインターフェースを通じて、AI エージェントや複雑な AI モデルをノーコードで簡単に構築できる点です。

 Dify を導入するメリットは、大幅な業務効率化を実現できることです。例えば、カスタマーサポート向けのチャットボットや、社内ナレッジベースを活用した質問応答システムなどを迅速に開発し、導入することが可能です。

Dify の公開における課題

 Dify の公開アプリ機能やウェブサイトへの埋め込み機能は、AI アプリケーションの迅速な展開と利用を可能にする非常に便利な機能です。しかし、実際の利用にあたっては重要な課題が存在します。

 最大の課題は、Dify 上での詳細なアクセス制限が無いことです。公開状態に設定すると、アプリケーションの URL を知っている人なら誰でもアクセスできてしまいます。一方で、インフラ側で IP アドレス制限をかけるなどの対策も考えられますが、これにも限界があります。例えば、在宅勤務や外出先からのアクセスを許可する必要がある場合、単純な IP アドレス制限では対応が困難です。

 さらに、異なる権限レベルを持つユーザーグループ(例:管理者、一般ユーザー、ゲストユーザーなど)に対して、それぞれ異なるアクセス権を付与したい場合にも、Dify の標準機能だけでは対応が難しいのが現状です。

Application Load Balancer (ALB) と Amazon Cognito を用いた解決策

 Dify の公開設定における課題に対して、AWS の Application Load Balancer (ALB) と Amazon Cognito を組み合わせることで、以下のような柔軟なアクセス制御が可能になります。

  1. 認証の一元管理
    • Amazon Cognito でユーザー管理を行い、Application Load Balancer (ALB) で認証を強制
    • Dify アプリケーションへのアクセスを認証済みユーザーのみに制限
  2. 細やかなアクセス制御
    • Amazon Cognito のユーザーグループ機能と Application Load Balancer (ALB) のルールを組み合わせ
    • 特定のユーザーグループにのみ特定のリソースへのアクセスを許可
  3. シングルサインオン(SSO)の実現
    • Amazon Cognito のフェデレーテッド認証機能を利用
    • 既存の認証システム(Active Directory などの ID プロバイダー)と連携
  4. 多要素認証の導入
    • Amazon Cognito の多要素認証機能を利用
    • セキュリティをさらに強化
  5. スケーラビリティとセキュリティの向上
    • Application Load Balancer (ALB) と Amazon Cognito はともにマネージドサービス
    • スケーラビリティとセキュリティの面で信頼性が高く、運用負荷を軽減

実装手順

 それでは Application Load Balancer (ALB) と Amazon Cognito を利用して認証機能を設定する手順を説明していきます。今回は多要素認証を実装いたします。本手順の構成は以下の通りです。

※ テーマとは外れるので以下内容はブログの中で触れません。

  • Amazon EC2 へ Dify の構築
  • Application Load Balancer (ALB) と Amazon EC2 の紐づけ
  • ACM での HTTPS 化

Amazon Cognito User pools の作成

マネジメントコンソールから Amazon Cognito > ユーザープール > ユーザープールを作成 を押下します。

アプリケーションタイプから「従来のウェブアプリケーション」を選択し、任意のアプリケーション名を付けます。

オプションを設定 > サインイン識別子のオプション から 「メールアドレス」を選択し、右下の「ユーザーディレクトリを作成する」を押下します。

ユーザープールが作成されているので、作成したユーザープールを押下します。

アプリケーションクライアントを押下します。

ログインページを押下します。

Web サイトの URL である、ドメインの末尾に /oauth2/idpresponse を付与します。これは、Application Load Balancer (ALB) 側と Amazon Cognito が連携する際に指定する、固定されているパスとなります。

記載したら右下の「変更を保存」を押下します。

Application Load Balancer (ALB) と Amazon Cognito の連携

マネジメントコンソールから EC2 > ロードバランサー から対象のロードバランサーを選択し、リスナーとルール > HTTPS:443 を選択 > ルールを管理 > ルールの編集 を押下します。

ルール > デフォルト を選択 > ルールの編集 を押下します。

デフォルトアクションの章で以下の通り設定し、右下の変更内容の保存を押下します。

  • OpenID または Amazon Cognito を使用する:チェックを入れる
  • アイデンティティプロバイダー:Amazon Cognito
  • ユーザープール:作成したユーザープールを選択
  • アプリケーションクライアント:作成したものを選択

動作確認

対象のドメインにアクセスします。「Create an account」を押下します。

Email アドレス、パスワードを設定して、Sign up を押下します。

登録したメールアドレスに以下のようなコードが送付されるので、コードを入力し Confirm account を押下します。

認証アプリで認証を求められるので、スマートフォンの認証アプリを起動し QR コードを読み取り、表示される番号を入力し、Sign in を押下します。

※手順では Microsoft Authenticator を使用しています。

※以下 はMicrosoft Authenticator の画面

ログインが完了する。

※ Dify で作成したチャットボットの埋め込み Web アプリが表示される。

補足:

Dify の埋め込みアプリは作成したチャットボットの 公開する > サイトに埋め込む から以下のようなコードが生成されるので、そのコードを Web サイトに埋め込むことで設定できます。

以上で実装手順となります。

まとめ

 本ブログでは、Dify を用いた AI アプリケーション開発におけるセキュリティとアクセス制御の課題に焦点を当て、Application Load Balancer (ALB) と Amazon Cognito を用いた認証の実装方法を説明いたしました。

 Dify の革新的なノーコード開発環境と、AWS の強力なサービスを組み合わせることで、AI アプリケーションの開発効率と安全性を両立させることが可能となります。Application Load Balancer (ALB) と Amazon Cognito の連携により、認証の一元管理、細やかなアクセス制御、そしてセキュリティの強化が実現できます。これにより、企業の厳格なセキュリティ要件に対応しつつ、Dify の柔軟な機能を最大限に活用できるようになります。

 この記事が、皆様の AWS の活用の一助になれば幸いです。AWS の活用にご興味のある方は、お問い合わせフォーム よりお気軽にご相談ください。

元記事発行日: 2025年03月19日、最終更新日: 2025年09月01日