Amazon Bedrock Managed Knowledge Base に Amazon Quick から日本語で自然言語問合せしてみた

Amazon Bedrock Managed Knowledge Base に Amazon Quick から日本語で自然言語問合せしてみた

Amazon Bedrock の Managed Knowledge Base を Amazon Quick に接続し、日本語のドキュメントで自然言語問い合わせを試してみました。ベクトルストア不要の RAG 基盤で、複数文書をまたぐ質問にも対応できた実装例を紹介します。
2026.08.13

クラウド事業統括本部の石川です。Amazon Bedrock の Managed Knowledge Base を Amazon Quick のナレッジソースとして接続できるようになりましたので、日本語のドキュメントを取り込んで自然言語で問い合わせてみました。

https://docs.aws.amazon.com/bedrock/latest/userguide/kb-managed-byo-fmkb.html

Amazon Bedrock の Managed Knowledge Base は、ベクトルストアの選定・プロビジョニング・スケーリングをすべて Amazon Bedrock 側が引き受けるフルマネージドの RAG 基盤です。従来の Knowledge Bases では OpenSearch Serverless や Aurora などのベクトルデータベースを自分で用意する必要がありましたが、Managed Knowledge Base では作成時にベクトルストアの指定そのものが不要になります。

この Managed Knowledge Base を、Amazon Quick に「持ち込みナレッジベース」として接続できます。接続後は Amazon Quick 上の他のナレッジベースと同じように扱われ、スペースに追加するとチャット中に自動的に検索対象となります。

https://docs.aws.amazon.com/quick/latest/userguide/quick-byo-bedrock-kb.html

なお、Amazon Quick 側の連携機能にはリージョン制限があります。2026 年 8 月時点で対応しているのは、バージニア北部(us-east-1)、オレゴン(us-west-2)、アイルランド(eu-west-1)、シドニー(ap-southeast-2)の 4 リージョンで、東京リージョンは含まれていません。Managed Knowledge Base 自体は東京リージョンでも利用できますが、Amazon Quick から接続する場合はナレッジベースと Amazon Quick インスタンスを同一リージョンに置く必要があるため、今回はバージニア北部で検証しました。

https://docs.aws.amazon.com/quick/latest/userguide/byo-bedrock-kb-limitations.html

Managed Knowledge Base とは

Managed Knowledge Base は、ストレージ・インデックス・検索の基盤を Amazon Bedrock が管理するナレッジベースです。従来のベクトルストア自己管理型(Customer-Managed)との違いは次のとおりです。

項目 Bedrock Managed Customer-Managed
データストア 埋め込み・テキスト・メタデータ・元ファイルを Bedrock が自動スケールで保持 自分でベクトルストア/テキストストアを選定・構築・運用
埋め込みモデル 組み込みのマネージドモデル(追加費用なし) なし(自分で指定)
リランキング 組み込みのマネージドリランカー(追加費用なし) なし
検索方式 エージェンティック検索とセマンティックハイブリッド検索 検索戦略を自分で選択
コネクタ S3、SharePoint、Confluence、Web Crawler、Google Drive、OneDrive、カスタムの 7 種 S3 とカスタム
パース マルチモーダル対応の組み込みパーサー 既定・基盤モデル・Bedrock Data Automation から選択
インフラ管理 不要 自分でプロビジョニング・保守
Amazon Quick 連携 ネイティブに接続可能 自前で実装が必要

出典は上記の Managed Knowledge Base のドキュメントです。埋め込みモデルは既定の MANAGED(サービス管理)のほか、Titan Text Embeddings V2 や Cohere Embed といった自前のモデル(CUSTOM)も選べますが、CUSTOM を選ぶとマネージドリランカーが使えなくなる点に注意が必要です。

https://docs.aws.amazon.com/bedrock/latest/userguide/kb-build-managed.html

構成

今回検証した構成は次のとおりです。Amazon Quick は Quick サービスロールの IAM 認証情報(SigV4)で Amazon Bedrock を呼び出し、bedrock:Retrievebedrock:GetDocumentContent の 2 つのアクションだけを使います。

20260813-amazon-mkb-with-quick-0

やってみた

前提条件

  • 検証環境: バージニア北部リージョン(us-east-1)
  • Amazon Quick(Enterprise エディション)のインスタンスが同一アカウント・同一リージョンに存在すること
  • AWS CLI v2(検証時のバージョンは 2.36.19)

ナレッジベースと Amazon Quick インスタンスが同一アカウントの場合、ナレッジベースへのリソースポリシーは不要です。別アカウントに置く場合のみ、bedrock:Retrievebedrock:GetDocumentContent を Quick サービスロールに許可するリソースポリシーが必要になります。

https://docs.aws.amazon.com/quick/latest/userguide/byo-bedrock-kb-permissions.html

検証データの準備

日本語の Markdown ファイルを 15 件用意しました。商品カタログの仕様書 10 件(docs/products/)と、保証規定・返品ポリシー・配送料金表・サポート FAQ・法人向け割引規程の社内文書 5 件(docs/policies/)です。1 ファイルあたり 2 - 3KB 程度で、見出しごとに意味が閉じるよう H2 で区切っています。

複数の文書をまたいだ問い合わせ(例:「この商品の返品期限は何日か」)が成立するよう、商品仕様書からポリシー文書を参照する記述を意図的に入れています。ファイル名は ASCII、本文のみ日本語という構成です。

S3 バケットを作成してアップロードします。

% aws s3 ls s3://mkb-quick-blog-123456789012-us-east-1/docs/ --recursive
2026-08-13 17:04:05       2820 docs/policies/corporate-discount.md
2026-08-13 17:04:04       2663 docs/policies/return-policy.md
2026-08-13 17:04:05       3018 docs/policies/shipping-fee.md
2026-08-13 17:04:05       3068 docs/policies/support-faq.md
2026-08-13 17:04:05       3374 docs/policies/warranty-policy.md
2026-08-13 17:04:05       2133 docs/products/4k-monitor-27.md
2026-08-13 17:04:05       2279 docs/products/budget-laptop-15.md
2026-08-13 17:04:05       2269 docs/products/gaming-laptop-x.md
2026-08-13 17:04:05       2001 docs/products/mechanical-keyboard.md
2026-08-13 17:04:05       2138 docs/products/noise-cancel-headphones.md
2026-08-13 17:04:05       2172 docs/products/office-chair-ergo.md
2026-08-13 17:04:05       2037 docs/products/standing-desk.md
2026-08-13 17:04:05       1903 docs/products/tablet-11.md
2026-08-13 17:04:06       2638 docs/products/ultrabook-pro-14.md
2026-08-13 17:04:06       2028 docs/products/wireless-earbuds.md

IAM サービスロールの作成

Amazon Bedrock がナレッジベースを操作するためのサービスロールを作成します。信頼ポリシーのサービスプリンシパルは bedrock.amazonaws.com で、aws:SourceAccountaws:SourceArn の条件で対象を絞ります。

% aws iam create-role --role-name BedrockManagedKBRole-mkb-quick-blog \
  --assume-role-policy-document file://trust-policy.json
{
    "Role": {
        "Path": "/",
        "RoleName": "BedrockManagedKBRole-mkb-quick-blog",
        "RoleId": "AROAXXXXXXXXXXXXXXXXX",
        "Arn": "arn:aws:iam::123456789012:role/BedrockManagedKBRole-mkb-quick-blog",
        "CreateDate": "2026-08-13T08:04:16+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "bedrock.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole",
                    "Condition": {
                        "StringEquals": {
                            "aws:SourceAccount": "123456789012"
                        },
                        "ArnLike": {
                            "aws:SourceArn": "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/*"
                        }
                    }
                }
            ]
        }
    }
}

% aws iam put-role-policy --role-name BedrockManagedKBRole-mkb-quick-blog \
  --policy-name S3DataSourceAccess --policy-document file://kb-role-policy.json

権限ポリシーは S3 バケットへの s3:ListBuckets3:GetObject だけです。既定のマネージド埋め込みモデルを使う場合、公式ドキュメントの前提条件にあるとおり Bedrock のモデルアクセスは不要で、実際に bedrock:InvokeModel を付与しない状態で取り込みが完走しました。ベクトルストアも Amazon Bedrock 側の管理なので、OpenSearch Serverless 向けの権限も一切必要ありません。

https://docs.aws.amazon.com/bedrock/latest/userguide/kb-managed-prereqs.html

trust-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "Service": "bedrock.amazonaws.com" },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": { "aws:SourceAccount": "123456789012" },
        "ArnLike": { "aws:SourceArn": "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/*" }
      }
    }
  ]
}
kb-role-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "S3ListBucketStatement",
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::mkb-quick-blog-123456789012-us-east-1"],
      "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } }
    },
    {
      "Sid": "S3GetObjectStatement",
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": ["arn:aws:s3:::mkb-quick-blog-123456789012-us-east-1/*"],
      "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } }
    }
  ]
}

なお、ナレッジベースを作成する側の IAM ロールには、このサービスロールを渡すための iam:PassRoleiam:PassedToServicebedrock.amazonaws.com)が必要です。

Managed Knowledge Base の作成

https://docs.aws.amazon.com/bedrock/latest/userguide/kb-managed-create.html

--knowledge-base-configurationtype: MANAGED を指定します。embeddingModelTypeMANAGED にすると、埋め込みモデルの ARN も次元数も指定不要です。

% aws bedrock-agent create-knowledge-base \
  --name mkb-quick-blog-kb \
  --description "商品カタログと社内文書の日本語RAG検証用 (blog)" \
  --role-arn arn:aws:iam::123456789012:role/BedrockManagedKBRole-mkb-quick-blog \
  --knowledge-base-configuration file://kb-config.json \
  --region us-east-1
{
    "knowledgeBase": {
        "knowledgeBaseId": "OM3ZAIEAU2",
        "name": "mkb-quick-blog-kb",
        "knowledgeBaseArn": "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/OM3ZAIEAU2",
        "description": "商品カタログと社内文書の日本語RAG検証用 (blog)",
        "roleArn": "arn:aws:iam::123456789012:role/BedrockManagedKBRole-mkb-quick-blog",
        "knowledgeBaseConfiguration": {
            "type": "MANAGED",
            "managedKnowledgeBaseConfiguration": {
                "embeddingModelType": "MANAGED"
            }
        },
        "status": "CREATING",
        "createdAt": "2026-08-13T08:04:26.946907+00:00",
        "updatedAt": "2026-08-13T08:04:26.946907+00:00"
    }
}
kb-config.json
{
  "type": "MANAGED",
  "managedKnowledgeBaseConfiguration": {
    "embeddingModelType": "MANAGED"
  }
}

ベクトルストアの指定が一切ないことがポイントです。CREATING から ACTIVE になるまでは 1 分ほどでした。

% aws bedrock-agent get-knowledge-base --knowledge-base-id OM3ZAIEAU2 \
  --region us-east-1 --query 'knowledgeBase.status' --output text
ACTIVE

ここで表示される knowledgeBaseArn が、後で Amazon Quick に登録する ARN です。

マネジメントコンソールでもナレッジベースの構成を確認できます。Knowledge base typeManaged vector store、埋め込みモデルが Managed、埋め込みタイプが Float、ベクトルの次元が 1024 と表示され、これらはすべてサービス側が決めた値です。

20260813-amazon-mkb-with-quick-1

S3 コネクタのデータソース作成

Managed Knowledge Base のデータソースは、従来の S3 型ではなく MANAGED_KNOWLEDGE_BASE_CONNECTOR 型を使います。接続先の情報は connectorParameters にまとめて指定します。

% aws bedrock-agent create-data-source \
  --knowledge-base-id OM3ZAIEAU2 \
  --name s3-catalog-connector \
  --description "S3 上の日本語 Markdown(商品カタログ・社内文書)" \
  --data-source-configuration file://s3-connector.json \
  --data-deletion-policy DELETE \
  --region us-east-1
{
    "dataSource": {
        "knowledgeBaseId": "OM3ZAIEAU2",
        "dataSourceId": "IOALEWHRKC",
        "name": "s3-catalog-connector",
        "status": "CREATING",
        "description": "S3 上の日本語 Markdown(商品カタログ・社内文書)",
        "dataSourceConfiguration": {
            "type": "MANAGED_KNOWLEDGE_BASE_CONNECTOR",
            "managedKnowledgeBaseConnectorConfiguration": {
                "mediaExtractionConfiguration": {
                    "imageExtractionConfiguration": {
                        "imageExtractionStatus": "ENABLED"
                    }
                },
                "connectorParameters": "{\"deletionProtectionConfiguration\":{\"enableDeletionProtection\":false},\"type\":\"S3\",\"filterConfiguration\":{\"inclusionPrefixes\":[\"docs/\"],\"maxFileSizeInMegaBytes\":\"500\"},\"connectionConfiguration\":{\"bucketName\":\"mkb-quick-blog-123456789012-us-east-1\",\"bucketOwnerAccountId\":\"123456789012\"},\"aclEnabled\":false,\"version\":\"1\"}"
            }
        },
        "dataDeletionPolicy": "DELETE",
        "createdAt": "2026-08-13T08:05:42.626175+00:00",
        "updatedAt": "2026-08-13T08:05:42.626175+00:00"
    }
}
s3-connector.json
{
  "type": "MANAGED_KNOWLEDGE_BASE_CONNECTOR",
  "managedKnowledgeBaseConnectorConfiguration": {
    "connectorParameters": {
      "type": "S3",
      "version": "1",
      "connectionConfiguration": {
        "bucketName": "mkb-quick-blog-123456789012-us-east-1",
        "bucketOwnerAccountId": "123456789012"
      },
      "filterConfiguration": {
        "inclusionPrefixes": ["docs/"]
      },
      "deletionProtectionConfiguration": {
        "enableDeletionProtection": false
      }
    }
  }
}

レスポンスを見ると、指定していない項目にも既定値が補われています。画像抽出(imageExtractionStatus)が ENABLED、最大ファイルサイズが 500MB、ACL 連携(aclEnabled)が false です。filterConfiguration.inclusionPrefixes は AWS CLI のモデル上は自由形式のドキュメント型で検証されませんが、実際に受理され、指定したプレフィックス配下だけが対象になりました。

Managed Knowledge Base の CreateDataSource非同期です。CREATING のまま取り込みを開始することはできないため、AVAILABLE になるまで待ちます。

% aws bedrock-agent get-data-source --knowledge-base-id OM3ZAIEAU2 \
  --data-source-id IOALEWHRKC --region us-east-1 --query 'dataSource.status' --output text
AVAILABLE

取り込み(Ingestion)

データソースが AVAILABLE になったら取り込みを開始します。

% aws bedrock-agent start-ingestion-job \
  --knowledge-base-id OM3ZAIEAU2 --data-source-id IOALEWHRKC \
  --description "初回取り込み" --region us-east-1
{
    "ingestionJob": {
        "knowledgeBaseId": "OM3ZAIEAU2",
        "dataSourceId": "IOALEWHRKC",
        "ingestionJobId": "CQYUBFDDFT",
        "status": "STARTING",
        ...
    }
}

2 分ほどで完了しました。日本語の Markdown 15 件がすべてインデックスされ、失敗は 0 件です。

% aws bedrock-agent get-ingestion-job --knowledge-base-id OM3ZAIEAU2 \
  --data-source-id IOALEWHRKC --ingestion-job-id CQYUBFDDFT --region us-east-1
{
    "ingestionJob": {
        "knowledgeBaseId": "OM3ZAIEAU2",
        "dataSourceId": "IOALEWHRKC",
        "ingestionJobId": "CQYUBFDDFT",
        "description": "初回取り込み",
        "status": "COMPLETE",
        "statistics": {
            "numberOfDocumentsScanned": 15,
            "numberOfMetadataDocumentsScanned": 0,
            "numberOfNewDocumentsIndexed": 15,
            "numberOfModifiedDocumentsIndexed": 0,
            "numberOfMetadataDocumentsModified": 0,
            "numberOfDocumentsDeleted": 0,
            "numberOfDocumentsFailed": 0,
            "numberOfDocumentsSkipped": 0
        },
        "startedAt": "2026-08-13T08:06:03.867784+00:00",
        "updatedAt": "2026-08-13T08:08:05.512034+00:00"
    }
}

取り込まれた文書は list-knowledge-base-documents で個別に確認できます。

% aws bedrock-agent list-knowledge-base-documents \
  --knowledge-base-id OM3ZAIEAU2 --data-source-id IOALEWHRKC --region us-east-1
{
    "documentDetails": [
        {
            "knowledgeBaseId": "OM3ZAIEAU2",
            "dataSourceId": "IOALEWHRKC",
            "status": "INDEXED",
            "identifier": {
                "dataSourceType": "S3",
                "s3": {
                    "uri": "s3://mkb-quick-blog-123456789012-us-east-1/docs/products/mechanical-keyboard.md"
                }
            },
            "updatedAt": "2026-08-13T08:07:51.576000+00:00"
        },
        ...
    ]
}

Retrieve API で日本語クエリを確認

Amazon Quick から接続する前に、Amazon Bedrock 単体で日本語の問い合わせが通ることを確認しておきます。Amazon Quick が使うのは bedrock:Retrievebedrock:GetDocumentContent の 2 つなので、この 2 つを CLI で先に叩いておくと、後で権限まわりの切り分けが楽になります。

% aws bedrock-agent-runtime retrieve --knowledge-base-id OM3ZAIEAU2 \
  --retrieval-query '{"text":"ゲーミング用途に向いたノートパソコンはどれですか。在庫状況も教えてください"}' \
  --region us-east-1

上位 5 件の結果は次のとおりでした(スコアとソースを抜粋)。

順位 スコア ソース
1 0.6184 products/gaming-laptop-x.md
2 0.5930 products/gaming-laptop-x.md
3 0.5576 products/gaming-laptop-x.md
4 0.5450 products/ultrabook-pro-14.md
5 0.4893 products/gaming-laptop-x.md(在庫なしの記述を含むチャンク)

「ゲーミング用途」という表現から Gaming Laptop X の文書が上位を占め、5 位に在庫状況を記載したチャンクが入りました。文書間をまたぐ問い合わせも試しました。

% aws bedrock-agent-runtime retrieve --knowledge-base-id OM3ZAIEAU2 \
  --retrieval-query '{"text":"10万円以下でノイズキャンセリング機能がある製品と、その返品期限を教えてください"}' \
  --region us-east-1
順位 スコア ソース
1 0.7319 products/noise-cancel-headphones.md
2 0.6284 products/noise-cancel-headphones.md
3 0.6179 products/noise-cancel-headphones.md
4 0.5474 products/noise-cancel-headphones.md
5 0.4502 policies/return-policy.md

製品仕様書 4 件に加えて、返品ポリシーの文書が 5 位に入りました。商品文書とポリシー文書という別ファイルの内容が 1 回のクエリで同時に拾えています。他の 3 問も同様に、想定した文書が最上位に来ました。

質問 最上位のソース スコア
Comfy ブランドの家具を北海道に配送する場合の送料と納期は? policies/shipping-fee.md 0.8586
Vortex 製品の保証期間と、延長保証を付けられる条件を教えてください policies/warranty-policy.md 0.8568
評価が4.5以上の製品を、法人でまとめて20台購入する場合の割引率は? policies/corporate-discount.md 0.8541

GetDocumentContent も確認します。こちらは文書の本文を直接返すのではなく、署名付き URL を返す API です。

% aws bedrock-agent-runtime get-document-content --knowledge-base-id OM3ZAIEAU2 \
  --data-source-id IOALEWHRKC \
  --document-id "s3://mkb-quick-blog-123456789012-us-east-1/docs/policies/return-policy.md" \
  --region us-east-1
{
    "documentContentLength": 2663,
    "mimeType": "text/plain",
    "presignedUrl": "https://fmkb-raw-customer-data-prod-us-east-1.s3.amazonaws.com/i8IOALEWHRKC_..._FMKB123456789012/f6ac6d0b...?<署名パラメータは省略>"
}

署名付き URL の向き先が、自分で作成した S3 バケットではなく fmkb-raw-customer-data-prod-us-east-1 という AWS 管理側のバケットになっている点が興味深いところです。Managed Knowledge Base が元ファイルまでサービス側で保持していることが確認できます。--output-formatEXTRACTED を指定すると、パース済みのテキストを JSON で取得できます。

--document-id には list-knowledge-base-documents が返す identifier.s3.uri の値をそのまま渡します。--document-identifier のような構造体パラメータではない点に注意してください。

Amazon Quick への接続

まず Amazon Quick のコンソールに管理者でサインインし、Manage account > AWS Resources > Bedrock で、Amazon Bedrock 側で作成したナレッジベースの ARN を登録します。この操作により、Amazon Quick のサービスロールに対して当該 ARN へのアクセスが許可されます。

その後、Amazon Quick のコンソールで Knowledge を開き、Set up new knowledge base のカード一覧から接続します。Amazon Bedrock Managed Knowledge Base のカードが先頭に並んでいました。

20260813-amazon-mkb-with-quick-2

ここで公式ドキュメントの記述に食い違いがありました。Amazon Bedrock 側のドキュメントには「Integrations でナレッジベースを作成し、データソースタイプに Bedrock knowledge base を選択する」とありますが、実際の画面は Amazon Quick 側のドキュメントの記述(Knowledge bases > Set up new knowledge baseAmazon Bedrock managed knowledge base を選択)に一致していました。手順を追う際は Amazon Quick 側のドキュメントを参照するのが確実です。

https://docs.aws.amazon.com/quick/latest/userguide/byo-bedrock-kb-creating.html

カードを選ぶと 2 ステップのウィザードが開きます。1 つ目の Connect Bedrock では、接続名と Bedrock Managed Knowledge Base ARN を入力します。ARN は Amazon Bedrock 側の create-knowledge-base が返した knowledgeBaseArn をそのまま貼り付けます。

20260813-amazon-mkb-with-quick-3

2 つ目の Create knowledge base では、Amazon Quick 側でのナレッジベース名と説明を入力します。

20260813-amazon-mkb-with-quick-4

作成すると Existing knowledge bases の一覧に Available で表示されます。同期(Sync status)の欄が - になっている点がポイントで、データの同期は Amazon Bedrock 側が持っているため Amazon Quick は同期を管理しません。

20260813-amazon-mkb-with-quick-5

詳細画面の Integration パネルに、接続先の Bedrock Managed Knowledge Base の ARN が表示されます。

20260813-amazon-mkb-with-quick-6

作成そのものはコンソール専用ですが、作成後の状態は AWS CLI から参照できました

% aws quicksight describe-knowledge-base --aws-account-id 123456789012 \
  --knowledge-base-id ea0ef996-e0be-40a7-8f31-82871f2740ed --region us-east-1
{
    "Status": 200,
    "KnowledgeBase": {
        "KnowledgeBaseArn": "arn:aws:quicksight:us-east-1:123456789012:knowledge-base/ea0ef996-e0be-40a7-8f31-82871f2740ed",
        "KnowledgeBaseId": "ea0ef996-e0be-40a7-8f31-82871f2740ed",
        "Name": "Bedrock - knowledgebase",
        "Status": "ACTIVE",
        "KnowledgeBaseConfiguration": {
            "templateConfiguration": {
                "template": {
                    "type": "BEDROCKFMKB",
                    "retrievalScope": "ALL",
                    "deletionProtectionConfiguration": {
                        "enableDeletionProtection": "false",
                        "deletionProtectionThreshold": "15"
                    }
                }
            }
        },
        "AccessControlConfiguration": {
            "isACLEnabled": false
        },
        "Type": "FULLY_MANAGED_KNOWLEDGE_BASE",
        "CreatedAt": "2026-08-13T18:08:56+09:00",
        "PrimaryOwnerArn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/cm-ishikawa.satoru/cm-ishikawa.satoru"
    }
}

内部のテンプレート型名が BEDROCKFMKB になっており、公式ドキュメントの URL に含まれる kb-managed-byo-fmkbfmkb と対応しています。isACLEnabledfalse なのは、Amazon Bedrock 側のデータソースの aclEnabledfalse であることと一致しています。

PrimaryOwnerArn のリージョンが ap-northeast-1 である点にも注目です。今回の Amazon Quick アカウントは東京リージョンで作成しており、ユーザーの ARN は東京のままで、ナレッジベースの実体だけがバージニア北部にあるという状態になっています。

データソース側には、接続先の Amazon Bedrock のナレッジベース ARN がそのまま入っています。

% aws quicksight describe-data-source --aws-account-id 123456789012 \
  --data-source-id db866eb8-a316-4e0f-b6c2-ec8faef7f614 --region us-east-1
{
    "Status": 200,
    "DataSource": {
        "DataSourceId": "db866eb8-a316-4e0f-b6c2-ec8faef7f614",
        "Name": "mkb-quick-blog-kb",
        "Type": "FULLY_MANAGED_KNOWLEDGE_BASE",
        "Status": "CREATION_SUCCESSFUL",
        "DataSourceParameters": {
            "FMKBParameters": {
                "KnowledgeBaseArn": "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/OM3ZAIEAU2"
            }
        }
    }
}

この FULLY_MANAGED_KNOWLEDGE_BASE という型は、AWS CLI 2.36.19 の aws quicksight create-knowledge-base がサポートするデータソースタイプ(S3_KNOWLEDGE_BASE / WEB_CRAWLER / GOOGLE_DRIVE / SHAREPOINT / ONE_DRIVE)には含まれていません。CLI のサービスモデルが実際の API に追いついていない状態で、作成はコンソールからのみ、参照は CLI からも可能という結果でした。

なお、Amazon Bedrock 側のドキュメントには「Amazon Quick が AWSQuickSightBedrockAccess マネージドポリシーを自動的に作成し、入力した ARN にスコープを絞って Quick サービスロールにアタッチする」と記載があります。AWS Resources への ARN 登録を行ったうえで確認しましたが、この名前の AWS マネージドポリシーは存在せず、アカウント内のどのロールにも Bedrock 関連のポリシーが追加された形跡はありませんでした。

% aws iam get-policy --policy-arn arn:aws:iam::aws:policy/AWSQuickSightBedrockAccess

An error occurred (NoSuchEntity) when calling the GetPolicy operation:
Policy arn:aws:iam::aws:policy/AWSQuickSightBedrockAccess was not found.

ポリシー名が変わったのか、別の仕組みで権限が渡されているのかは確認できませんでした。検証に使った Amazon Quick のサービスロール aws-quicksight-service-role-v0 には AdministratorAccess が付与済みだったため、そもそも追加のポリシーがなくても bedrock:Retrieve は通る環境だった点も申し添えておきます。最小権限で構成する場合は、bedrock:Retrievebedrock:GetDocumentContent が Quick サービスロールに実際に付与されているかを、接続後に自分で確認したほうが安全です。権限エラーが出る場合の切り分け手順は、Amazon Quick 側のトラブルシューティングに 5 つのレイヤーとして整理されています。

https://docs.aws.amazon.com/quick/latest/userguide/byo-bedrock-kb-troubleshooting.html

チャットから使うには、Quick アセットを追加する でナレッジベースを選択します。

20260813-amazon-mkb-with-quick-7

日本語で自然言語問合せ

チャット画面の下部でナレッジベース(Bedrock - knowledgebase)を選択し、日本語で質問します。5 問を続けて投げました。

1. 単一文書の参照と在庫状況

ゲーミング用途に向いたノートパソコンはどれですか。在庫状況も教えてください。

20260813-amazon-mkb-with-quick-8

Gaming Laptop X を挙げ、ディスプレイ・プロセッサ・GPU・メモリ・ストレージ・無線・質量・バッテリーの仕様、価格 284,800 円、平均評価 4.8 を列挙したうえで、在庫なし(入荷待ち)で次回入荷は約 4 週間後という点まで回答しました。さらに「GPU 性能が不要であれば UltraBook Pro 14(194,800 円・在庫あり)も選択肢」と代替案を添えています。

回答文の途中に gaming-laptop-x.mdsupport-faq.mdultrabook-pro-14.md という引用元のチップが表示され、どの記述がどのファイル由来かが段落単位でわかる形になっています。ヘッダーには「2 ステップを完了しました」と表示され、内部で複数回の検索が走ったことが読み取れます。

2. 価格条件での絞り込みと文書横断

10万円以下でノイズキャンセリング機能がある製品と、その返品期限を教えてください。

20260813-amazon-mkb-with-quick-9

Noise Cancel Headphones(41,800 円 / 最大 -42dB)と Wireless Earbuds(22,800 円 / 最大 -28dB)の 2 製品を比較表にまとめ、さらに返品期限を別の表で提示しました。ヘッドホンは開封後でも未使用なら返品可、イヤホンは衛生上の理由で開封後は返品不可という、返品ポリシー側にしか書かれていない条件まで正しく引いています。

この問いは、先ほどの Retrieve API 単体では上位 5 件が Noise Cancel Headphones 4 件と return-policy.md 1 件で、Wireless Earbuds を取りこぼしていました。チャット側では 2 製品とも拾えており、単発の検索では届かなかった範囲を補えています

ただし比較表の Wireless Earbuds の「ブランド」と「平均評価」が (空欄)になっています。元の文書には Acme・4.3 と書かれているため、表への転記が漏れた形です。表形式の回答は読みやすい一方で、セルの欠損は本文中の記述より気付きにくいため、重要な値は引用元を開いて確認したほうがよさそうです。

3. 表のセル参照と条件の掛け合わせ

Comfy ブランドの家具を北海道に配送する場合の送料と納期を教えてください。

20260813-amazon-mkb-with-quick-10

Comfy ブランドの家具が Office Chair ErgoStanding Desk の 2 製品であることを製品仕様書から特定し、配送料金表の「北海道 × 大型家具」のセルから 8,800 円 を引いています。「商品代金が 55,000 円以上でも大型家具は送料無料の対象外」という但し書きも拾えていました。

さらに、質問していない設置サービスの料金(開梱・組み立て・設置 11,000 円、梱包材回収 3,300 円)、北海道は設置サービスの対応日が限られること、エレベーターのない 3 階以上は追加料金が発生すること、両製品ともメーカー保証 5 年であることまで補足しています。配送料金表・製品仕様書・保証規定という 3 種類の文書をまたいだ回答です。

4. ブランド横断と規程の条件抽出

Vortex 製品の保証期間と、延長保証を付けられる条件を教えてください。

20260813-amazon-mkb-with-quick-11

Vortex ブランドの製品が Gaming Laptop XMechanical Keyboard の 2 つであることを特定し、標準保証 1 年、延長は最長 3 年、申込期限は購入日から 30 日以内、価格は製品価格の 8%(2 年延長)/ 12%(3 年延長)を表にまとめました。

興味深いのは「製品別の延長保証料金(参考)」という表で、元の文書には書かれていない金額を計算して出している点です。Gaming Laptop X は 284,800 円 × 8% = 22,784 円、Mechanical Keyboard は 17,800 円 × 8% = 1,424 円で、いずれも計算は正しい値でした。保証対象外の事由や保証適用の 4 ステップの手順も併せて提示しています。

5. 数値条件での絞り込みと割引テーブル

評価が4.5以上の製品を、法人でまとめて20台購入する場合の割引率を教えてください。

20260813-amazon-mkb-with-quick-12

10 商品のうち評価 4.5 以上の 5 商品(Noise Cancel Headphones 4.9、Gaming Laptop X 4.8、UltraBook Pro 14 4.7、4K Monitor 27 4.6、Mechanical Keyboard 4.5)を漏れなく列挙し、20 台の数量割引 8% を提示しました。さらに 4K Monitor 27 はディスプレイカテゴリのため 20 台以上で追加 2%、合計 10% という、割引規程の別セクションに書かれた条件まで組み合わせています。併用上限 15%、数量は商品ごとにカウントする点も正しく拾えました。

注意事項として、Gaming Laptop X が在庫なしであること、1 回の発注金額 550,000 円以上で送料無料になること、20 台以上ならオンサイト保守オプションを別途見積もり可能なこと、見積書は 2 営業日以内に発行され有効期限は 30 日であることを補足しています。

一方で、対象製品の表で Noise Cancel Headphones のカテゴリが「周辺機器」と表示されました。元の文書では「オーディオ」カテゴリです。オーディオカテゴリには追加割引の規定がないため「追加割引なし」という結論自体は正しいものの、カテゴリ名は誤りでした。

5 問を通しての所感

回答のタイムスタンプは 18:13 / 18:15 / 18:16 / 18:17 / 18:18 で、質問の入力時間を含めて 1 問あたり 1 分強のペースで一巡しました。5 問とも日本語で質問して日本語で回答が返り、回答の随所に引用元のファイル名がチップとして表示されます。回答の末尾には「次にどうしますか?」というフォローアップの候補も提示されました。

正誤をまとめると次のとおりです。

検証したかったこと 結果
1 単一文書の参照+在庫状況 正答。代替製品の提案まで付与
2 価格条件での絞り込み+文書横断 正答。Retrieve API 単体では取りこぼした 2 製品目も拾えた。ただし表の一部セルが空欄
3 表のセル参照+複数文書の組み合わせ 正答。3 文書をまたいだ補足付き
4 ブランド横断+条件抽出 正答。文書にない金額を正しく計算
5 数値条件での絞り込み+割引テーブル 正答。カテゴリ名の表示に 1 件の誤り

考察

ベクトルストアを一切意識せずに RAG を構築できます。 今回の手順で登場した AWS リソースは、S3 バケット・IAM ロール・ナレッジベース・データソースの 4 つだけです。OpenSearch Serverless のコレクションもデータアクセスポリシーもネットワークポリシーも、インデックスのマッピング定義も出てきません。サービスロールに必要な権限も s3:ListBuckets3:GetObject の 2 つで済み、既定のマネージド埋め込みモデルを使う限り bedrock:InvokeModel すら不要でした。

日本語のドキュメントはそのまま扱えます。 UTF-8 の Markdown を 15 件投入して失敗 0 件、kuromoji のようなアナライザー設定も、チャンクサイズの調整も行っていません。日本語の質問に対して日本語で回答が返り、Markdown の表からセル単位で値を引く精度も実用に耐えるものでした。

Amazon Quick 側のリージョン制限が最大の制約です。 Managed Knowledge Base 自体は東京リージョンでも利用できますが、Amazon Quick との連携はバージニア北部・オレゴン・アイルランド・シドニーの 4 リージョンに限られ、しかもナレッジベースと Amazon Quick インスタンスは同一リージョンである必要があります。国内データの取り扱いに制約がある案件では、現時点では採用しづらい構成です。

接続はコンソール専用です。 aws quicksight create-knowledge-base のデータソースタイプに Bedrock 型が存在せず、IaC やスクリプトでの自動化ができません。一方で describe-knowledge-base / describe-data-sourceFULLY_MANAGED_KNOWLEDGE_BASE を返すため、作成後の状態確認や棚卸しは CLI からできます。1 つの Amazon Quick インスタンスに接続できる Managed Knowledge Base は最大 2 つまでという上限もあるため、複数のデータ領域を扱いたい場合は 1 つのナレッジベースに複数のデータソースをぶら下げる設計になります。

ドキュメントと実装に差異がありました。 接続の導線が Amazon Bedrock 側と Amazon Quick 側のドキュメントで食い違っており、実際の画面は Amazon Quick 側の記述に一致していました。また、自動でアタッチされるとされる AWSQuickSightBedrockAccess マネージドポリシーは、ARN 登録後も存在を確認できませんでした。GA 直後の機能ではドキュメントの更新が追いついていないことがあるため、権限まわりは実際にアタッチされたポリシーを確認しながら進めるのが安全です。

回答の生成部分は確認が必要です。 5 問とも結論は正しかった一方で、比較表のセルが 1 つ空欄になる、カテゴリ名を取り違えるといった細かい誤りがありました。引用元がチップで表示されるため元文書をたどれる作りにはなっているので、金額や条件など影響の大きい値については引用元を開いて確認する運用が現実的です。

今後に期待したい点は次のとおりです。

  • 東京リージョンでの Amazon Quick 連携のサポート
  • aws quicksight create-knowledge-base での Bedrock managed knowledge base 対応(IaC 化)
  • 1 インスタンスあたり 2 つという接続上限の緩和
  • S3 のオブジェクト更新を検知した自動同期(現状は StartIngestionJob を自分で叩く必要があります)

なお、ACL 対応のコネクタ(SharePoint、Confluence、Google Drive、OneDrive)を使う場合は、Amazon Quick が問い合わせ時にユーザーの ID を自動的に Amazon Bedrock へ渡し、元のデータソースで閲覧権限のある文書だけに検索結果が絞られます。Amazon Quick 側に追加の設定は不要です。今回は S3 コネクタで aclEnabledfalse のため、この挙動は検証していません。

https://docs.aws.amazon.com/quick/latest/userguide/byo-bedrock-kb-acl.html

最後に

Amazon Bedrock の Managed Knowledge Base は、ベクトルストアの選定・構築・運用を丸ごと引き受けてくれる RAG 基盤です。今回は日本語の商品カタログと社内文書 15 件を S3 に置き、AWS CLI で 4 コマンド(ロール作成・ナレッジベース作成・データソース作成・取り込み開始)を叩くだけで検索できる状態になりました。サービスロールに必要な権限は S3 の読み取りだけで、埋め込みモデルの指定もチャンクサイズの調整も不要です。

そこに Amazon Quick を接続すると、コンソールでの数クリックだけで日本語のチャット問い合わせができるようになります。単一文書の参照はもちろん、「10 万円以下でノイズキャンセリング機能がある製品と、その返品期限」のように製品仕様書とポリシー文書をまたぐ問いや、「評価 4.5 以上の製品を 20 台購入した場合の割引率」のように条件で絞り込んだうえで別の規程を組み合わせる問いにも回答できました。Retrieve API を単発で呼ぶだけでは取りこぼしていた製品も、チャット側では拾えています。

一方で、Amazon Quick との連携は東京リージョンに未対応であること、接続がコンソール専用で IaC 化できないこと、1 インスタンスあたり 2 つまでという上限があることは、採用判断の前に押さえておく必要があります。回答の細部(比較表のセルやカテゴリ名)にも小さな誤りがあったため、引用元をたどって確認できる運用とセットで使うのが現実的です。

社内文書を対象にした問い合わせ環境を、ベクトルデータベースの運用なしで立ち上げたい場合には有力な選択肢になります。まずは対象リージョンで少量のドキュメントを取り込み、Retrieve API で検索精度を確認してから Amazon Quick に接続する、という順序で試すことをおすすめします。この記事がどなたかのお役に立てば幸いです。

合わせて読みたい

https://dev.classmethod.jp/articles/20260617-amazon-bedrock-managed-knowledge-base/

https://dev.classmethod.jp/articles/bedrock-managed-knowledge-base-retrieve-agentic-retrieval/

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事