如何使用模板在 Amazon QuickSight 中设置跨账户存取?
我想与 Amazon QuickSight 中的另一个 AWS 账户共享我的数据集和控制面板。
简短描述
您可以使用模板创建跨账户存取,以便在其他 AWS 账户和 AWS 区域之间共享您的 Amazon QuickSight 分析和控制面板。您还可以使用这些模板来创建控制面板或其他模板。
完成以下步骤,在 QuickSight 中提供跨账户存取:
- 在账户 A 中,根据现有分析创建一个新模板。
- 在账户 B 中,使用与账户 A 相同的架构来创建一个数据集。
- 在账户 B 中,使用账户 A 中的模板创建一个控制面板。
**(可选)**在账户 B 中,使用账户 A 中的现有模板创建一个模板。如果您想将资源从一个账户移动到另一个账户,并从源账户删除资源,请使用此选项。
**注意:**本文使用带跨账户存取步骤的 AWS 命令行界面(AWS CLI)。如果在运行 AWS CLI 命令时收到错误,请参阅 Troubleshoot AWS CLI errors。此外,确保您使用的是最新版本的 AWS CLI。
解决方法
根据账户 A 中的现有分析在此账户中创建一个模板
-
使用 AWS CLI 命令 list-dashboards 列出账户中可用的控制面板:
aws quicksight list-dashboards --aws-account-id account_a_id
**注意:**请将 account_a_id 替换为账户 A 的 ID。
-
记下您要共享的控制面板的 ID。
-
使用 AWS CLI 命令 describe-dashboard 从控制面板获取详细信息:
aws quicksight describe-dashboard --aws-account-id account_a_id --dashboard-id dashboard_id
**注意:**将 dashboard_id 替换为您的控制面板的 ID。
-
创建模板的 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。
-
在分析所在的区域创建一个模板:
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 的模板名称。
-
运行 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 状态。
-
记下输出中模板的 ARN,后续步骤中会用到。
-
使用 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)中创建一个相同的数据集。然后,使用新创建的数据集创建控制面板。
-
使用 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 数据集。
-
确认数据集已成功创建:
aws quicksight describe-data-set --aws-account-id account_b_id --data-set-id dataset_id
确认 describe-data-set 命令的响应中包含状态代码 201。201 状态代码表示数据集已成功创建。
-
记下输出中数据集的 ARN,后续步骤中会用到。
使用账户 A 中的模板在账户 B 中创建一个控制面板
-
运行以下命令,并输入相关模板的 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。
-
确认控制面板已成功创建:
aws quicksight describe-dashboard --aws-account-id account_b_id --dashboard-id dashboard_id
**注意:**确认 describe-dashboard 命令的响应包含状态代码 200。200 状态代码表示控制面板已存在。
-
使用 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 中创建模板
-
确认您的 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" } ] }
-
使用账户 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" } }
-
确认模板已创建:
aws quicksight describe-template --aws-account-id account_b_id --template-id template_id
**注意:**确认 describe-template 命令的响应中包含 CREATION_SUCCESSFUL 状态。
相关信息
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 10 个月前