こんにちは、やまぐちです。
概要
今回は、Amazon Q Business で S3 をデータソースに設定して、ACL でアクセス制御してみます。
S3 バケットをデータソースとした場合に、特定のユーザには指定したプレフィックス内のデータを基に回答してほしくないといったユースケースが想定されます。
この場合に、S3 バケット内にアクセス制御について記載した Json ファイルを設置しておき、これをデータソース側で ACL 設定ファイルとして指定することでアクセス制御が可能です。
Json ファイルは以下のフォーマットで設定します。
[ { "keyPrefix": "s3://BUCKETNAME/prefix1/", "aclEntries": [ { "Name": "user1@example.com", "Type": "USER", "Access": "ALLOW" }, { "Name": "group1", "Type": "GROUP", "Access": "DENY" } ] }, { "keyPrefix": "s3://BUCKETNAME/prefix2/", "aclEntries": [ { "Name": "user2@example.com", "Type": "USER", "Access": "ALLOW" }, { "Name": "user1@example.com", "Type": "USER", "Access": "DENY" }, { "Name": "group1", "Type": "GROUP", "Access": "DENY" } ] } ]
やってみる
前提
今回は、バケット直下に「weather-sample.xlsx」、pii
プレフィックス配下に「sample-pii-data.xlsx」というファイルを配置して実施します。


それぞれのファイル内容は以下となります。
weather-sample.xlsx → 天気に関する質問で利用
date | area | city | weather | temperature_celsius |
---|---|---|---|---|
2025/8/13 | Kanto | Tokyo | Sunny | 32 |
2025/8/13 | Kanto | Yokohama | Partly_cloudy | 31 |
2025/8/13 | Kansai | Osaka | Cloudy | 30 |
2025/8/13 | Kansai | Kobe | Showers | 29 |
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 | 開発部 | 退職 |
今回は、Identity Center の「Amazon-Q-Pro」というグループにいるユーザはpii
プレフィックス配下のファイルからの回答はさせないようにします。
アクセス制御せずにチャットで質問する
この S3 バケットをデータソースとして設定します。
田中さんについて質問したら回答が返ってきました。
大阪の天気についても回答が返ってきました。
ACL でアクセス制御を設定する
S3 の設定
S3 バケットに以下のacl.json
を配置します。
Identity Center のグループ「Amazon-Q-Pro」はpii/
配下の内容を基にした回答がされなくなる内容になっています。
[ { "keyPrefix": "s3://S3バケット名/pii/", "aclEntries": [ { "Name": "Amazon-Q-Pro", "Type": "GROUP", "Access": "DENY" } ] } ]
Amazon Q Business 側の設定
次は、Amazon Q Business 側の設定を行います。
対象のデータソースを選択して「Action」-「Edit」を選択します。
「Sync scope」内にある「Access control list (ACL) configuration file location - optional」にacl.json
を指定して更新します。
同期を開始します。
ステータスが「Completed」になれば OK です!
ACL を設定した状態で質問してみる
それではさっそく「Amazon-Q-Pro」グループにいるユーザから質問してみます。
田中さんについて質問したら意図した通り、回答が返ってきませんでした!
天気の質問は制御をかけていないので、回答が返ってきました。
まとめ
ACL を利用して S3 プレフィックスごとのアクセス制御が簡単に実装できました。
Json ファイルを更新して同期すれば、制御の要件が増えたにもクイックに対応ができそうです。
フィールド属性を利用した制御方法も挙げられますが、ACL の方が手ごろに始められる印象を受けました。
S3 をデータソースにしてアクセス制御したい場合は積極的に採用したいなと思います。
それではまたどこかで~