如何在 Amazon QuickSight 中使用模板设置跨账户存取?
上次更新日期:2022 年 8 月 12 日
我想在 Amazon QuickSight 中与另一个 AWS 账户共享我的数据集和控制面板。我该如何操作?
简短描述
您可以使用模板创建跨账户存取,以便在其他 AWS 账户和 AWS 区域之间共享您的 Amazon QuickSight 分析和控制面板。您还可以使用模板创建控制面板或其他模板。
要在 QuickSight 中提供跨账户存取,请完成以下步骤:
- 在一个帐户(帐户 A)中,使用现有分析创建新模板。
- 在另一个账户(账户 B)中,使用与账户 A 相同的架构创建数据集。
- 使用账户 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
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 命令的响应包含状态代码 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。
2. 确认已成功创建了控制面板:
aws quicksight describe-dashboard --aws-account-id account_b_id --dashboard-id dashboard_id
注意:确认 describe-dashboard 命令的响应包含状态代码 200。200 状态代码表示控制面板存在。
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 状态。