Amazon QuickSight で RLS を有効化したデータセットから子データセットが作成出来るようになりました

2022.10.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

Amazon QuickSight には Row Level Security (RLS) という機能があり、同一のデータセットでもテナントやユーザーに応じて表示可能なデータを制御する機能を使うことが出来ます。

そして QuickSight でデータセットを作成する際には既存のデータセットを継承した子データセットを作成することが出来ます。

従来は RLS が有効化されたデータセットから子データセットを作成することは出来ませんでしたが、先日のアップデートで RLS を有効化したデータセットから子データセットを作成することが出来るようになりました。

早速試してみます。

行レベルセキュリティ (RLS) の親データセットから子データセットを作成

まずは適当な表示用のデータセットを用意します。
CSV をアップロードします。

HogeGroupName,HogeUserName,HogeString,HogeNum
HogeTenant1,HogeUser1,aaa,111
HogeTenant1,HogeUser2,bbb,222
HogeTenant2,HogeUser3,ccc,333
HogeTenant2,HogeUser4,ddd,444

QuickSight の RLS では表示用のデータセットに、ルール定義データ用のデータセットを割り当てることで有効化されます。
以下のようなルールを CSV で作成し、別のデータセットとして作成します。

これは閲覧者が所属する QuickSight グループに応じて、HogeGroupName と HogeString にフィルターをかける RLS ルールです。

GroupName,HogeGroupName,HogeString
Tenant1,HogeTenant1,aaa
Tenant2,HogeTenant2,ddd

RLS 有効化後に新しいデータセットを既存データセットから作成してみましょう。
RLS を有効化したデータセットは以下のように「制限」マークが表示されます。

既存データセット選択後に「データセットで使用」を選択します。
今までは RLS を有効化したデータセットはここでデータセット作成が出来ませんでした。

作成した子データセットから適当な分析とダッシュボードを作成し、Tenant1 と Tenant2 に所属しているリーダー HogeUser1 でダッシュボードを参照してみましょう。

子データセットから作成されたダッシュボードでも RLS が効いてますね。

データセット一覧を確認してみると、以下のように子データセット自体には RLS が設定されている状態ではありませんでした。なるほど。

RLS 親データセットから作成したデータセットはダイレクトクエリモードのみ

先程のデータセット一覧では子データセットは SPICE ではなくてダイレクトクエリモードになっていましたね。
通常、子データセット作成時のデフォルトはダイレクトクエリですが SPICE モードにも変更出来ます。

しかし、RLS が有効化なデータセットから作成された子データセットはダイレクトクエリモードでのみ作成が可能という制限事項があります。

実際にデータセット編集画面からクエリモードを変更することは出来ませんでした。

RLS 親データセットから派生した子データセットに対して RLS を追加で設定可能

先程のデータセット一覧では子データセット自体には RLS ルールが設定されておらず、あくまでも親のルールを継承しているような動きをしていました。
RLS を有効化した親データセットから派生した子データセットでも RLS を別途追加設定することが可能です。

まず、親データセットには以下の RLS ルールを設定しておきます。
Tenant1 グループのユーザーは自分のグループのデータのみ参照出来るという状態を想定しています。

GroupName,HogeGroupName
Tenant1,HogeTenant1
Tenant2,HogeTenant2

そして、閲覧ユーザー HogeUser1 は QuickSight グループで Tenant1 にのみ所属した状態にしておきます。
その場合以下のようなダッシュボード表示となります。

ここで更に以下のルール定義データセットを作成し、子データセットに設定してみましょう。
以下のルールはグループに関わらず、HogeUser1 が aaa と ccc のレコードを参照出来るというルールです。

UserName,HogeString
HogeUser1,"aaa,ccc"

以下のように子データセットに RLS が適用されました。

ダッシュボードを閲覧してみると以下のような表示となりました。
親データセットと子データセットどちらのルールも満たすような「HogeTenant1 のレコードで HogeString が aaa か ccc のもの」という挙動になっています。

ちなみにこの状態で親データセットのテナント縛りの RLS ルールを解除すると以下のように子データセットのルールのみで表示されるようになります。

列レベルセキュリティ (CLS) の親データセット化は未サポート

QuickSight では RLS の他に列レベルセキュリティ (CLS) もサポートされています。

しかし、子データセットへの作成については CLS は本日時点では引き続き未サポートです。
以下のように CLS を有効化したデータセットは親データセットとして選択することが出来ません。

また、ルールなしで親子データセットを作成したあとに親データセットで CLS を有効化した場合はビジュアルが表示できなくなります。
ご注意ください。

さいごに

本日は Amazon QuickSight で RLS を有効化したデータセットから子データセットが作成出来るようになったので試してみました。

マルチテナントなダッシュボードを提供する際に RLS を使うシーンが多いと思いますが、RLS ルールを継承出来るようになったので親子データセットを使いたいシーンで個別にルール設定をしなくてもよくなりました。
そもそもデータセットでルールを管理しているのでもともと共通での利用がしやすかったなぁとは思っていますが、設定の手間もなくなりますね。