Amazon QuickSightの名前空間を跨いでアセット共有可能な共有フォルダを作成する

2023.09.15

データアナリティクス事業本部インテグレーション部コンサルティングチーム、新納(にいの)です。

2023年8月31日に、Amazon QuickSightで最大3000の名前空間向けに一度にアセットを共有できる共有フォルダの作成が可能になりました。

この機会に名前空間を跨いだ共有フォルダの作成を試してみました。

名前空間(Namespace)についておさらい

一つのAWSアカウントにつき作成できるQuickSight環境は一つですが、名前空間を利用することで論理的に環境を分離することができます。Authorは所属の名前空間以外のユーザーにアセットを共有することはできないので、よりセキュアに権限を管理可能です。

参考:QuickSightの名前空間機能を使ってマルチテナント用に環境を分離させる | DevelopersIO

名前空間を跨いだ共有フォルダ作成

前提

デフォルトの名前空間の他にsalesという名前空間を作成しました。この二つの間で共有できるフォルダを作成します。

実行するIAMロールには以下のIAMポリシーが最低限付与されていることをご確認ください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
        "Effect": "Allow",
        "Action": [
            "quicksight:CreateFolder",
            "quicksight:CreateFolderMembership",
            "quicksight:DeleteFolderMembership",
            "quicksight:DeleteFolder",
            "quicksight:DescribeFolderPermissions",
            "quicksight:DescribeFolderResolvedPermissions",
            "quicksight:UpdateFolderPermissions",
            "quicksight:UpdateDashboardPermissions",
            "quicksight:UpdateAnalysisPermissions",
            "quicksight:UpdateDataSetPermissions"
        ],
        "Resource": "*"
        }
    ]
}

フォルダを作成する

まずはcreate-folderコマンドでフォルダを作成します。以下は一例で、「全テナント向けフォルダ」という名前のフォルダを作成しています。

ポイントとなるのは--sharing-modelパラメータです。このパラメータはフォルダの共有スコープを決定するもので、NAMESPACEACCOUNTの2種類が指定可能です。今回は名前空間をスコープとします。

aws quicksight create-folder \
--aws-account-id <AWSアカウントID> \
--region "ap-northeast-1" \
--name "全テナント向けフォルダ" \
--sharing-model "NAMESPACE" \
--folder-id "all_tenant"

上記コマンドを実行して成功すると、以下のようなレスポンスが返ってきます。

{
    "Status": 200,
    "Arn": "arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:folder/all_tenant",
    "FolderId": "all_tenant",
    "RequestId": "f158d5da-18bc-4d37-b8b8-a50557231560"
}

権限を付与する

次に、update-folder-permissionsコマンドで作成したフォルダに対して権限を付与します。以下の例では、フォルダの作成・更新・削除・権限追加などの全操作をPrincipalに指定した名前空間(sales)のユーザー(da-quicksight-author-2)に付与しています。「更新はしていいけど削除はしてほしくない」などの細やかな権限管理が必要な場合は、Actionsの権限を増減させれば実現可能です。

今回はユーザーを指定していますが、ユーザーをグループで管理している場合はグループのARNの指定も可能です。

aws quicksight update-folder-permissions \
--aws-account-id "<AWSアカウントID>" \
--region "ap-northeast-1" \
--folder-id "all_tenant" \
--grant-permissions \
    '[
        {"Actions":
            ["quicksight:DescribeFolder",
            "quicksight:UpdateFolder",
            "quicksight:DeleteFolder",
            "quicksight:DescribeFolderPermissions",
            "quicksight:UpdateFolderPermissions",
            "quicksight:CreateFolderMembership",
            "quicksight:DeleteFolderMembership",
            "quicksight:CreateFolder"
            ],
        "Principal":"arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:user/sales/da-quicksight-author-2"
        }
    ]'

フォルダを共有したい別の名前空間(今回の例ではdefault)に対しても実行します。--grant-permissionsのPrincipalを、別名前空間のユーザーやグループのARNに変更して実行します。

権限が付与されたか確認する

フォルダに対して指定した名前空間からアクセスできる権限が付与されているかどうかはdescribe-folder-resolved-permissionsコマンドから確認可能です。

aws quicksight describe-folder-resolved-permissions \
--aws-account-id "<AWSアカウントID>" \
--region "ap-northeast-1" \
--folder-id "all_tenant" \
--namespace "sales"

権限が付与されていれば、以下のようなレスポンスが返ってきます。

{
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:user/sales/da-quicksight-author-2",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:UpdateFolder",
                "quicksight:DeleteFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions",
                "quicksight:UpdateFolderPermissions"
            ]
        }
    ],
    "Status": 200,
    "RequestId": "59b2596e-e6b9-4ae0-9cc4-0e142be80be8",
    "Arn": "arn:aws:quicksight:ap-northeast-1<AWSアカウントID>:folder/all_tenant",
    "FolderId": "all_tenant"
}

QuickSightコンソール画面からも確認可能です。

QuickSightの管理画面からも設定ができます

ここまでCLIで実施しましたが、QuickSightの管理ユーザーであればアセット管理画面か権限を付与することもできます。

アセットを管理→共有フォルダを選び、共有したい名前空間名と付与したい許可(所有者・表示者)を選び、ユーザーまたはグループを指定して共有ボタンを押します。

最後に

名前空間を跨いでアセットを共有可能になるのは、特にマルチテナント構成にしているQuickSightユーザーにとっては便利な機能ではないでしょうか。QuickSightコンソールからも共有設定はできましたが、名前空間一つ一つに権限設定が必要であり、所有者か表示者かの権限設定しかできません。CLI操作では一気に共有設定したり、よりきめ細やかな権限設定ができますので、場合によって使い分けてみてください。

参考