Amazon Q Business コネクタを VPC に設置してデータソースへアクセスする

記事タイトルとURLをコピーする

こんにちは、やまぐちです。

概要

Amazon Q Business コネクタを VPC に設置してデータソースとして設定するまでを実施してみます。

Amazon Q Business とデータソース間の通信をプライベート間で完結させたいネットワーク要件がある場合などがユースケースとして挙げられます。
VPC Lambda がイメージに近いと考えています。

docs.aws.amazon.com

S3 バケットをデータソースにして試してみる

今回は、VPC エンドポイント経由からの通信のみがオブジェクトを閲覧できるバケットポリシーを設定して検証します。

VPC 内にコネクタを作成することで VPC エンドポイント経由で S3 バケットにアクセスできるようになります。

S3 バケットの設定

それではまず、データソースとして利用する S3 バケットの設定を実施します。
今回は、以下データが記載された Excel ファイル(sample-pii-data.xlsx)をデータソースとします。

employee_id full_name email_address phone_number department status
E1001 鈴木 一郎 i.suzuki@example.com 090-1111-2222 営業部 在籍
E1002 田中 花子 h.tanaka@example.com 090-3333-4444 人事部 在籍
E1003 高橋 次郎 j.takahashi@example.com 090-5555-6666 開発部 在籍
E1004 佐藤 裕美 y.sato@example.com 090-7777-8888 営業部 休職
E1005 伊藤 健太 k.ito@example.com 090-9999-0000 開発部 退職

上記ファイルを S3 バケットにアップロードします。
次にバケットポリシーを設定していきます。
今回は、S3 のゲートウェイ型 VPC エンドポイント経由のみでしかS3:GetObjectを実行できないように設定します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::バケット名",
        "arn:aws:s3:::バケット名/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-xxxxxxxxxxxxxxxxx"
        }
      }
    }
  ]
}

ここまで設定ができたら、S3 バケット側の設定は完了です。

データソースの設定

それでは、Amazon Q Business 側でデータソースの設定を実施していきます。
※ Application の作成など、手順を一部省略している部分がございます。
Application 作成など、1から Amazon Q Business を設定される方は以下ブログをご覧ください。 blog.serverworks.co.jp

VPC にコネクタを設置せずに設定してみる

まずは、VPC にコネクタを設置せずに実施してみます。

Application 内の Data source からデータソースを設定します。
対象の S3 バケットを選択し、「Configure VPC and security group - optional」をNo VPCで進めます。
データソースとして追加することはできました。
しかし、Sync (同期)を実施すると想定通り失敗しました。
CloudWatch Logs Insights でログを確認すると、権限エラーが出ているのがわかります。

エラー内容

Content/Metadata retrieval failed for document: User: arn:aws:sts::123456789012:assumed-role/QBusiness-DataSource-sf9ve/KendraCustomerSession is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:::バケット名/sample-pii-data.xlsx" with an explicit deny in a resource-based policy (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: xxx; S3 Extended Request ID: xxx=; Proxy: null)

VPC エンドポイント経由からの通信ではなかったため、アクセスがブロックされた形になります。

KendraCustomerSession is not authorized to perform: s3:GetObject on resource
余談ですが、エラーの内容から裏側で Kendra が使われているのがわかりますね。

VPC にコネクタを設置して設定してみる

それでは、次は VPC にコネクタを設置して設定してみます。

データソースの設定画面内の、「Configure VPC and security group - optional」で VPC,サブネット,セキュリティグループを指定します。

セキュリティグループの設定値はこちらからご確認ください インバウンドルールは、ルールなしで設定します。
インバウンドルール

アウトバウンドルールも、デフォルトで設定します。

アウトバウンドルール

Amazon Q Business が使用するデフォルトのセキュリティグループを次の値で設定することをお勧めします。

  • 受信ルール– これを空のままにすると、すべての受信トラフィックがブロックされます。
  • 送信ルール– すべての送信トラフィックを許可するルールを 1 つ追加して、Amazon Q Business がデータソースからの同期リクエストを開始できるようにします。
    • IPバージョン– IPv4
    • タイプ– すべてのトラフィック
    • プロトコル– すべてのトラフィック
    • ポート範囲– すべて
    • 宛先– 0.0.0.0/0

ドキュメントに上記ルールで設定することが推奨と記載があります。 docs.aws.amazon.com



データソースとして設定ができたら、同期をします。

同期中に ENI が作成されていました。
この ENI から S3 バケットにアクセスしている形となります。

しばらくすると、同期が完了しました!

同期が完了すると ENI は自動的に削除されます。

チャットで質問する

同期まで完了したので、チャットで質問してみます。

データソースの内容をもとに回答がきました!

まとめ

Amazon Q Business コネクタを VPC に設置してデータソースとして設定してみました。

VPC 内にコネクタを設置することで、送信元の制御がしやすくなると考えます。
ただし、ENI が自動作成、同期後に削除されるので IP アドレスに空きがあることを確認しておく必要がありそうです。

また、RDS などの一部コネクタは新規での作成ができないので、本設定は S3 コネクタでの利用がユースケースになりそうです。(2025年8月時点) docs.aws.amazon.com


それではまた、どこかで~

やまぐち まさる (記事一覧)

CS部・CS2課

AWS の構築・運用をやってます

3度の飯より野球が好き

2025 Japan AWS All Certifications Engineers