Amazon QuickSightでデータセットへのアクセスを制限する

2018.09.08

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

Amazon QuickSight の Enterprise Edition では、行レベルのセキュリティ(row-level security/RLS)を設定することで、データセットへのアクセスを制限できます。

GRANT または DENY のルール指定が可能で、SPICE・非SPICEのどちらのデータセットにも適用できます。

さっそく触ってみました。

前提

本機能はエンタープライズエディションでのみ利用可能です。

作業の流れ

以下の流れで作業します。

  1. データセットの定義
  2. データセットルールの定義
  3. データセットルールをデータセットに適用
  4. ダッシュボードへのアクセスコントロールを確認
  5. データセットルールを解除

1. データセットの定義

アクセスコントロールをかけるデータセットを用意します。 今回は、デフォルトでサンプルとして用意されている、"Sales-Pipeline" データセットを利用します。

このデータセットは

  • リージョン(US, EMEA, APAC)
  • セグメント(Enterprise, SMB, Startup)
  • Opportunity Stage(Lead, Prospect, etc)

といった売上データを管理しています。

今回は、フィールド

  • リージョン
  • セグメント

をアクセス制限に利用します。

このデータセットは SPICE で管理されていますが、行レベルのセキュリティは 非 SPICE のデータセットに対しても利用できます。

2. データセットルールの定義

次にアクセスコントロールするデータセットルールを作成します。

このデータセットも SPICE・非SPICE の両方を利用できます。

実運用では、データソースには

  • SPICE にファイルアップロード
  • S3
  • RDS

あたりを利用することになるかと思います。

ルールのデータスキーマ

データセットとデータセットルールに対して SQL JOIN 相当の操作ができるように、データセットルールのデータスキーマを定義します。

以下のカラムを用意します

  • UserName
  • アクセスをかけるフィールド一覧

CSV ファイルの例

UserName,Region,Segment
AlejandroRosalez,EMEA,"Enterprise,SMB,Startup"
MarthaRivera,US,Enterprise
NikhilJayashankars,US,SMB
PauloSantos,US,Startup
SaanviSarkar,APAC,"SMB,Startup"
sales-tps@example.com,"",""
ZhangWei,APAC,"Enterprise,Startup"

RDS に対する SQL の例

select User as UserName, Region, Segment
from tps-permissions

RDS のカラム名とデータセットのカラム名が異なる場合、SQL 時にエイリアスを使ってデータセットのフィールド名に合わせます。

3. データセットルールをデータセットに適用

ルールを適用したいデータセットを選択し、Permissions を選択します。

ポップアップダイアログで「Selected data set rules」にデータセットの一覧が表示されるため、ルールを定義したデータセットを指定し、「Permissions Policy」に GRANT または DENY を指定します。

確認画面が表示され、Apply すればルールが適用されます。

適用後、データセット一覧画面で アクセス制限のあるデータセットには"RESTRICTED" のアイコンがつけられています。

Analysis 一覧でも同じく専用アイコンがつけられています。

4. ダッシュボードへのアクセスコントロールを確認

アクセスコントロールの様子を Grant/Deny のそれぞれで確認します。

Grant

  • 指定された各ユーザーには、データセットルールのフィールド値に一致する行のみが表示されます。
  • フィールド値がブランクの場合、任意の値にアクセスできます。
  • ルールに記載のないユーザーはデータセットにアクセスできなくなります。

UserName,Region,Segment
SaanviSarkar,APAC,"SMB,Startup"
sales-tps@example.com,"",""

SaanviSarkar は「Region が APAC」かつ「Segment が SMB または Startup」のデータのみアクセスできます。

sales-tps@example.com は「Region が 任意の値」かつ「Segment が 任意の値」のデータのみアクセスできます。つまり、何も制限がかかっていません。

Deny

  • 指定された各ユーザーには、データセットルールのフィールド値に一致しない行のみが表示されます。
  • フィールド値がブランクの場合、任意の値にアクセスできなくなります。
  • ルールに記載のないユーザーはデータセットへのアクセスを受けません。

UserName,Region,Segment
SaanviSarkar,APAC,"SMB,Startup"
sales-tps@example.com,"",""

SaanviSarkar は「Region が APAC」かつ「Segment が SMB または Startup」を覗いたデータのみにアクセスできます。

sales-tps@example.com はデータセットにアクセスできなくなります。

ダッシュボードへの影響

UserName,Region,Segment
SaanviSarkar,APAC,"SMB,Startup"

を Grant で適用する前後でダッシュボードにどのような違いがあるのか確認します。

ルール適用前

全データが表示されています。

ルール適用後

「Region が APAC」かつ「Segment が SMB または Startup」のデータのみ表示されています。

5. データセットルールを解除

ルールを適用しているデータセットを選択し、Permissions をクリックします。

Selected data set rules に現在適用済みのルールを確認できます。

ルールを解除するには "Remove data set" ボタンをクリックします。

確認画面が表示され、"Remove data set" リンクで解除完了です。

データセットルールが不要な場合は、合わせてこのデータセットを削除してください。

注意

データセットに対して、ルールは一つだけ適用できます。 たとえば、同じデータセットに対して GRANT と DENY の2種類のルールを適用することはできません。

Deny 形式でルールを適用すると、データセットに新しい種類のデータが紛れこんできた時に、全ユーザーに丸見えになります。 データとルールで同期遅延が発生しないように気をつけましょう。

参考