AWSLab

DifyにAWS Bedrockを設定する【アクセスキー不要のIAMロール認証】

スポンサーラベル
DifyのBedrock認証設定画面。Authentication Methodの既定値がIAM Roleになっており、アクセスキーの入力欄は表示されていない AWS

当サイトはアフィリエイト広告を利用しています。

Difyをセルフホストする理由のひとつが「社内データを外部のSaaSに預けたくない」という制約への対応です。その流れでモデルプロバイダーにAWS Bedrockを選ぶと、認証情報をどう持たせるかが次の課題になります。

アクセスキーとシークレットキーを発行してDifyに貼り付ける方法もありますが、長期間有効な認証情報をアプリに持たせるのは避けたいところです。現在のDifyのBedrockプラグインはIAMロール認証に対応しているため、EC2上で動かしているならアクセスキーを一切発行せずに済みます。

本記事では、EC2のインスタンスプロファイルをそのまま使ってDifyからBedrockを呼ぶ手順を解説します。AWS側の準備(Anthropicモデルのユースケース申請と推論プロファイル)についてはBedrockでモデルが呼べないときの切り分けにまとめてあります。

1. EC2のIAMロールにBedrock権限を追加する

DifyのBedrockプラグインは、認証方式にIAM Roleを選ぶとEC2のインスタンスメタデータから認証情報を取得します。つまり、インスタンスに割り当てたロールに権限を持たせておけば設定は完了です。

CloudFormationでEC2を構築している場合、ロールに次のポリシーを追加します。

  InstanceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
      Policies:
        # Dify の Bedrock プロバイダは認証方式に IAM Role を選べる。
        # このロールに権限を持たせておけば、アクセスキーを発行せずに済む。
        - PolicyName: BedrockInvoke
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Sid: ListModels
                Effect: Allow
                Action:
                  - bedrock:ListFoundationModels
                  - bedrock:GetFoundationModel
                  - bedrock:ListInferenceProfiles
                  - bedrock:GetInferenceProfile
                Resource: "*"
              - Sid: InvokeModels
                Effect: Allow
                Action:
                  - bedrock:InvokeModel
                  - bedrock:InvokeModelWithResponseStream
                  - bedrock:Converse
                  - bedrock:ConverseStream
                Resource:
                  # 推論プロファイル経由で呼ぶ場合、両方が必要になる
                  - arn:aws:bedrock:*::foundation-model/*
                  - !Sub arn:aws:bedrock:*:${AWS::AccountId}:inference-profile/*

適用したら、インスタンス上で権限が効いているか確認しておきます。Difyのコンテナから呼ぶ前に、ホスト側で通ることを確かめておくと切り分けが楽になります。

# インスタンスロールで動いていることを確認する
aws sts get-caller-identity

# Bedrock を呼べるか確認する
aws bedrock-runtime converse \
  --region ap-northeast-1 \
  --model-id "jp.anthropic.claude-haiku-4-5-20251001-v1:0" \
  --messages '[{"role":"user","content":[{"text":"Say OK"}]}]' \
  --inference-config '{"maxTokens":16}' \
  --query "output.message.content[0].text" --output text

assumed-role/...として認識され、OKが返ってくれば準備完了です。

2. Bedrockプラグインを導入する

Dify 1.x では、モデルプロバイダーはプラグインとして追加します。初期状態ではBedrockは入っていません。

  1. 左メニューのマーケットプレイスを開く
  2. 検索欄にbedrockと入力
  3. Amazon Bedrock(作者langgenius)を選んで「インストール」

同名の紛らわしいプラグインがいくつか並びます。作者がlanggeniusのものが公式なので、そこで見分けてください。「Aws Bedrock Knowledge Base」は別物(ナレッジベース連携用)です。

3. IAMロール認証を設定する

インストールが終わると「連携」→「モデルプロバイダー」に Amazon Bedrock が現れます。「APIキーを追加」から認証情報を設定します。

DifyのBedrock認証設定画面。Authentication Methodの既定値がIAM Roleになっており、アクセスキーの入力欄は表示されていない

設定する項目は実質2つだけです。

項目
認証名任意。bedrock-tokyoなど、リージョンがわかる名前にしておくと管理しやすい
Authentication MethodIAM Role(既定値)
AWS RegionAsia Pacific (Tokyo)
Bedrock Endpoint URL空欄でよい
Available Model Name空欄でよい
Bedrock Proxy URL空欄でよい

注目したいのは、IAM Roleを選んでいるとアクセスキーの入力欄そのものが表示されないことです。認証方式をAccess-Secret Keyに切り替えたときだけ入力欄が現れます。項目名が「APIキー認証設定」となっているため紛らわしいのですが、IAMロールを使う場合はキーの入力は一切不要です。

保存すると、利用できるモデルが一覧に並びます。

DifyのモデルプロバイダーにAmazon Bedrockが設定され、18件のモデルが有効になっている画面

Anthropic Claude、Amazon Nova、Meta Llama、Mistral AIなど、Bedrockが提供するモデルがまとめて登録されます。使わないモデルは個別にオフにできます。

3.1 プラグイン0.0.82では「コンフィグ」と「モデルを追加」が分かれている

Bedrockプラグインは更新が速く、0.0.82ではモデルプロバイダーの画面構成が変わっています。上のスクリーンショットと見比べて迷わないよう、対応関係を整理しておきます。

0.0.82での操作何をする場所か
カード右上のコンフィグ認証情報(bedrock-tokyoなど)の設定。本記事の手順3はこちら。未設定なら「APIキーを追加」と表示される
モデルの表示プラグインに組み込まれているモデル一覧の確認とオン・オフ
モデルを追加組み込みリストに無いモデルを、推論プロファイルを指定して自分で足す

間違えやすいのが「モデルを追加」のほうです。 プロバイダー全体の認証を設定する画面ではなく、モデルを1件ずつ登録する画面で、入力項目もまったく異なります。

Difyの「モデルを追加」ダイアログ。Authentication Methodの既定はIAM Roleだが、AWS Regionの既定値がUS East (N. Virginia)になっている
項目注意点
Model Name推論プロファイルを指定すると自動で埋まる
Model TypeLLM / TEXT EMBEDDING / RERANK から選ぶ。必須
Authentication Methodここでも既定はIAM Role。手順1で付けたロール権限がそのまま効く
Inference Profile ID必須。プレースホルダは0j6r4a8fn6zeのような短いIDで、これはアプリケーション推論プロファイルの形式
AWS Region既定値がUS East (N. Virginia)
Enable CloudWatch request metadata任意。既定はDisabled

いちばん注意したいのはAWS Regionの既定値です。認証情報側をAsia Pacific (Tokyo)にしていても、この画面はバージニア北部から始まります。気づかずに追加すると、東京で用意したロール権限では通らないリージョンを指すことになります。

またダイアログの下部には「Get your Access Key and Secret Access Key from AWS Console」というリンクと、「APIキーは PKCS1_OAEP の技術で暗号化されて保存されます」という但し書きが出ます。手順3の「APIキー認証設定」と同じ紛らわしさで、IAM Roleを選んでいる限りキーの入力は不要です。表示に引きずられてアクセスキーを発行しないでください。

なお、この画面はプラグイン0.0.82で確認したものです。モデルを追加した後の動作までは検証していません。

4. 設定は保存できるのにモデルが呼べない場合

ここが今回いちばん共有したいハマりどころです。

Anthropicモデルのユースケース申請が済んでいなくても、Difyの設定は問題なく保存できます。 保存時の検証はモデル一覧の取得(ListFoundationModels)までで、実際の推論までは行わないためです。

そのため、設定画面上は成功しているのに、いざアプリからモデルを呼ぶと次のエラーで落ちます。

ResourceNotFoundException: Model use case details have not been submitted for this account.

「設定が保存できた=使える」ではない点に注意してください。Difyで設定を終えたら、実際にチャットボットを1つ作って応答が返ることまで確認しておくと確実です。

原因の切り分け方はBedrockでモデルが呼べないときの切り分けにまとめてあります。

5. アクセスキー方式との使い分け

IAMロールが使えるのはAWS上でDifyを動かしている場合です。手元のPCやオンプレミスで動かしているなら、認証方式にAccess-Secret Keyを選ぶことになります。

動かす場所推奨する認証方式
EC2 / ECS / EKSIAM Role。キーの発行・管理・ローテーションが不要になる
ローカルPC・オンプレミスAccess-Secret Key。最小権限のIAMユーザーを別途作る

なお、Bedrock APIキーという方式も選択肢にあります。用途に応じて選んでください。

6. まとめ

DifyからBedrockを使う設定の要点を整理します。

  • Dify 1.x のBedrockプラグインはIAMロール認証に対応している。EC2上ならアクセスキーは不要
  • インスタンスに割り当てたロールにBedrock権限を持たせるだけでよい
  • 推論プロファイル経由で呼ぶため、IAMポリシーにはプロファイルと基盤モデルの両方を書く
  • IAM Roleを選ぶとアクセスキーの入力欄は表示されない。項目名が「APIキー認証設定」なのは紛らわしいが気にしなくてよい
  • 設定が保存できても使えるとは限らない。Anthropicモデルはユースケース申請が別途必要
  • プラグイン0.0.82では「コンフィグ」と「モデルを追加」が別画面。後者はAWS Regionの既定がバージニア北部なので必ず変更する

本記事の手順は東京リージョンで実際に構築して確認したものです。Dify 1.16.1、Bedrockプラグイン 0.0.77 での動作になります。プラグインは更新が速いため、画面が異なる場合は認証方式の選択肢を手がかりに読み替えてください。0.0.82での画面の変化は手順3.1にまとめました。

次回は、DifyのファイルストレージをS3に切り替える手順を解説します。

AWSを効率的に学習する方法

私が効率的にAWSを学習するために実施した方法は以下の通りです。
 ①最初に書籍(ハンズオンができる)を購入、座学でAWSの基礎を学習
 ②AWS資格試験を取得ための学習

※私の場合は①と②を合わせて2か月でソリューションアーキテクトを取得できました。

①AWS基礎学習

最初に購入した書籍は「Amazon Web Services 基礎からのネットワーク&サーバー構築」です。

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂4版

この本では、AWSの基本サービスを利用したハンズオンを通じて、AWSの基礎を学習することができます。

また、タイトル通りAWSのネットワークやインフラに関しても網羅しているため、もともとインフラ系の技術者ではない人たちにとっても分かりやすい内容だと思います。

とりあえずAWS上にサーバーを設定して開発を行うための準備までするには最良の一冊です。

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂4版

②AWS資格取得

AWSの基礎をある程度学習することができたら、次はAWS資格を取得しましょう。まずはAWSソリューションアーキテクトを目指しましょう。

資格勉強のための問題集をひたすら解きながら、AWSの知識を積み重ねて習得していきましょう!

苦行ではありますがこの問題集を3周ほどすればAWS用語や構成に関しても習得できているはずです。

AWS認定ソリューションアーキテクト-アソシエイト問題集

独学だと手が止まってしまう場合は、ササエル のようなインフラエンジニア向けのオンラインスクールを使う手もあります。ネットワークやサーバーの分野に絞ったカリキュラムなので、業務でインフラを触る人が学び直すのにも使えます

コメント

タイトルとURLをコピーしました