Amazon QuickSight のテンプレートを使用して、クロスアカウントアクセスを設定する方法を教えてください。

最終更新日: 2022 年 8 月 12 日

Amazon QuickSight の別の AWS アカウントとダッシュボードやデータセットを共有したいと考えています。これを行うにはどうすればよいですか?

簡単な説明

テンプレートを使用してクロスアカウントアクセスを作成し、Amazon QuickSight の分析とダッシュボードを他の AWS アカウントや AWS リージョン間で共有できます。また、テンプレートを使用してダッシュボードや他のテンプレートを作成することもできます。

QuickSight でクロスアカウントアクセスを提供するには、次の手順を実行します。

  1. 1 つのアカウント (アカウント A) で、既存の分析から新しいテンプレートを作成します。
  2. 別のアカウント (アカウント B) で、アカウント A の同じスキーマを使用してデータセットを作成します。
  3. アカウント A のテンプレートからアカウント B にダッシュボードを作成します

(オプション) アカウント A の既存のテンプレートからアカウント B にテンプレートを作成します。リソースをあるアカウントから別のアカウントに移動し、ソースアカウントからリソースを削除する場合は、このオプションを使用します。

注意: この記事では AWS コマンドラインインターフェイス (AWS CLI) を使用してクロスアカウントアクセスを作成するための手順の概要を示します。AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

解決方法

同じアカウントの既存の分析からアカウント A にテンプレートを作成する

1.    list-dashboards AWS CLI コマンドを使用して、アカウントで使用できるダッシュボードを一覧表示します。

aws quicksight list-dashboards --aws-account-id account_a_id

注意:account_a_id をアカウント A の ID と置き換えます。

2.    共有するダッシュボードの ID を書き留めます。

3.    describe-dashboard AWS CLI コマンドを使用して、ダッシュボードから詳細を取得します。

aws quicksight describe-dashboard --aws-account-id account_a_id --dashboard-id dashboard_id

注意:dashboard_id をダッシュボードの ID に置き換えます。

4.    テンプレートの JSON ファイルを作成し、分析とデータセットの ARN を含めます。

{
 "SourceEntity": {
   "SourceAnalysis": {
     "Arn": "arn:aws:quicksight:aws_region:account_a_id:analysis/analysis_id",
     "DataSetReferences": [
       {
         "DataSetPlaceholder": "dataset_name",
         "DataSetArn": "arn:aws:quicksight:aws_region:account_a_id:dataset/dataset_id"
       }
     ]
   }
 },
 "VersionDescription": "1"
}

注意:aws_region を AWS リージョン、analysis_id を分析の ID、 dataset_name をデータセット名、dataset_id をデータセットの ID に置き換えます。

5.    分析と同じリージョンにテンプレートを作成します。

aws quicksight create-template --aws-account-id account_a_id --template-id template_name --cli-input-json file://template.json --profile default

注意:template_name を、アカウント A のテンプレートの名前に置き換えます。

6.    describe-template AWS CLI コマンドを実行して、テンプレートが作成されたことを確認します。

aws quicksight describe-template --aws-account-id account_a_id --template-id template_id

注意:template_id をテンプレートの ID に置き換えます。describe-template コマンドの応答に CREATION_SUCCESS ステータスが含まれていることを確認します。

7.    後のステップで使用するために、出力からのテンプレートの ARN をメモします。

8.    update-template-permissions AWS CLI コマンドを使用して、アカウント A のテンプレートからアカウント B にクロスアカウントREAD 許可を付与します。

aws quicksight update-template-permissions --aws-account-id account_a_id --template-id template_id --grant-permissions file://TemplatePermission.json

許可 JSON ファイルの例:

[
  {
    "Principal": "arn:aws:iam::account_b_id:root",
    "Actions": [
      "quicksight:UpdateTemplatePermissions",
      "quicksight:DescribeTemplate"
    ]
  }
]

注意:account_b_id をアカウント B の ID に置き換えます。テンプレートを複数のアカウントと共有するには、すべてのアカウントのルートをプリンシパルとして含めます。テンプレートは root アカウントでのみ共有できます。プリンシパル 要素は、AWS Identity and Access Management (IAM) ロールをサポートしていません。

アカウント A と同じスキーマを使用してアカウント B にデータセットを作成する

別のアカウント (アカウント A) にあるデータセットから直接ダッシュボードを作成することはできません。代わりに、ダッシュボードを作成するアカウント (アカウント B) と同じデータセットを作成する必要があります。次に、新しく作成したデータセットからダッシュボードを作成します。

1.    アカウント B にデータセットを作成します。

Amazon QuickSight コンソールの使用

データセットの作成」を参照してください。

AWS CLI を使用する

create-data-set AWS CLI コマンドを使用します。

aws quicksight create-data-set --aws-account-id account_b_id --dataset-id dataset_name --cli-input-json file://datasetB.json

データセット JSON ファイルの例:

{
  "Name": "dataset_name",
  "PhysicalTableMap": {
    "Physicaltablename": {
      "RelationalTable": {
         "DataSourceArn": "arn:aws:quicksight:aws_region:account_b_id:datasource/datasource_id",
         "Schema": "schema_name",
         "Name": "table_name",
         "InputColumns": [
           {
             "Name": "column_name",
             "Type": "STRING"|"INTEGER"|"DECIMAL"|"DATETIME"|"BIT"|"BOOLEAN"|"JSON"
           }
        ]
      }
    }
  },
 "LogicalTableMap": {
   "Logicaltablename": {
     "Alias": "any_alias",
     "DataTransforms": [
       {
         "ProjectOperation": {
           "ProjectedColumns": [
             "column_name", "column_name"
         ]
       }
     }
   ],
   "Source": {
     "PhysicalTableId": "Physicaltablename"
   }
  }
 },
 "ImportMode": "SPICE",
 "Permissions": [
   {
     "Principal": "arn:aws:quicksight:aws_region:account_b_id:user/namespace/user_name",
     "Actions": [
       "quicksight:UpdateDataSetPermissions",
       "quicksight:DescribeDataSet",
       "quicksight:DescribeDataSetPermissions",
       "quicksight:PassDataSet",
       "quicksight:DescribeIngestion",
       "quicksight:ListIngestions",
       "quicksight:UpdateDataSet",
       "quicksight:DeleteDataSet",
       "quicksight:CreateIngestion",
       "quicksight:CancelIngestion"
    ]
  }
 ]
}

注意:名前空間を自分の名前空間に置き換え、user_name を QuickSight ユーザーの名前に置き換えます。前の例は、SPICE データセットを参照しています。

2.    データセットが正常に作成されたことを確認します

aws quicksight describe-data-set --aws-account-id account_b_id --data-set-id dataset_id

describe-data-set コマンドの応答にステータスコード 201 が含まれていることを確認します。201 ステータスコードは、データセットが正常に作成されたことを意味します。

3.    後のステップで使用するために、出力のデータセットの ARN を書き留めます。

アカウント A のテンプレートからアカウント B にダッシュボードを作成します

1.    以下のコマンドを実行し、テンプレートの ARN を含めます。

aws quicksight create-dashboard --aws-account-id account_b_id --dashboard-id dashboard_id --name dashboard_name --source-entity file://DashboardFromTemplate.json

注意:--region target_region パラメーターを追加すると、別のリージョンにダッシュボードを作成できます。target_region を、テンプレートを作成するリージョンに置き換えます。

アカウント B のダッシュボード JSON ファイルの例:

{
 "SourceTemplate": {
   "DataSetReferences": [
     {
       "DataSetPlaceholder": "dataset_name",
       "DataSetArn": "arn:aws:quicksight:aws_region:account_b_id:dataset/dataset_id"
     }
   ],
   "Arn": "arn:aws:quicksight:aws_region:account_a_id:template/template_id"
 }
}

前述のダッシュボード JSON ファイルでは、次のようになります。

  • DataSetPlaceholder では、アカウント A のテンプレートと同じデータセット名を使用する必要があります。
  • DataSetARN では、アカウント B で作成したデータセットの ARN を使用できます。
  • Arn には、アカウント A で作成したテンプレートの ARN を使用できます。

2.    ダッシュボードが正常に作成されたことを確認します

aws quicksight describe-dashboard --aws-account-id account_b_id --dashboard-id dashboard_id

注意:describe-dashboard コマンドの応答に、ステータスコード 200 が含まれていることを確認します。200 ステータスコードは、ダッシュボードが存在することを意味します。

3.    update-dashboard-permissions AWS CLI コマンドを使用して、QuickSight ユーザーに適切な許可を付与します。

aws quicksight update-dashboard-permissions --aws-account-id account_b_id --dashboard-id dashboard_id --grant-permissions file://DashboardPermission.json

ダッシュボード JSON ファイルの例:

[
  {
    "Principal": "arn:aws:quicksight:aws_region:account_b_id:user/namespace/quicksight_user_name",
    "Actions": [
      "quicksight:DescribeDashboard",
      "quicksight:ListDashboardVersions",
      "quicksight:UpdateDashboardPermissions",
      "quicksight:QueryDashboard",
      "quicksight:UpdateDashboard",
      "quicksight:DeleteDashboard",
      "quicksight:DescribeDashboardPermissions",
      "quicksight:UpdateDashboardPublishedVersion"
    ]
  }
]

前述のダッシュボード JSON ファイルの例では、QuickSight ユーザーに共同所有者アクセス権が付与されています。

ユーザーに読み取り専用アクセス権を提供するには、次の許可を指定します。

"quicksight:DescribeDashboard",
 "quicksight:ListDashboardVersions",
 "quicksight:QueryDashboard"

(オプション) アカウント A の既存のテンプレートからアカウント B のテンプレートを作成します。

1.    IAM ユーザーまたはロールに適切な許可があることを確認します。QuickSight でクロスアカウントテンプレートにアクセスするには 次の許可が必要です

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Allow",
     "Resource": "arn:aws:quicksight:aws_region:account_a_id:template/template_id",
     "Action": "quicksight:DescribeTemplate"
   },
   {
     "Effect": "Allow",
     "Resource": "*",
     "Action": "quicksight:CreateTemplate"
   }
 ]
}

2.    アカウント A のテンプレートからアカウント B に新しいテンプレートを作成します

aws quicksight create-template --aws-account-id account_b_id --template-id template_name --source-entity file://templateB.json

注意:template_name をアカウント B のテンプレートの名前に置き換えます。別のリージョンでテンプレートを作成するには、--region target_region を追加します。

アカウント B の JSON ファイルの例:

{
   "SourceTemplate": {
    "Arn": "arn:aws:quicksight:region:account_a_id:template/template_id"
    }
}

3.    テンプレートが作成されたことを確認します

aws quicksight describe-template --aws-account-id account_b_id --template-id template_id

注意:describe-template コマンドの応答に、ステータス CREATION_SUCCESCESSL ステータスが含まれていることを確認します。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?