2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

QuickSightで行レベルアクセス制御を行う手順

Last updated at Posted at 2023-03-26

以下の投稿の続きです。


マルチテナント型のアプリケーションの場合に、一つのテーブルに登録されているデータを、企業や組織ごとにアクセス制御したいことってありますよね。

QuickSightでこのようなアクセス制御を行う方法として、行レベルのセキュリティ機能があります。参考ドキュメント

QuickSightには匿名埋め込み機能というものがあり、QuickSightにユーザー登録をしなくても、ダッシュボードを表示するための一時URLを発行することができます。

匿名埋め込み機能と行レベルのセキュリティ機能を組み合わせることで、自前アプリケーションにQuickSightのダッシュボードを適切な権限制御を行いながら埋め込むことが可能になります。

前回の投稿(QuickSightでVPC内のAuroraに接続する環境をCDKで構築する手順)で作成したQuickSightとAuroraの構成を使って、行レベルのセキュリティを試してみました。

匿名埋め込み機能を使用するには、QuickSightのサブスクリプションをリーダーあたりの料金からセッションキャパシティの料金に変更する必要があります。

image.png

データセットに行レベルアクセス制御を追加する

1. データセット一覧画面を表示

Screen Shot 2023-03-25 at 14.38.10.png

2. データセットを選択し、行レベルのセキュリティ設定をクリック

Screen Shot 2023-03-25 at 14.38.13.png

3. タグベースのルールを設定

ユーザーベースのルールと、タグベースのルールがありますので、タグベースのルールを選択します。
Screen Shot 2023-03-25 at 14.38.17.png

は実際のテーブルの列名でタグはAPIで呼び出す際のタグ名です。
すべて一致は、タグの値がこの値の場合にselect *相当の動作となります。(タグの値を*や''にしてもこの動作にはなりません。)
Screen Shot 2023-03-25 at 14.38.58.png

5. ルールを有効化

Screen Shot 2023-03-25 at 14.39.05.png

右側のチェックボックスがオンになります。
Screen Shot 2023-03-25 at 14.39.09.png

埋め込みURLを発行する

AWS CLIで匿名アクセス用のURLを発行します。

group1のデータだけが閲覧できるよう--session-tagsを設定しています。

aws quicksight generate-embed-url-for-anonymous-user \
  --aws-account-id 754291963749 \
  --namespace default \
  --authorized-resource-arns arn:aws:quicksight:ap-northeast-1:754291963749:dashboard/bb9902f8-d8eb-4182-a6cb-11a35af05956 \
  --experience-configuration '{"Dashboard":{"InitialDashboardId":"bb9902f8-d8eb-4182-a6cb-11a35af05956"}}' \
  --session-tags '{"Key":"group_tag", "Value": "group1"}'

レスポンス

{
    "Status": 200,
    "EmbedUrl": "https://ap-northeast-1.quicksight.aws.amazon.com/embed/a080a360de4f476e8c2be48dd35d0a3f/dashboards/bb9902f8-d8eb-4182-a6cb-11a35af05956?code=AYABeDAfj8Fb0N5iC6JKhyBSZ3gAAAABAAdhd3Mta21zAFBhcm46YXdzOmttczphcC1ub3J0aGVhc3QtMTozNjcwOTQ1NjE4OTQ6a2V5LzkyZDU3MjEzLTc0MjItNGNhOC1iYWZiLTg2MDFjNGZkODgyNwC4AQIBAHgeDGL3XAnX5chwrubXLtqmn-xwPT7Th-AyeZ72nfHdvwGr5O_l6Ygj8thbDymMa0DJAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMmdMA3nNlMVJpvO-eAgEQgDvEtqszA2zLpFveyPxRdBBL_HYma-HJsC0zliKS_JyKIgvS8vSpRGAR6jMm61j-gMxDuFpQPDa3XFC2iQIAAAAADAAAEAAAAAAAAAAAAAAAAABhccQB36YnmgqNelMh0sh2_____wAAAAEAAAAAAAAAAAAAAAEAAACbRj35gF6A5SiKA_Qu3Guj1h6ncVUI5mzBN6YGrUqO3a6EjlnTmi2cIGEogmcv-fgMFIyX6Jq-oHUytRIU03eA9BYo5apu75RyiX2MuyoZJ9DPilgXn_9NBCxkPDgHamKSWtag6w3zxgqSGcH7ZKt_FIHozSBuK3Fm15DSzLQIEWn7Oonm1gC7MyGUgWzsyaIUIObAioZiNP0jMLoiS0n5bFbS2iE8nZrpHBmK&identityprovider=quicksight&isauthcode=true",
    "RequestId": "0702dbdb-0145-443e-8891-3a157218f379",
    "AnonymousUserArn": "arn:aws:quicksight:ap-northeast-1:754291963749:anonymousUser/default/a2450b6ddc564e1ea1303177c6c72d8a"
}

発行されたURLにブラウザでアクセスします。想定通り、group1の値だけが表示されます。
Screen Shot 2023-03-25 at 14.52.36.png

--session-tags '{"Key":"group_tag", "Value": "All"}'の場合は、すべてのデータにアクセスができます。
Screen Shot 2023-03-25 at 22.24.00.png

  • 試しにValueを*にしてみましたが、この場合はどの行にもアクセスできていません。(アクセスできていないのかデータが無いのかは、判別が付きません)

Screen Shot 2023-03-25 at 22.25.04.png

QuickSight作成者がデータセットにアクセスできるように設定

ここまでの手順でタグベースのルールを有効化すると、QuickSightに管理者や作成者として登録しているユーザーもアクセス制御の対象となり、ダッシュボードを表示してもこの様になってしまいます。

Screen Shot 2023-03-25 at 14.39.54.png

これではダッシュボードを作成できないので困ってしまいますが、ユーザーベースのルールを組み合わせることで、ダッシュボード作成者に表示させるデータの権限制御が可能です。参考ドキュメント

1. アクセス許可データセットを作成

誰がアクセスしていいかの情報はデータセットとして用意します。(CSV形式やデータベースを使うかは問いません)今回は、Aurora内のテーブルとして用意しました。

列名はUserNameGroupNameと、制御したいカラム名です。

CREATE TABLE user_master (
    UserName VARCHAR,
    GroupName VARCHAR,
    group_name VARCHAR
);

データとしては以下を登録します。

username groupname group_name
NULL Admin NULL
NULL Group2 group2
Group1 NULL group1

ユーザーベースのルールは、タグベースのルールと異なり、ユーザーまたはグループにルールを追加し、他のすべての列を値なし (NULL) のままにすると、すべてのデータへのアクセスが付与されます。という仕様があるため、Adminグループに所属するユーザーはすべてのデータにアクセスが可能となります。

2. QuickSightのグループを作成

ユーザーごとに制御もできますが、一般的にはグループを使用することになると思います。

QuickSight管理画面からグループの管理を行います。
Screen Shot 2023-03-26 at 17.03.07.png

Adminグループにユーザーを追加します。
Screen Shot 2023-03-26 at 17.03.16.png

3. user_masterテーブルを、データセットとして登録

通常の手順でデータセットを登録します。

Screen Shot 2023-03-26 at 17.12.03.png

4. 行レベルのセキュリティ設定を追加

対象のデータセットの行レベルのセキュリティ設定をクリックします。

Screen Shot 2023-03-25 at 14.38.13.png

ユーザーベースのルールをの中から、user_masterデータセットを選択します。

Screen Shot 2023-03-26 at 17.13.45.png

5. ルールを有効化

Screen Shot 2023-03-26 at 17.14.02.png

動作確認

  • グループの所属していない場合
    Screen Shot 2023-03-26 at 17.22.05.png

  • Adminグループの所属している場合(全データが閲覧可能)
    Screen Shot 2023-03-26 at 17.14.24.png

  • Group2グループに所属している場合(group2のデータだけ閲覧可能)
    Screen Shot 2023-03-26 at 17.16.36.png

想定通りの動作ですね。

2
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?