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

4 分钟阅读
0

我想与 Amazon QuickSight 中的另一个 AWS 账户共享我的数据集和控制面板。

简短描述

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

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

  1. 在账户 A 中,根据现有分析创建一个新模板。
  2. 在账户 B 中,使用与账户 A 相同的架构来创建一个数据集。
  3. 在账户 B 中,使用账户 A 中的模板创建一个控制面板。

**(可选)**在账户 B 中,使用账户 A 中的现有模板创建一个模板。如果您想将资源从一个账户移动到另一个账户,并从源账户删除资源,请使用此选项。

**注意:**本文使用带跨账户存取步骤的 AWS 命令行界面(AWS CLI)。如果在运行 AWS CLI 命令时收到错误,请参阅 Troubleshoot AWS CLI errors。此外,确保您使用的是最新版本的 AWS CLI

解决方法

根据账户 A 中的现有分析在此账户中创建一个模板

  1. 使用 AWS CLI 命令 list-dashboards 列出账户中可用的控制面板:

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

    **注意:**请将 account_a_id 替换为账户 A 的 ID。

  2. 记下您要共享的控制面板的 ID。

  3. 使用 AWS CLI 命令 describe-dashboard 从控制面板获取详细信息:

    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. 使用 AWS CLI 命令 update-template-permissions 将账户 A 中的模板的跨账户 READ 权限授予账户 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。要与多个账户共享模板,请将所有账户的根账户都设定为主体。您只能与根账户共享模板。主体元素不支持 AWS Identity and Access Management(IAM)角色。

使用与账户 A 相同的架构在账户 B 中创建一个数据集

您无法直接从另一个账户(例如账户 A)的数据集创建控制面板。相反,您必须在要创建控制面板的账户(例如账户 B)中创建一个相同的数据集。然后,使用新创建的数据集创建控制面板。

  1. 使用 Amazon QuickSight 控制台或 AWS CLI 在账户 B 中创建数据集。

    使用 Amazon QuickSight 控制台

    要使用 Amazon QuickSight 控制台创建数据集,请参阅 Creating datasets

    使用 AWS CLI

    使用 AWS CLI 命令 create-data-set 创建数据集:

    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 替换为 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。
  1. 确认控制面板已成功创建:

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

    **注意:**确认 describe-dashboard 命令的响应包含状态代码 200200 状态代码表示控制面板已存在。

  2. 使用 AWS CLI 命令 update-dashboard-permissions 向 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 状态。

相关信息

Migrate Amazon QuickSight across AWS accounts

AWS 官方
AWS 官方已更新 10 个月前