MENU

Knowledge Oasisは主にAIとAWSの知識を共有するブログです。その他ITに関する知識やまれに生活に役立つ知識も共有するかもしれません。

KOふみ
名前はKOふみ(こふみ)。独立系SIerで20年のキャリアを持ち、新人研修の講師から請負開発まで幅広く経験。現在はAIを駆使したソリューション開発に従事。資格は応用情報技術者、データベーススペシャリスト、プロジェクトマネージャー、PMP、簿記2級。AWS学習中で、将来はAWSアンバサダーを目指す。

BedrockナレッジベースのS3データソース同期に失敗した時に読む話

BedrockナレッジベースのS3データソース同期に失敗した時に読む話
  • URLをコピーしました!

BedrockのナレッジベースをS3データソースで作成した際に同期に失敗しました。ある思い込みのために解決に時間がかかってしまいました。その時の対処方法を教訓とともに解説します。

目次

発生したエラー

データソースに指定したS3にファイルを追加してデータソースの同期を行った際に以下のエラーが発生しました。

Encountered error:
Access Denied (Service: S3, Status Code: 403, Request ID: hoge, Extended Request ID: foobar).
Issue occurred while processing file: s3://my-bucket/user01/test.txt.
Call to Customer Source did not succeed.

原因

Access Denied とある通り権限が不足しています。

しかし、データソースを作成した際に格納されていたファイルについて正しくナレッジベースが構築できていました。ロールには問題ないだろうと思い込んでいたために解決に時間がかかりました。

IAMロールを確認したところナレッジベース構築時に
AmazonBedrockS3PolicyForKnowledgeBase_AmazonBedrockExecutionRoleForKnowledgeBase
というロールが作成されていました。このロールのポリシーのバージョンを確認したところ3つバージョンが作成されていました。エラーが発生した時点のポリシーを確認したところ、以下のようになっていました。

{
    "Sid": "S3GetObjectStatement",
    "Effect": "Allow",
    "Action": [
        "s3:GetObject"
    ],
    "Resource": [
        "arn:aws:s3:::my-bucket/user01",
        "arn:aws:s3:::my-bucket"
    ],
}

Resouceに /* がついていないため、プレフィックス配下のファイルを読み取ることができませんでした。

対応方法

以下のようにポリシーを修正することで対応できました。

{
    "Sid": "S3GetObjectStatement",
    "Effect": "Allow",
    "Action": [
        "s3:GetObject"
    ],
    "Resource": [
        "arn:aws:s3:::my-bucket/user01/*"
    ],
}

教訓

新しくサービスを動かす際にAWSでロールを作成してくれることがあります。このロールが変更されることがあるというのが今回の教訓です。あと、 Access Denied が出たら権限に問題があるはずなので疑うべきはロールです。

AWSが作成するロールも変更されることがある

Access Deniedが出たらIAMロールを確認する

まとめ

Bedrockナレッジベースのデータソース同期に失敗した際の対応について解説しました。サービスを動かす際にAWSが作成するロールについてAWSが変更することを今回初めて知りました。皆さんもAWSが作るロールだから問題無いと思い込まずに権限系のエラーが発生したらIAMロールを確認するようにしましょう。

  • URLをコピーしました!

コメント

コメントする

目次