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が提供するモデルがまとめて登録されます。使わないモデルは個別にオフにできます。

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モデルはユースケース申請が別途必要

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

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

コメント

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