QuickSightの共有フォルダ機能とグループ機能を使うとアクセス許可の管理がとても楽になる

QuickSightでは分析データやダッシュボードを閲覧者に共有することで、閲覧が可能になります。 それぞれのオブジェクトで誰が参照できるのか個別に設定することも可能ですが、共通の設定を行うための機能も用意されています。 ここでは、"共有フォルダ"と"グループ"について記します。
2021.01.13

いわさです。

QuickSightでは分析データやダッシュボードを閲覧者に共有することで、閲覧が可能になります。

それぞれのオブジェクトで誰が参照できるのか個別に設定することも可能ですが、共通の設定を行うための機能も用意されています。
ここでは、"共有フォルダ"と"グループ"について記します。

共有フォルダ

共有フォルダの作成

管理者ロールのユーザーが作成することが出来ます。
早速作成してみます。
サイトメニューから共有フォルダを選択し"新しいフォルダ"を選択します。

まずは一階層で組織別に作成してみました。

販売管理者、販売担当者、製造管理者、製造担当者ということでユーザーを招待します。
検証簡略化のためにIAMユーザーはオフで、QUICKSIGHTユーザーを作成します。

ユーザー作成直後、フォルダ作成直後はアクセス許可の設定をまだしていないので、参照出来ない状態です。

共有フォルダのアクセス許可設定

フォルダの共有を選択します。

QuickSightロールが閲覧者の場合はアクセス許可に指定出来るのは、"表示者"のみです。
QuickSightロールが作成者もしくは管理者の場合は"所有者"として設定することも出来ます。

ダッシュボードを共有フォルダに追加します。
ここで追加するダッシュボードはまだ共有設定をしておらず、作成者本人以外は閲覧できない状態です。

共有フォルダのアクセス許可が付与される旨のメッセージが表示されるので、"追加して共有"を押します。

共有フォルダへのアクセス

共有フォルダへのアクセス許可がされている場合、各ユーザーのサイドメニューに共有フォルダメニューが表示されます。

販売管理者でサインインし共有フォルダを見てみると、アクセス許可されたフォルダのみが閲覧可能で、製造部門向けの共有フォルダは表示されません。
同様に製造管理者の場合だと販売部門向けの共有フォルダは表示されません。

次に、全社部門に追加したダッシュボードのアクセス許可を確認してみると、個別にユーザー管理はされておらず、共有フォルダの設定に従うように設定されています。
アクセス許可を変更したい場合はダッシュボード毎に設定変更をする必要はなくて、格納されているフォルダのアクセス許可設定を変更するのみで済みます。

共有フォルダからの削除

共有フォルダからアイテムを削除すると共有されなくなります。
操作の際は、"フォルダから削除"と"削除"の2つが表示されます。

"削除"の場合だと、ダッシュボードの実体が削除されてしまい再作成が必要となるので注意が必要です。

サブフォルダを作成した場合のアクセス許可

サブフォルダを作成し、共有フォルダの階層化を行うことが出来ます。

フォルダのアクセス許可は、現在のフォルダに対するアクセス許可と、ルートフォルダに向かうすべてのフォルダに対するアクセス許可を組み合わせたものです。

アクセス許可は許可設定のみで拒否設定は出来ないので、上位の許可設定を消し込めません。
よって、公開フォルダの中に限定サブフォルダを作成することは出来ないので気をつけてフォルダ設計を行う必要があります。

なお、アクセス許可が設定されていない上位フォルダは、階層位置とフォルダ名は確認出来ますが、フォルダ内のオブジェクト参照は出来ません。

グループ

共有フォルダのアクセス許可を活用することで、オブジェクト毎の個別のアクセス許可を管理しなくても良くなりました。
しかし、ユーザー数が増えてきた場合は共有フォルダ毎にユーザー設定をしなければならないのでしょうか。

QuickSightにはグループという機能が提供されています。

グループはユーザーが所属するまとまりで、ユーザーを個別に管理する必要はなくアクセス許可の管理に活用することが出来ます。

※グループの作成・管理はQuickSightサイト上からは操作することは出来ません。APIもしくはAWS CLIの操作が必要となります。

グループの作成

今回はCloudShellを使いましたが、認証設定を行ったローカルのAWS CLI等でも問題ありません。

販売部門グループと製造部門グループを作成します。

[cloudshell-user@ip-10-0-110-52 ~]$ aws quicksight create-group --group-name hanbai --aws-account-id 999999999999 --namespace default
{
    "Status": 201,
    "Group": {
        "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:group/default/hanbai",
        "GroupName": "hanbai",
        "PrincipalId": "group/d-95671a601c/14ac5fad-ea77-43c8-b284-09e0794ae276"
    },
    "RequestId": "88fb057c-ef13-44f3-9e59-d1d0545c0dc3"
}
[cloudshell-user@ip-10-0-110-52 ~]$ aws quicksight create-group --group-name seizou --aws-account-id 999999999999 --namespace default
{
    "Status": 201,
    "Group": {
        "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:group/default/seizou",
        "GroupName": "seizou",
        "PrincipalId": "group/d-95671a601c/600bf213-d48f-42f7-a9e4-de2bae02398d"
    },
    "RequestId": "cb90088c-7745-45ac-a1e3-7e6c0f941998"
}

グループにメンバーを追加します。

[cloudshell-user@ip-10-0-110-52 ~]$ aws quicksight create-group-membership --member-name hanbai-admin --group-name hanbai --aws-account-id 999999999999 --namespace default
{
    "Status": 200,
    "GroupMember": {
        "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:user/default/hanbai-admin",
        "MemberName": "hanbai-admin"
    },
    "RequestId": "24d54b64-6d22-4ad5-a942-19b028cc2c2b"
}
[cloudshell-user@ip-10-0-110-52 ~]$ aws quicksight create-group-membership --member-name hanbai-tanto --group-name hanbai --aws-account-id 999999999999 --namespace default
{
    "Status": 200,
    "GroupMember": {
        "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:user/default/hanbai-tanto",
        "MemberName": "hanbai-tanto"
    },
    "RequestId": "45e29a01-7bbb-4865-8bdd-c54786e166a3"
}
[cloudshell-user@ip-10-0-110-52 ~]$ aws quicksight create-group-membership --member-name seizou-admin --group-name seizou --aws-account-id 999999999999 --namespace default
{
    "Status": 200,
    "GroupMember": {
        "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:user/default/seizou-admin",
        "MemberName": "seizou-admin"
    },
    "RequestId": "b425b73b-d71f-468d-b9a6-e5ad88c36bbb"
}
[cloudshell-user@ip-10-0-110-52 ~]$ aws quicksight create-group-membership --member-name seizou-tanto --group-name seizou --aws-account-id 999999999999 --namespace default
{
    "Status": 200,
    "GroupMember": {
        "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:user/default/seizou-tanto",
        "MemberName": "seizou-tanto"
    },
    "RequestId": "8454c608-dfef-469a-965e-9a1137bae0fc"
}

なお、ユーザーは複数のグループに所属することが出来ます。

[cloudshell-user@ip-10-0-110-52 ~]$ aws quicksight create-group --group-name hanbai-admin --aws-account-id 999999999999 --namespace default{
    "Status": 201,
    "Group": {
        "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:group/default/hanbai-admin",
        "GroupName": "hanbai-admin",
        "PrincipalId": "group/d-95671a601c/a938c91b-ae52-430a-bc7a-25ead4ad8b27"
    },
    "RequestId": "08885dad-6230-49e9-9783-fd1d5e823259"
}
[cloudshell-user@ip-10-0-110-52 ~]$ aws quicksight create-group-membership --member-name hanbai-admin --group-name hanbai-admin --aws-account-id 999999999999 --namespace default
{
    "Status": 200,
    "GroupMember": {
        "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:user/default/hanbai-admin",
        "MemberName": "hanbai-admin"
    },
    "RequestId": "1ed01198-56c0-4e9f-a97f-41be06b828bc"
}
[cloudshell-user@ip-10-0-110-52 ~]$ aws quicksight list-user-groups --user-name hanbai-admin --aws-account-id 999999999999 --namespace default
{
    "Status": 200,
    "GroupList": [
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:group/default/hanbai-admin",
            "GroupName": "hanbai-admin",
            "PrincipalId": "group/d-95671a601c/a938c91b-ae52-430a-bc7a-25ead4ad8b27"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:group/default/hanbai",
            "GroupName": "hanbai",
            "PrincipalId": "group/d-95671a601c/14ac5fad-ea77-43c8-b284-09e0794ae276"
        }
    ],
    "RequestId": "120d02e2-a87d-4a41-9f1f-972ded24bc50"
}

アクセス許可の設定

アクセス許可の方法は先程と同じですが、ユーザーではなくグループを登録するようにします。

まとめ

オブジェクトのアクセス許可の管理に共有フォルダを、付与する対象のユーザー群にグループを使うことで重複管理する必要がなくなりました。
ユーザーやオブジェクトが多くなってきた際のアクセス許可設定の管理に、共有フォルダとグループを使ってみてください。