はじめに
とあるEC2+Dify構成の検証で、ナレッジを作成する際にアップロードしたファイルをEC2のStorageではなくS3に格納させたい、となったときに公式ドキュメントを読んでいたらS3関連記述がぱっと見下記しかなく「BedrockをIAMロールで呼べるのにIAMアクセスキーでしかS3は使えないはずがなかろうよ」と調べたというのが出発点です。
S3_ENDPOINT:S3エンドポイントアドレス
S3_BUCKET_NAME:S3バケット名
S3_ACCESS_KEY:S3アクセスキー
S3_SECRET_KEY:S3シークレットキー
S3_REGION:S3リージョン情報(例:us-east-1)
結論問題なくIAMロールでアクセス出来ており、いつもならそれで終わりなんですがアクセスキー運用が世に広まるのは良くないので小ネタですけど書きました。
IAMロールでS3にアクセスさせる
-
EC2には該当のS3へのアクセス権限を付与したIAMロールを適用
-
事前にS3バケットを作成して
.env
を編集
※環境変数の渡し方は自身の環境に合わせてください
・参考
変更前
.env
STORAGE_TYPE=local
S3_USE_AWS_MANAGED_IAM=false
S3_ENDPOINT=
S3_REGION=us-east-1
S3_BUCKET_NAME=difyai
S3_ACCESS_KEY=
S3_SECRET_KEY=
変更後
.env
STORAGE_TYPE=s3
S3_USE_AWS_MANAGED_IAM=true
S3_ENDPOINT=https://s3.us-east-2.amazonaws.com # 自身のS3バケットのリージョンエンドポイントを指定
S3_REGION=us-east-2 # 自身のS3バケットリージョンを指定
S3_BUCKET_NAME=xxxxxxx # S3バケット名を指定
#S3_ACCESS_KEY=
#S3_SECRET_KEY=
終わりに
Dify上でナレッジを作成してファイルをアップロードすると指定したS3バケットのupload_files/xxxx/
配下にオブジェクトが格納されているので各々確認してみてください。