スキップしてコンテンツを表示

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

所要時間4分
0

データセットとダッシュボードを Amazon Quick Sight の別の AWS アカウントと共有したいと考えています。

簡単な説明

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

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

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

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

**注:**この記事では、AWS コマンドラインインターフェイス (AWS CLI) とクロスアカウントアクセスの手順を使用します。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. AWS CLI コマンド describe-template を実行して、テンプレートが作成されたことを確認します。

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

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

  7. 後のステップで使用できるように、出力からテンプレートの ARN を書き留めておきます。

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

    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 ID およびアクセス管理 (IAM) ロールをサポートしていません。

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

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

  1. Amazon Quick Sight コンソールまたは AWS CLI のいずれかを使用して、アカウント B にデータセットを作成します。

    Amazon Quick Sight コンソールを使用する

    Amazon Quick Sight コンソールを使用してデータセットを作成するには、「データセットの作成」を参照してください。

    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"
        ]
      }
     ]
    }

    **注:**namespace を自分の名前空間に置き換え、user_name を Quick Sight ユーザーの名前に置き換えます。上記の例は 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 を使用できます。
  1. ダッシュボードが正常に作成されたことを確認します。

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

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

  2. update-dashboard-permissions AWS CLI コマンドを使用して、Quick Sight ユーザーに適切なアクセス許可を付与します。

    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 ファイルの例では、Quick Sight ユーザーには共同所有者アクセスが付与されています。ユーザーに読み取り専用アクセスを提供するには、次のアクセス許可を指定します。

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

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

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

    { "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_SUCCESSFUL ステータスが含まれていることを確認します。

関連情報

AWS アカウント間での Amazon Quick Sight の移行

AWS公式更新しました 2年前