如何在 Amazon QuickSight 中使用模板设置跨账户存取?

上次更新日期:2022 年 8 月 12 日

我想在 Amazon QuickSight 中与另一个 AWS 账户共享我的数据集和控制面板。我该如何操作?

简短描述

您可以使用模板创建跨账户存取,以便在其他 AWS 账户和 AWS 区域之间共享您的 Amazon QuickSight 分析和控制面板。您还可以使用模板创建控制面板或其他模板。

要在 QuickSight 中提供跨账户存取,请完成以下步骤:

  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_SUCCESSFUL 状态。

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。要与多个账户共享模板,请将所有账户的根作为主体。您只能与根帐户共享模板。主体元素不支持 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 命令的响应包含状态代码 201201 状态代码表示数据集已成功创建。

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 命令的响应包含状态代码 200200 状态代码表示控制面板存在。

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_SUCCESSFUL 状态。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?