[アップデート] Amazon QuickSight の新機能「制限された共有フォルダ」で共有フォルダ間の分離性を高めることが出来るようになりました

2023.11.06

いわさです。

Amazon QuickSight では管理者が共有フォルダを作成し、複数のユーザー間でデータセットや分析・ダッシュボードのアセットを共有し、フォルダに設定した権限を活用することが出来ます。

10 日前ほどになりますが、こちらの共有フォルダの種類として新たに「制限されたフォルダ」(Restricted shared folders)という概念が登場しました。

Restricted and unrestricted shared folders in Amazon QuickSight
QuickSight authors can now create restricted and unrestricted shared folders with the QuickSight CLI to help organize and manage the permissions of important QuickSight assets.

引用元:Document history for the Amazon QuickSight User Guide - Amazon QuickSight

アップデートアナウンスと東京リージョンへのロールアウトを待っていたのですがなかなかこなかったので、一足先に海外リージョンで試してみました。
試してみたところ、この機能は利便性がちょっと落ちるのですが、かなり強い制限が入る共有フォルダであることがわかりました。

ユースケースとしては、何がなんでもフォルダの外部へ共有出来ないようなアセット管理をしたい時に使える機能になると思います。
今回は実際に試した様子を、従来の共有フォルダの課題というか仕様を含めて解説してみたいと思います。

制限なしの従来の共有フォルダの使い方と課題

まず、QuickSight の共有フォルダは各ユーザーのサイドメニューからアクセスすることが出来ます。
そして、ユーザーは自分がフォルダに対して寄稿者あるいは表示者の許可が与えられている場合のみ表示・アクセスすることが出来ます。

この共有フォルダは許可されたユーザー間で次のようにアセットを共有することが出来ます。
以下はデータセットを共有している状態です。

フォルダに寄稿者としてアクセス許可されているユーザーは、共有されたデータセットやデータソースを使って新しいデータセットや分析を作成することが出来ます。

そして、実は共有フォルダ上のアセットは、権限を持っていればその共有フォルダではない別のフォルダに移動したり、あるいは共有フォルダの外からのアセットを共有フォルダ内に移動することが出来る。

以下は共有フォルダで共有されたデータセットを使って作成されたデータセットになっています。

このように、ある程度の権限を与えられた寄稿者に関しては、アセットの共有フォルダ内外の境界がちょっと緩い状態でした。 あくまでも共有することが目的で、共有フォルダを使ってマルチテナントに近いものを実現するような強めの境界が必要な際には分離性が不十分でした。

制限された共有フォルダが問題を解決する

新しく登場した制限された共有フォルダはより制限が強いものになっています。
セキュリティ上の問題も解決してくれるのですが、制限が強すぎて不便になる場合も有り得ます。

ここではまず、公式ドキュメントにそれぞれのフォルダごとのアクションが列挙されているので、寄稿者の権限を比較出来るように整理してみました。

アクション 制限なし共有フォルダ 制限あり共有フォルダ
フォルダ内のアセットを外部に共有
フォルダ権限の変更
フォルダ内に新規アセットを作成
フォルダ内のアセットを変更
フォルダ内のアセットを削除
既存のアセットをフォルダに追加
共有フォルダからアセットを削除
フォルダ内のアセットを表示
フォルダ内のアセットを使ったアセットをフォルダ外に作成
フォルダ外のアセットを使ったアセットをフォルダ内に作成

参考:Organizing assets into folders for Amazon QuickSight - Amazon QuickSight

上記太字の箇所が差分となっており、ざっくり言うとフォルダ内外のアセットの移動や利用や出来なくなっています。

制限された共有フォルダの作成方法

では実際に制限された共有フォルダを作成して挙動を確認してみたいと思います。

前提として通常の共有フォルダとは異なり、コンソールからの作成は出来ません。
API から作成する必要があるので本日は AWS CLI から作成したいと思います。

さらに、本日時点では東京リージョンやバージニア北部リージョン、また公式ドキュメントの作成手順に記載されているオレゴンリージョンではまだ機能がロールアウトされていないようで、作成することが出来ませんでした。
QuickSight の新機能のロールアウトは、API が公開されてドキュメントにて新機能のアナウンスがされてから数日経過後に使えるようになることが多いです。東京リージョンは...もう少し待ちましょう。

今回私のほうで色々なリージョンで試してみたところ、オハイオリージョン(us-east-2)で有効化されていることを発見しました。本日はこちらのリージョンで試した様子を紹介したいと思います。

create-folderコマンドのFolderTypeパラメータに、従来はSHAREDのみ指定することが可能だったのですが、AWS CLI v1.29.67 以上からRESTRICTEDが指定出来るようになっています。

このRESTRICTEDを指定することで制限された共有フォルダを作成することが出来ます。

% cat hoge.json
{
    "AwsAccountId": "123456789012",
    "FolderId": "hoge1106fugafuga",
    "Name": "hoge1106restricted",
    "FolderType": "RESTRICTED",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/hogeadmin",
            "Actions": [
                "quicksight:CreateFolder", 
                "quicksight:DescribeFolder", 
                "quicksight:CreateFolderMembership", 
                "quicksight:DeleteFolderMembership", 
                "quicksight:DescribeFolderPermissions"
            ]
        },
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/hoge1106author",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        }
    ]
}
% aws quicksight create-folder --cli-input-json file://hoge.json --profile hogeadmin --region us-east-2
{
    "Status": 200,
    "Arn": "arn:aws:quicksight:us-east-2:123456789012:folder/hoge1106fugafuga",
    "FolderId": "hoge1106fugafuga",
    "RequestId": "97ed27c7-4991-46a8-8d36-a054c4e18280"
}

権限については後述しますので一旦ここでは無視します。
コンソールを確認してみると、共有フォルダが新しく作成されていることが確認出来ます。
そして見慣れない鍵マークが表示されていますね!どうやらこれが制限された共有フォルダを示すアイコンのようです。

create-folder実行時に権限を指定しましたが、View permissions でどのような割り当てがされているのかを確認してみましょう。

create-folder実行時に、権限エラーが発生することがあります。
その際のエラーメッセージには許容されるアクションの組み合わせが記載されていました。

% aws quicksight create-folder --cli-input-json file://hoge.json --profile hogeadmin --region us-east-2

An error occurred (InvalidParameterValueException) when calling the CreateFolder operation: Permissions contain unsupported permission sets for a restricted folder. Valid sets: [quicksight:CreateFolder, quicksight:DescribeFolder, quicksight:CreateFolderMembership, quicksight:DeleteFolderMembership, quicksight:DescribeFolderPermissions] or [quicksight:DescribeFolder]

どうやらこの組み合わせが権限セットであり、View permissions 画面で表示される「許可」列の値になるようです。
CLI のエラーメッセージから独自に整理してみたところ以下の3パターンがあるようです。

閲覧者

  • quicksight:DescribeFolder

寄稿者

  • quicksight:CreateFolder
  • quicksight:DescribeFolder
  • quicksight:CreateFolderMembership
  • quicksight:DeleteFolderMembership
  • quicksight:DescribeFolderPermissions

共同管理者?
  • quicksight:CreateFolder
  • quicksight:DescribeFolder
  • quicksight:UpdateFolder
  • quicksight:DeleteFolder
  • quicksight:CreateFolderMembership
  • quicksight:DeleteFolderMembership
  • quicksight:DescribeFolderPermissions
  • quicksight:UpdateFolderPermissions

今回失敗したのですが、エラーメッセージから推測する限りでは寄稿者よりも強い権限を持つ許可セットが存在するようにです。公式ドキュメントの記述からすると「共同管理者」あるいは「共同所有者」あたりだと思います。
しかし、共同管理者の作成は失敗しました。

ちなみに、AWS 公式ドキュメントのcreate-folderの権限セットは上記3つのどれにも当てはまらず、しかも失敗しました。もしかしたらエラーメッセージが誤っており存在しない許可セットである可能性もあります。

ちょっと謎が残っているのですが、後日確認するとして今回は寄稿者で進めてみます。

共有フォルダにアセットを作成

まずは共有フォルダにアセットを作成して様子を見てみましょう。

しかし制限された共有フォルダで苦労したのがアセットの作成です。
通常の流れは共有フォルダ外でアセットを作成し、共有フォルダに追加していると思います。

今回の制限された共有フォルダは外部で作成したアセットを追加することが出来ないので今までの手順を行うことが出来ません。
次のようにフォルダに追加しようとしても制限された共有フォルダは表示されませんでした。

今回 API のアップデートで各アセットの作成パラメータにフォルダを指定することが出来るようになっています。
このアップデートによってアセットを共有フォルダに直接作成することが出来るようになりました。

コンソールからデータソースの指定時に該当オプションを見つけることが出来なかったので、今回はデータソースを AWS CLI で作成しました。

S3 に適当な CSV ファイルと、QuickSight のデータソース用に次のマニフェストファイルをアップロードしました。

{
    "fileLocations": [
        {
            "URIs": [
                "https://hoge1106qs.s3.amazonaws.com/hoge1106.csv"
            ]
        }
    ],
    "globalUploadSettings": {
        "textqualifier": "\""
    }
}

このパラメータを指定してcreate-data-sourceコマンドでデータソースを作成してみます。

% cat create-data-source.json
{
    "AwsAccountId": "123456789012",
    "DataSourceId": "hoge1106datasource",
    "Name": "hoge1106datasource",
    "Type": "S3",
    "DataSourceParameters": {
        "S3Parameters": {
            "ManifestFileLocation": {
                "Bucket": "hoge1106qs",
                "Key": "manifest.json"
            }
        }
    },
    "FolderArns": [
        "arn:aws:quicksight:us-east-2:123456789012:folder/hoge1106fugafuga"
    ]
}
% aws quicksight create-data-source --cli-input-json  file://create-data-source.json --profile hogeadmin --region us-east-2
{
    "Status": 202,
    "Arn": "arn:aws:quicksight:us-east-2:123456789012:datasource/hoge1106datasource",
    "DataSourceId": "hoge1106datasource",
    "CreationStatus": "CREATION_IN_PROGRESS",
    "RequestId": "88c8622d-0b43-4919-932f-a15ae453321d"
}

上記ハイライト箇所が今回のアップデートで新たに追加出来るようになった部分で、フォルダー ARN を指定出来るようになっています。
また、権限設定済みの共有フォルダに追加する兼ね合いからか、パーミッションなしでデータソースを作成する必要がありました。パーミッションパラメータを指定すると次のエラーが発生します。

% aws quicksight create-data-source --cli-input-json  file://create-data-source.json --profile hogeadmin --region us-east-2

An error occurred (InvalidParameterValueException) when calling the CreateDataSource operation: Invalid parameter value: permissions cannot be configured for a resource created in a restricted folder

どうにかこうにかして、無事データソースを作成することが出来ました。

ここからはコンソールで制限された共有フォルダの仕様を確認出来る

このデータソースを使ってデータセットを作成しようとしたところ、今回のアップデートで追加されたと思われる画面表記を見つけることが出来ました。
ここからはコンソールで操作を行った様子を紹介したいと思います。

データセット作成

まず、制限されたフォルダに作成したデータソースを使ってデータセットを作成しようとすると、いつもとは見慣れない次のメッセージが表示されました。

このデータセットは制限されたフォルダである hoge1106restricted にあります。このデータソースに基づく項目は同じフォルダに追加されます。

作成されたデータセットの概要タブには、外部フォルダと併せて使用することが出来ないとも言われています。
データセットは複数のデータソースを結合して構成することがあるのですが、おそらくここではそのことを言っていますね。
制限された対象の共有フォルダ内のデータセットで組み合わせる必要があるとのこと。

実際にデータセットに別のデータを追加しようとしても、制限されたフォルダ外のアセットはリンクすることが出来ませんでした。なるほど。

分析とダッシュボードの作成

このデータセットから普通に分析を作成することが出来ました。
後述しますが共有フォルダ内に分析アセットは作成されます。

また、その分析からダッシュボードを公開しようとすると、こちらも見慣れない注意メッセージが表示されました。

このダッシュボードは、分析と同じ用に制限されたフォルダである hoge1106restricted に追加されます。

なるほど。
ダッシュボードの公開後、確認してみると一連のアセット(データセット、分析、ダッシュボード)がデータソースと同じく制限された共有フォルダ内に作成されていることが確認出来ました。

さいごに

本日は Amazon QuickSight で新しく使えるようになった「制限された共有フォルダ」について調べてみました。

ちょっと雑ですが従来の共有フォルダは「自由にこのデータ使ってね」という共有の仕方で、今回の制限された共有フォルダは「限られたこの範囲内でのみデータを使ってね」という、より制限した共有方法ですね。

QuickSight を使うユーザー規模が増えてきて、特定のグループ間でデータが共有されるのを防ぐような強力な分離性が必要な要件を満たす際に使えそうですね。