Q in QuickSight で作成したトピックはユーザー削除時に転送されない~他の QuickSight ユーザーに共有されていない場合~

Q in QuickSight で作成したトピックはユーザー削除時に転送されない~他の QuickSight ユーザーに共有されていない場合~

作成したトピックとデータストーリーは、作成者(所有者)を削除しても消えません。トピックは後からでも API で権限付与が可能ですが、データストーリーは API 操作がサポートされておらず、作成したユーザーを削除してもデータストーリーは削除されませんが、他のユーザーでは編集や削除ができません。
Clock Icon2025.03.16

コーヒーが好きな emi です。

Q in QuickSight でトピックを作成し他のユーザーに共有されている場合、作成者ユーザーを削除しても問題ないことを以下のブログで書きました。

https://dev.classmethod.jp/articles/q-in-quicksight-topics-are-not-transferred-when-user-is-deleted-shared/

本記事では、トピックが他のユーザーに共有されていない場合にどう見えるか、操作できないトピックに対してどのように権限を付与するか紹介します。

結論とイメージ図

冒頭で紹介したブログ にも記載していますが、結論とイメージ図を再掲します。

  • 作成したトピックとデータストーリーは、作成者(所有者)を削除しても消えない
  • 所有者は不在の状態になるが実態は残る
    • 適切な共有設定をしておけば別のユーザーで操作可能
    • トピックは、 共有をしていなくても、AWS CLI 等の API 操作で権限を付与すれば別のユーザーで操作可能
    • データストーリーは、他のユーザーには閲覧者(Viewer)でしか共有できないため、データストーリーを作成したユーザーを削除すると他のユーザーが編集や削除できない(※2025/3/17時点)

例えば「test-user」というユーザーがデータセット、データソース、トピックを作成して所有者になっているとします。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_1

「test-user」削除時に所有権を私のユーザーに転送します。
データセット、データソースは所有権が転送されますが、トピックは転送されません。適切な共有設定がされていれば残されたユーザーで操作可能です。共有設定をしていない場合でも実態は残っているため、AWS CLI 等の API 操作で権限を付与すれば残されたユーザーで操作可能です。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_2

https://community.amazonquicksight.com/t/multiple-editors-for-qs-story/22999/5

検証~他の QuickSight ユーザーに共有されていない場合~

トピックに関する検証結果を共有します。

データストーリーは Co-owner 権限での共有ができないため作成したユーザーを削除してしまうと他のユーザーで編集や削除ができなくなる件については別の記事で執筆予定です。

1. test-user でトピックを作成する

Q in QuickSight で作成したトピックはユーザー削除時に転送されない~他の QuickSight ユーザーに共有されている場合~ | DevelopersIO と同様に、test-user でデータセット、トピックを作成します。データソースもデータセット作成時に作成されます。赤枠は test-user からの見え方を表します。

データセット名「sweets_with_status」
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_40

トピック名「sweets_with_status」
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_3

シノニムを設定したり、いくつか Q&A して User Activity を残したりしておきます。

q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_5

q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_13

q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_14

他のユーザーには共有しません。
別の QuickSight ユーザーでトピック画面を見ると、共有されていないので何も表示されません。別のユーザーからの見え方は青枠で表現します。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_16

2. test-user を削除

データソース、データセット、トピックを作成した test-user を削除します。
管理者ロールのユーザーで test-user 欄の右のゴミ箱マークをクリックします。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_27

「すべての孤立したリソースの所有権をこのアカウントの別のユーザーに移します」にチェックをして「OK」をクリックします。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_28

所有権を別のユーザーに転送します。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_29

test-user を削除しました。これで、データソースとデータセットは別のユーザーに所有権を転送できたはずです。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_30

test-user でログインしていた別のブラウザタブで再読み込みすると、「QuickSight へようこそ」の画面になりました。QuickSight ユーザーが削除されていて、再度ログインするには QuickSight ユーザーを再作成しなければならないということです。
ユーザーは再作成せずに、このままこのタブは閉じます。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_31

別のユーザーからの見え方を確認します。データセットの所有権を転送したので、データセット「sweets_with_status」が見えるようになりました。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted_32

トピックは見えません。
「データストーリーとトピックは転送されません。」の言葉通り、トピックの所有権は他のユーザーに転送されないことが分かります。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted-unshared_1

3.トピックはどこにいったのか?

では、トピックはどこにいったのか?AWS CLI で確認します。バージニア北部の CloudShell で list-topics を実行してトピック一覧を見てみます。

aws quicksight list-topics \
  --aws-account-id 123456789012

▼実行結果

~ $ aws quicksight list-topics \
>   --aws-account-id 123456789012
{
    "Status": 200,
    "TopicsSummaries": [
        {
            "Arn": "arn:aws:quicksight:us-east-1:123456789012:topic/wssVIv3qd0JbyB315LUEuBaz199GNMXV",
            "TopicId": "wssVIv3qd0JbyB315LUEuBaz199GNMXV",
            "Name": "sweets_with_status",
            "UserExperienceVersion": "NEW_READER_EXPERIENCE"
        }
    ],
    "RequestId": "4056be5a-f922-44d5-bd6a-b04ca3e545ea"
}
~ $ 

作成したトピック「sweets_with_status」が存在することが確認できました。GUI 上では見えませんが、存在はする、といった状態になるようです。

q-in-quicksight-topics-are-not-transferred-when-user-is-deleted-unshared_2

4. どうにか既存ユーザーが見えるようにできるのか

では、画面から見えないトピックの状態をもう少し調査します。
describe-topic-permissions コマンドでトピックの権限を確認します。

aws quicksight describe-topic-permissions \
  --aws-account-id 123456789012 \
  --topic-id wssVIv3qd0JbyB315LUEuBaz199GNMXV

--topic-id は先ほど実行した list-topics の結果からトピック ID を入れます。

▼実行結果

~ $ aws quicksight describe-topic-permissions \
>   --aws-account-id 123456789012 \
>   --topic-id wssVIv3qd0JbyB315LUEuBaz199GNMXV
{
    "Status": 200,
    "TopicId": "wssVIv3qd0JbyB315LUEuBaz199GNMXV",
    "TopicArn": "arn:aws:quicksight:us-east-1:123456789012:topic/wssVIv3qd0JbyB315LUEuBaz199GNMXV",
    "Permissions": [],
    "RequestId": "0288671e-8c88-4299-865b-22f73e39e31a"
}
~ $

"Permissions": [], より、このトピックにはどのユーザーにも何の権限もないことが分かりました。

以下のブログで似たような状態を扱ったことがあります。

https://dev.classmethod.jp/articles/quicksight-unable-to-delete-shared-restricted-folders/

上記のブログも参考に、update-topic-permissions コマンドでトピックの権限を更新します。

QuickSight の権限付与系のコマンドは横に長くなりがちなので、CLI スケルトンを利用します。詳細は以下ブログを参照ください。

https://dev.classmethod.jp/articles/quicksight-restricted-shared-folders-cli-skeleton/

では、--generate-cli-skeleton オプションで CLI スケルトンファイルのひな形を生成して保存します。

aws quicksight update-topic-permissions \
  --generate-cli-skeleton > update-topic-permissions.json

コマンドの結果は update-topic-permissions.json に保存します。

▼実行結果

~ $ aws quicksight update-topic-permissions \
>   --generate-cli-skeleton > update-topic-permissions.json
~ $ 

cat で中身を確認します。

~ $ cat update-topic-permissions.json 
{
    "AwsAccountId": "",
    "TopicId": "",
    "GrantPermissions": [
        {
            "Principal": "",
            "Actions": [
                ""
            ]
        }
    ],
    "RevokePermissions": [
        {
            "Principal": "",
            "Actions": [
                ""
            ]
        }
    ]
}
~ $ 

"Principal" には QuickSight のグループの ARN を入れてみます。グループの ARN を取得するため list-groups コマンドを実行します。

aws quicksight list-groups \
  --aws-account-id 123456789012 \
  --namespace default
(余談)QuickSight アカウントの有効化を東京リージョンで行ったため、バージニア北部ロージョンでグループ一覧を表示しようとしたら失敗しました。
バージニア失敗
~ $ aws quicksight list-groups \
>   --aws-account-id 123456789012 \
>   --namespace default

An error occurred (AccessDeniedException) when calling the ListGroups operation: Operation is being called from endpoint us-east-1, but your identity region is ap-northeast-1. Please use the ap-northeast-1 endpoint.
~ $ 

▼実行結果

東京成功
~ $ aws quicksight list-groups \
>   --aws-account-id 123456789012 \
>   --namespace default
{
    "GroupList": [
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/q-in-quicksight-author",
            "GroupName": "q-in-quicksight-author",
            "Description": "q-in-quicksight-author",
            "PrincipalId": "group/d-95674f4db8/950beea4-e3fa-4760-be54-0e4c81daadc7"
        }
    ],
    "Status": 200,
    "RequestId": "9eb4d450-4d45-4349-8f56-8469b6d644f5"
}
~ $ 

グループの ARN が取得できました。

次は "Actions" でどんな権限を付与すればいいのか、以下ページを参考にします。
https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateTopicPermissions.html

https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/list_amazonquicksight.html

Amazon QuickSight のアクション、リソース、および条件キー - サービス認可リファレンス を確認してみましたが、どのアクションがあればいいのかイマイチすぐに分からなかったので、一旦リソースタイプが topic* のパーミッションを全部つけてみることにします。

以下のように update-topic-permissions.json を修正します。

update-topic-permissions.json
{
    "AwsAccountId": "123456789012",
    "TopicId": "wssVIv3qd0JbyB315LUEuBaz199GNMXV",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/q-in-quicksight-author",
            "Actions": [
                "quicksight:BatchCreateTopicReviewedAnswer",
                "quicksight:BatchDeleteTopicReviewedAnswer",
                "quicksight:CreateTopicRefreshSchedule",
                "quicksight:DeleteTopic",
                "quicksight:DeleteTopicRefreshSchedule",
                "quicksight:DescribeTopic",
                "quicksight:DescribeTopicPermissions",
                "quicksight:DescribeTopicRefresh",
                "quicksight:DescribeTopicRefreshSchedule",
                "quicksight:SearchTopics",
                "quicksight:UpdateTopic",
                "quicksight:UpdateTopicPermissions",
                "quicksight:UpdateTopicRefreshSchedule"
            ]
        }
    ]
}
  • vim update-topic-permissions.jsonupdate-topic-permissions.json を開く
  • :%d + Enter で中身のテキストを全削除
  • :set paste * Enter で貼り付けモードにする
  • i で編集モードに移行する
  • 貼り付ける
  • esc で編集モードを抜ける
  • :wq + Enter で保存して閉じる

編集できたか catupdate-topic-permissions.json の中身を確認します。

~ $ cat update-topic-permissions.json 
{
    "AwsAccountId": "123456789012",
    "TopicId": "wssVIv3qd0JbyB315LUEuBaz199GNMXV",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/q-in-quicksight-author",
            "Actions": [
                "quicksight:BatchCreateTopicReviewedAnswer",
                "quicksight:BatchDeleteTopicReviewedAnswer",
                "quicksight:CreateTopicRefreshSchedule",
                "quicksight:DeleteTopic",
                "quicksight:DeleteTopicRefreshSchedule",
                "quicksight:DescribeTopic",
                "quicksight:DescribeTopicPermissions",
                "quicksight:DescribeTopicRefresh",
                "quicksight:DescribeTopicRefreshSchedule",
                "quicksight:SearchTopics",
                "quicksight:UpdateTopic",
                "quicksight:UpdateTopicPermissions",
                "quicksight:UpdateTopicRefreshSchedule"
            ]
        }
    ]
}
~ $  

では update-topic-permissions コマンドを実行してトピックの権限を更新します。

aws quicksight update-topic-permissions \
  --cli-input-json file://update-topic-permissions.json

▼実行結果

~ $ aws quicksight update-topic-permissions \
>   --cli-input-json file://update-topic-permissions.json

An error occurred (InvalidParameterValueException) when calling the UpdateTopicPermissions operation: ResourcePermission list contains unsupported permission sets ["quicksight:DeleteTopic", "quicksight:UpdateTopicPermissions", "quicksight:DeleteTopicRefreshSchedule", "quicksight:DescribeTopic", "quicksight:DescribeTopicPermissions", "quicksight:DescribeTopicRefreshSchedule", "quicksight:SearchTopics", "quicksight:UpdateTopic", "quicksight:UpdateTopicRefreshSchedule", "quicksight:CreateTopicRefreshSchedule", "quicksight:BatchDeleteTopicReviewedAnswer", "quicksight:BatchCreateTopicReviewedAnswer", "quicksight:DescribeTopicRefresh"] for this resource. Valid sets are: ["quicksight:DescribeTopic"] or ["quicksight:DescribeTopic", "quicksight:DescribeTopicRefresh", "quicksight:ListTopicRefreshSchedules", "quicksight:DescribeTopicRefreshSchedule", "quicksight:DeleteTopic", "quicksight:UpdateTopic", "quicksight:CreateTopicRefreshSchedule", "quicksight:DeleteTopicRefreshSchedule", "quicksight:UpdateTopicRefreshSchedule", "quicksight:DescribeTopicPermissions", "quicksight:UpdateTopicPermissions"]
~ $ 

エラーになりました。エラーメッセージから、権限に対して付与すべきアクションが分かりました。

▼ Viewer

["quicksight:DescribeTopic"] 

▼ Co-owner

["quicksight:DescribeTopic", "quicksight:DescribeTopicRefresh", "quicksight:ListTopicRefreshSchedules", "quicksight:DescribeTopicRefreshSchedule", "quicksight:DeleteTopic", "quicksight:UpdateTopic", "quicksight:CreateTopicRefreshSchedule", "quicksight:DeleteTopicRefreshSchedule", "quicksight:UpdateTopicRefreshSchedule", "quicksight:DescribeTopicPermissions", "quicksight:UpdateTopicPermissions"]

上記エラーをもとに、update-topic-permissions.json をさらに以下のように修正します。Co-owner 権限を持たせる想定です。

update-topic-permissions.json
{
    "AwsAccountId": "123456789012",
    "TopicId": "wssVIv3qd0JbyB315LUEuBaz199GNMXV",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/q-in-quicksight-author",
            "Actions": [
                "quicksight:DescribeTopic", 
                "quicksight:DescribeTopicRefresh", 
                "quicksight:ListTopicRefreshSchedules", 
                "quicksight:DescribeTopicRefreshSchedule", 
                "quicksight:DeleteTopic", 
                "quicksight:UpdateTopic", 
                "quicksight:CreateTopicRefreshSchedule", 
                "quicksight:DeleteTopicRefreshSchedule", 
                "quicksight:UpdateTopicRefreshSchedule", 
                "quicksight:DescribeTopicPermissions", 
                "quicksight:UpdateTopicPermissions"
            ]
        }
    ]
}

保存できたか cat で確認します。

~ $ cat update-topic-permissions.json 
{
    "AwsAccountId": "123456789012",
    "TopicId": "wssVIv3qd0JbyB315LUEuBaz199GNMXV",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/q-in-quicksight-author",
            "Actions": [
                "quicksight:DescribeTopic", 
                "quicksight:DescribeTopicRefresh", 
                "quicksight:ListTopicRefreshSchedules", 
                "quicksight:DescribeTopicRefreshSchedule", 
                "quicksight:DeleteTopic", 
                "quicksight:UpdateTopic", 
                "quicksight:CreateTopicRefreshSchedule", 
                "quicksight:DeleteTopicRefreshSchedule", 
                "quicksight:UpdateTopicRefreshSchedule", 
                "quicksight:DescribeTopicPermissions", 
                "quicksight:UpdateTopicPermissions"
            ]
        }
    ]
}
~ $ 

再度権限付与を実行します。

aws quicksight update-topic-permissions \
  --cli-input-json file://update-topic-permissions.json

▼実行結果

~ $ aws quicksight update-topic-permissions \
>   --cli-input-json file://update-topic-permissions.json
{
    "Status": 200,
    "TopicId": "wssVIv3qd0JbyB315LUEuBaz199GNMXV",
    "TopicArn": "arn:aws:quicksight:us-east-1:123456789012:topic/wssVIv3qd0JbyB315LUEuBaz199GNMXV",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/q-in-quicksight-author",
            "Actions": [
                "quicksight:DescribeTopicRefresh",
                "quicksight:ListTopicRefreshSchedules",
                "quicksight:DescribeTopicRefreshSchedule",
                "quicksight:DeleteTopic",
                "quicksight:UpdateTopic",
                "quicksight:CreateTopicRefreshSchedule",
                "quicksight:DeleteTopicRefreshSchedule",
                "quicksight:UpdateTopicRefreshSchedule",
                "quicksight:DescribeTopic",
                "quicksight:DescribeTopicPermissions",
                "quicksight:UpdateTopicPermissions"
            ]
        }
    ],
    "RequestId": "c4551427-46f1-4a84-ae19-08a39ecd3d71"
}
~ $

コマンドは成功しました。

他の QuickSight ユーザーで確認すると、トピックが見えるようになりました!
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted-unshared_3

Edit や Update もできます。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted-unshared_4

Q&A の履歴やシノニムも想定通り確認できます。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted-unshared_5

トピックの共有設定を確認してみます。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted-unshared_6

AWS CLI で設定した通り、グループに Co-owner 権限が設定できていることが分かります。
q-in-quicksight-topics-are-not-transferred-when-user-is-deleted-unshared_7

おわりに

以下を確認しました。

  • 作成したトピックとデータストーリーは、作成者(所有者)を削除しても消えない
  • 所有者は不在の状態になるが実態は残る
    • 適切な共有設定をしておけば別のユーザーで操作可能
    • トピックは、 共有をしていなくても、AWS CLI 等の API 操作で権限を付与すれば別のユーザーで操作可能
    • データストーリーは、他のユーザーには閲覧者(Viewer)でしか共有できないため、データストーリーを作成したユーザーを削除すると他のユーザーが編集や削除できない(※2025/3/17時点)

本記事への質問やご要望については画面下部のお問い合わせ「DevelopersIO について」からご連絡ください。記事に関してお問い合わせいただけます。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.