Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何使用模板在 Quick Sight 中设置跨账户访问?
我想在 Amazon Quick Sight 中与另一个 AWS 账户共享我的数据集和控制面板。
简短描述
您可以使用模板创建跨账户访问,以便在其他 AWS 账户和 AWS 区域之间共享您的 Quick Sight 分析和控制面板。您还可以使用这些模板来创建控制面板或其他模板。
完成以下步骤,以在 Quick Sight 中提供跨账户访问:
- 在账户 A 中,根据现有分析创建一个新模板。
- 在账户 B 中,使用与账户 A 相同的架构来创建一个数据集。
- 在账户 B 中,使用账户 A 中的模板创建一个控制面板。
**(可选)**在账户 B 中,使用账户 A 中的现有模板创建一个模板。如果您想将资源从一个账户移动到另一个账户,并从源账户删除资源,请使用此选项。
**注意:**本文使用的是带跨账户访问步骤的 AWS 命令行界面 (AWS CLI)。如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,确保您使用的是最新版本的 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 Quick Sight 控制台或 AWS CLI 在账户 B 中创建数据集。
使用 Amazon Quick Sight 控制台
要使用 Amazon Quick Sight 控制台创建数据集,请参阅 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 替换为 Quick Sight 用户的名称。上述示例是一个 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 状态代码表示控制面板已存在。
-
使用 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 中创建模板
-
确认您的 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" } ] } -
使用账户 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 状态。
相关信息
Migrate Amazon Quick Sight across AWS accounts(跨 AWS 账户迁移 Amazon Quick Sight)
- 语言
- 中文 (简体)
