LoginSignup
1
1

More than 1 year has passed since last update.

QuickSight でユーザーによって表示するデータを動的に制限する行レベルセキュリティ(RLS)

Posted at

はじめに

QuickSight を利用しているときに、ログインするユーザーによって表示するデータに制限を掛けたいときがあります。たとえば営業売上金額のように、各営業部署の評価に直接的につながるものを、他の部署に共有をしたくないシチュエーションがあります。(といつつ、データを全社共有して、データの民主化を進めた方が良い面もあったります。)

この時に表示を制限できる機能が、QuickSight の行レベルセキュリティです。QuickSight にログインするユーザーによって、表示するデータをコントロールできます。

この記事は、行レベルセキュリティの設定方法を紹介します。

概要図

まず、行レベルセキュリティの設定概要図を紹介します。

image-20230325173006683.png

行レベルセキュリティを利用するとき、「誰」が「どのデータ」を表示できるか定義する必要があります。csv で定義しても良いですし、Athena や RDS など、QuickSight が連携できるデータストアで定義しても良いです。

概要図を簡単に説明します。

busyo1-qa というグループに参加しているユーザーは、bysyo1 のデータが閲覧できます。対して、これ以外のbusyo2 busyo3 のデータが表示できません。「行レベルセキュリティの制御ルールデータセット」に定義されているように、busyoidbusyo1 のデータのみ表示できるようになります。

各部署ごとに QuickSight のグループを用意することで、適切に表示データの管理が可能です。

それでは具体的な設定方法を見ていきましょう。

行レベルセキュリティのルール定義を CSV で作成

行レベルセキュリティで、「誰」に「どのデータ」を見れるか定義する csv ファイルを作成します。この記事では、次の csv ファイルを作成します。

GroupName,busyoid
busyo1-qs,busyo1
busyo2-qs,busyo2
manager-qs,"busyo1,busyo2"
keieisou-qs,""

作成した csv ファイルを QuickSight にアップロードしていきます。行レベルセキュリティの定義は、QucikSight のデータセットで定義が必要です。New dataset を押します。

image-20230325162439772.png

Upload a file を押します。

image-20230325162653750.png

ローカルにある csv を選択して、Next を押します。

image-20230325162812326.png

登録できたので、Edit/Preview data を押します。

image-20230325162831847.png

データセットの中身が正しいことを確認しました。このまま CANCEL を押して画面を戻します。

image-20230325162944968.png

売上管理テーブルを Athena で作成

行レベルセキュリティを使うために、売上管理テーブルを作成していきます。テーブル定義は Athena を使っていきます。

まず、S3 にアップロードする csv ファイルを作成します。3 つの部署が含まれているデータになっています。

eigyoid,syouhinid,kosuu,busyoid
eigyo1,syouhin1,1,busyo1
eigyo2,syouhin2,2,busyo1
eigyo3,syouhin1,3,busyo2
eigyo4,syouhin2,4,busyo2
eigyo5,syouhin1,5,busyo3
eigyo6,syouhin2,6,busyo3

適当な S3 Bucket にアップロードします。

image-20230325164643875.png

Athena でテーブルの定義をします。アップロードした csv ファイルを参照しています。

CREATE EXTERNAL TABLE IF NOT EXISTS quicksight_rls.sales_revenue (
  eigyoid string,
  syouhinid string,
  kosuu int,
  busyoid string
)
ROW FORMAT SerDe 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SerDeProperties ("field.delim" = ",", "escapeChar"="\\",  "quoteChar"="\"")
STORED AS TEXTFILE
LOCATION 's3://quicksight-rls-test-sugi01/' 
TBLPROPERTIES ('has_encrypted_data'='false',  'skip.header.line.count'='1', 'serialization.encoding'='SJIS')

image-20230325165154813.png

以下のクエリーで中身を確認します。正しく認識されています。

SELECT * FROM "quicksight_rls"."sales_revenue" limit 10;

image-20230325165239518.png

売上管理テーブルに行レベルセキュリティを有効化

Athena で売上管理テーブルを作成できたので、QuickSight 上でデータセットを定義し、行レベルセキュリティを有効化します。

New dataset を押します。

image-20230325165713377.png

Athena を選びます。

image-20230325165731755.png

Create data source を押します。

image-20230325165802700.png

Athena で定義した Table を選択して、Edit/Preview data を押します。

image-20230325165840155.png

正常にデータが見えたので、SAVE & PUBLISH を押して CANCEL を押します。

image-20230325165916186.png

データセットの画面から、登録した sales_revenue を選択します。

image-20230325170145878.png

Row-level security の Set up を選びます。

image-20230325170209749.png

行レベルセキュリティのルールを定義したデータセットを選択します。

image-20230325170300697.png

Apply dataset を押します。

image-20230325170536686.png

Apply and activate を押します。

image-20230325170624474.png

行レベルセキュリティを有効化したことによって、データセットに鍵アイコンが付きました。

image-20230325170721784.png

QuickSight のグループとユーザーを作成

QuickSight 上でユーザーとグループを作成します。

  • IT 管理者が利用する QuickSight のユーザーも行レベルセキュリティの影響を受けます。この手順では、IT 管理者は全部のデータを見ながらダッシュボードを作っていきたいため、IT 管理者 は全部のデータが見える keieisou-qs グループに参加させます。

image-20230325180114000.png

次の概要図と見比べながら、グループと行レベルセキュリティとの関係性を整理しておくと理解が深まります。

  • busyo1-qs : busyo1 のデータだけ見える
  • busyo2-qs : busyo2 のデータだけ見える
  • manager-qs : busyo1,busyo2 のデータが見える
  • keieisou-qs : 空白となっており、全部のデータが見える

image-20230325173006683.png

QuickSight の管理画面で、invite users を選びます。

image-20230325173354614.png

4 つの User を定義して、READER として invite します。

image-20230325173256884.png

指定したメールアドレスにメールが届くにて、accept ボタンを押して承認します。

image-20230325173456392.png

QuickSight の管理画面で、グループを作成します。

image-20230325173858504.png

グループ名を指定します。行レベルセキュリティの csv に書かれている GroupName のデータを一致させます。

image-20230325173941704.png

作成したグループに、ユーザーを追加します。

image-20230325174031869.png

くり返して、4 グループ作成します。(画像に関係ないグループが表示されていますが、別の検証で作った物なので無視してください。)

image-20230325174306627.png

ダッシュボードを作成

行レベルセキュリティを有効化したデータセットを使って、ダッシュボードを作っていきます。Create analysis を押します。

image-20230325171932207.png

Analysis の可視化では、簡単にデータを確認できるように、テーブルで全データを表示するようにします。その後、Publish dashboard を押して、ダッシュボードとして公開します。

image-20230325180722308.png

Publish dashboard を押します。

image-20230325180853977.png

ダッシュボードが作成されました。

image-20230325180955783.png

ダッシュボードをユーザーに共有

作成したダッシュボードを、他のユーザーに共有します。

image-20230325181033699.png

4 つの QuickSight グループを選択して View として共有します。

image-20230325181201360.png

動作確認

ここまでで行レベルセキュリティの設定ができました。実際に 4 ユーザーでログインしてダッシュボードを見てみましょう。

eigyo1 ユーザー

  • 想定通り busyo1 に制限されている

image-20230325181347455.png

eigyo3 ユーザー

  • 想定通り busyo2 に制限されている

image-20230325181552581.png

manager1 ユーザー

  • 想定通り busyo1busyo2 に制限されている

image-20230325181651841.png

keieisou1

  • 想定通り全データが見えている

image-20230325181738500.png

検証をつうじてわかったこと

  • QuickSight にログインしてダッシュボードを閲覧するときに、ユーザーごとに表示するデータを制御したいときは行レベルセキュリティが便利に利用できる。
  • 閲覧専用の Reader ユーザーがダッシュボードを閲覧するときに、行レベルセキュリティが利用できる。
  • 一方、Author 権限を付与している QuickSight ユーザーに、行レベルセキュリティを有効化したデータセットを「Owner」権限を付与すると、全部のデータが見える。基本的に行レベルセキュリティは閲覧専用の Reader ユーザーに利用すると考えると良さそう。

付録1 : Row Level Security の定義ファイルを更新

アップロードしたあとに、行レベルセキュリティのルール定義ファイルの更新方法を紹介します。(間違って定義しちゃったのを修正します)

まず、既にアップロードしているファイルを Remove します。

image-20230325175243868.png

Remove table を押します。

image-20230325175251642.png

何もデータがなくなったので、Add data で修正後の csv ファイルをアップロードします。

image-20230325175323813.png

upload a file を押します。

image-20230325175336297.png

Next を押します。

image-20230325175427480.png

データが更新できたので、SAVE & PUBLISH を押します。

image-20230325175447696.png

参考 URL

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1