[アップデート] Amazon QuickSight のエクスポートジョブで権限とタグもエクスポート出来るようになり、バックアップからリストアする際にそのままインポートしやすくなりました

2023.11.27

いわさです。

QuickSight のアセット(ダッシュボードや分析など)はバンドルファイルとしてエクスポートすることが出来ます。
このエクスポートしたバンドルファイルをインポートすることで、バックアップ&リストアの仕組みや、別リージョン・別アカウントへアセットをレプリケーションすることが可能です。

上記のブログ内に記載されているのですが、従来はエクスポートしたバンドルファイルに元のアセットに付与されていた権限情報などが含まれていなかったために、バックアップ&リストア用途で使うに際にインポート時に都度権限指定が必要でちょっと面倒でした。

しかし、先日のアップデートで QuickSight のエクスポートジョブの機能が強化され、アセットエクスポート時に権限情報とタグもエクスポート出来るようになりました。ありがたい。

このアップデートによって、インポート時にはよりエクスポート時点に近い情報でそのままインポート出来るようになったので、特にバックアップ&リストア時で使う場合にはそのままインポートすればインポート後の追加設定は不要でほぼ同じ状態で使うことが出来ます。

本日は必要な手順を確認し、バンドルファイルの変化を確認してみましたので紹介します。

ダッシュボードをエクスポートする

検証シナリオとして、次のような適当なダッシュボードを作成済みとします。
こいつをエクスポートしてやります。

エクスポートはstart-asset-bundle-export-jobコマンドで実施します。
まずは従来までの方法でエクスポートしてみましょう。

% aws quicksight start-asset-bundle-export-job --cli-input-json file://start-asset-bundle-export-job.json
{
    "Status": 202,
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:asset-bundle-export-job/hoge-export-1",
    "AssetBundleExportJobId": "hoge-export-1",
    "RequestId": "efc25992-25a9-470d-8731-3be3854ebadc"
}
% cat start-asset-bundle-export-job.json 
{
    "AwsAccountId": "123456789012",
    "AssetBundleExportJobId": "hoge-export-1",
    "ResourceArns": [
        "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/871298fc-8433-42a3-af66-c1cc76ddb177"
    ],
    "IncludeAllDependencies": false,
    "ExportFormat": "QUICKSIGHT_JSON"
}

ジョブステータスが成功になると、ダウンロード URL からエクスポートしたバンドルファイルを入手することが出来ます。

% cat describe-asset-bundle-export-job
{
    "AwsAccountId": "123456789012",
    "AssetBundleExportJobId": "hoge-export-1"
}
% aws quicksight describe-asset-bundle-export-job --cli-input-json file://describe-asset-bundle-export-job
{
    "Status": 200,
    "JobStatus": "SUCCESSFUL",
    "DownloadUrl": "https://quicksight-asset-bundle-export-job-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/123456789012/hoge-export-1/efc25992-25a9-470d-8731-3be3854ebadc/assetbundle-hoge-export-1.qs
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:asset-bundle-export-job/hoge-export-1",
    "CreatedTime": "2023-11-26T09:45:04+09:00",
    "AssetBundleExportJobId": "hoge-export-1",
    "AwsAccountId": "123456789012",
    "ResourceArns": [
        "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/871298fc-8433-42a3-af66-c1cc76ddb177"
    ],
    "IncludeAllDependencies": false,
    "ExportFormat": "QUICKSIGHT_JSON",
    "RequestId": "cc775403-1464-4cb6-a57e-207e62d17ed9",
    "IncludePermissions": false,
    "IncludeTags": false
}

長いのでファイルの中身は掲載しませんが、バンドルファイルには権限情報は含まれていませんでした。

デフォルトではエクスポートされないのでオプションパラメータが必要

今回のアップデートでは、権限情報をエクスポートするためのオプションがstart-asset-bundle-export-jobコマンドに追加されていました。
デフォルトでは権限情報がエクスポートされないので、追加されたオプションを有効化してエクスポートジョブを開始する必要があります。

% cat start-asset-bundle-export-job.json 
{
    "AwsAccountId": "123456789012",
    "AssetBundleExportJobId": "hoge-export-2",
    "ResourceArns": [
        "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/871298fc-8433-42a3-af66-c1cc76ddb177"
    ],
    "IncludeAllDependencies": false,
    "IncludePermissions": true,
    "ExportFormat": "QUICKSIGHT_JSON"
}

この状態でエクスポートされたバンドルファイルを確認してみると、次のように権限情報が追加されてエクスポートされていることが確認出来ました。

{
    "resourceType": "dashboard",
    "dashboardId": "871298fc-8433-42a3-af66-c1cc76ddb177",
    "name": "hoge1126db",
:
    "validationStrategy": {
        "mode": "LENIENT"
    },
    "permissions": [
        {
            "principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/hoge/fuga",
            "actions": [
                "quicksight:DescribeDashboard",
                "quicksight:ListDashboardVersions",
                "quicksight:UpdateDashboardPermissions",
                "quicksight:QueryDashboard",
                "quicksight:UpdateDashboard",
                "quicksight:DeleteDashboard",
                "quicksight:DescribeDashboardPermissions",
                "quicksight:UpdateDashboardPublishedVersion"
            ]
        }
    ]
}

良いですね。

インポートしてみる

権限あり、なしでのバンドルファイルをエクスポートして権限が付与されるかどうかも確認してみましょう。
インポートはstart-asset-bundle-import-jobコマンドでバンドルファイルを指定し、describe-asset-bundle-import-jobコマンドでステータスを確認出来ます。

この部分はオプションの指定などは今回のアップデートでは追加されていないので、割愛します。
詳しい手順は冒頭の記事を参照してください。

権限ありのバンドル

権限ありのバンドルをインポートした場合は、インポート直後に使っていたユーザーですぐにダッシュボードを参照することが出来ることを確認しました。良いですね!

インポートされたダッシュボードに権限が付与されていることも確認しました。

% aws quicksight describe-dashboard-permissions --cli-input-json file://describe-dashboard-permissions.json
{
    "Status": 200,
    "DashboardId": "871298fc-8433-42a3-af66-c1cc76ddb177",
    "DashboardArn": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/871298fc-8433-42a3-af66-c1cc76ddb177",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/hoge/fuga",
            "Actions": [
                "quicksight:DescribeDashboard",
                "quicksight:ListDashboardVersions",
                "quicksight:UpdateDashboardPermissions",
                "quicksight:QueryDashboard",
                "quicksight:UpdateDashboard",
                "quicksight:DeleteDashboard",
                "quicksight:DescribeDashboardPermissions",
                "quicksight:UpdateDashboardPublishedVersion"
            ]
        }
    ],
    "RequestId": "3dc56438-40a6-45eb-a019-258355e090ed",
    "LinkSharingConfiguration": {
        "Permissions": []
    }
}

権限なしのバンドル

権限なしのバンドルをインポートした場合は次のようにダッシュボード一覧上は表示されません。
前回はインポート後にアセット管理機能から共有設定を行いました。あるいは手動で権限付与コマンドを実行する必要があります。

実際のアセットの権限を確認してみるとやはり権限が何も設定されていない状態でしたね。

% cat describe-dashboard-permissions.json 
{
    "AwsAccountId": "123456789012",
    "DashboardId": "871298fc-8433-42a3-af66-c1cc76ddb177"
}
% aws quicksight describe-dashboard-permissions --cli-input-json file://describe-dashboard-permissions.json  
{
    "Status": 200,
    "DashboardId": "871298fc-8433-42a3-af66-c1cc76ddb177",
    "DashboardArn": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/871298fc-8433-42a3-af66-c1cc76ddb177",
    "Permissions": [],
    "RequestId": "a9fbf082-ce0e-4a46-8ef2-0a084efb9dd5",
    "LinkSharingConfiguration": {
        "Permissions": []
    }
}

タグもエクスポート出来る

以前から権限周りが面倒すぎて権限周りばかり検証してしまいましたが、今回のアップデートではタグのエクスポート・インポートも対応されています。こちらもついでに確認してみましょう。

tag-resourceコマンドでアセットにタグを付与し、list-tags-for-resourceコマンドでアセットに設定されているタグを確認することが出来ます。

次のようにダッシュボードにタグが設定済みであることを想定して確認してみます。

% aws quicksight list-tags-for-resource --resource-arn arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/871298fc-8433-42a3-af66-c1cc76ddb177
{
    "Status": 200,
    "Tags": [
        {
            "Key": "hoge2",
            "Value": "val2"
        },
        {
            "Key": "hoge1",
            "Value": "val1"
        }
    ],
    "RequestId": "d739a3a2-bcd2-45f3-8dfa-90968dc0342b"
}

そして、エクスポートジョブ開始時にIncludeTagsオプションを有効化します。
省略時はfalseとなり、タグはエクスポートされません。

{
    "AwsAccountId": "123456789012",
    "AssetBundleExportJobId": "hoge-export-4",
    "ResourceArns": [
        "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/871298fc-8433-42a3-af66-c1cc76ddb177"
    ],
    "IncludeAllDependencies": false,
    "IncludePermissions": true,
    "IncludeTags": true,
    "ExportFormat": "QUICKSIGHT_JSON"
}

そして、上記のようにタグをつけたダッシュボードをエクスポートすると、バンドルファイルには次のように出力されることが確認出来ました。

{
    "resourceType": "dashboard",
    "tags": [
        {
            "key": "hoge2",
            "value": "val2"
        },
        {
            "key": "hoge1",
            "value": "val1"
        }
    ],
    "dashboardId": "871298fc-8433-42a3-af66-c1cc76ddb177",
    "name": "hoge1126db",
:
    "validationStrategy": {
        "mode": "LENIENT"
    },
    "permissions": [
        {
            "principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/hoge/fuga",
            "actions": [
                "quicksight:DescribeDashboard",
                "quicksight:ListDashboardVersions",
                "quicksight:UpdateDashboardPermissions",
                "quicksight:QueryDashboard",
                "quicksight:UpdateDashboard",
                "quicksight:DeleteDashboard",
                "quicksight:DescribeDashboardPermissions",
                "quicksight:UpdateDashboardPublishedVersion"
            ]
        }
    ]
}

さいごに

本日は Amazon QuickSight のエクスポートジョブで権限とタグもエクスポート出来るようになったのでバンドルファイルなどの中身を確認しながらオプションパラメータを指定することでエクスポート出来ることを確認しました。

バックアップ&リストアの用途であれば権限もエクスポートし、別環境へレプリケーションする用途であれば権限はエクスポートしない。みたいな使い方になりそうです。
なお権限はエクスポートした場合でもインポート時にオーバーライドすることも出来るので、とりあえずエクスポートしちゃうのもありかもしれません。