Amazon QuickSight에서 템플릿을 사용해 크로스 계정 액세스를 설정하려면 어떻게 해야 하나요?

5분 분량
0

제 데이터 세트와 대시보드를 Amazon QuickSight 내 다른 AWS 계정과 공유하고 싶습니다. 어떻게 해야 하나요?

간략한 설명

템플릿을 사용하여 크로스 계정 액세스를 생성해서 Amazon QuickSight 분석과 대시보드를 다른 AWS 계정 및 AWS 리전과 공유할 수 있습니다. 또한 템플릿을 사용해 대시보드나 다른 템플릿을 만들 수도 있습니다.

QuickSight에서 크로스 계정 액세스를 제공하려면 다음 단계를 완료하세요.

  1. 한 계정(계정 A)에서 기존 분석을 바탕으로 새 템플릿을 만듭니다.
  2. 다른 계정(계정 B)에서, 계정 A와 같은 스키마를 사용해 데이터 세트를 만듭니다.
  3. 계정 A의 템플릿을 사용해 계정 B에 대시보드를 만듭니다.

(선택 사항) 계정 A의 기존 템플릿을 사용해 계정 B에 템플릿을 만듭니다. 이 옵션은 한 계정의 리소스를 다른 계정으로 옮긴 다음, 소스 계정에서 해당 리소스를 제거하고자 하는 경우 사용하세요.

참고: 이 문서에서는 AWS Command Line Interface(AWS CLI)를 사용하여 크로스 계정 액세스를 위한 단계를 간략하게 설명합니다. AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인합니다.

해결 방법

계정 A에 같은 계정의 기존 분석을 사용해 템플릿 만들기

1.    list-dashborads 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로 바꿉니다. desribe-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로 바꿉니다. 템플릿을 여러 계정과 공유하려면, 모든 계정의 루트를 Principal로 포함합니다. 이 템플릿은 해당 루트 계정으로만 공유할 수 있습니다. Principal 요소는 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"
    ]
  }
 ]
}

참고: namespace를 사용자 네임스페이스로, user_name을 QuickSight 사용자 이름을 바꿉니다. 앞선 예시는 SPICE 데이터 세트를 가리킵니다.

2.    데이터 세트가 생성되었는지 확인합니다.

aws quicksight describe-data-set --aws-account-id account_b_id --data-set-id dataset_id

descrieb-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 사용자에게 공동 소유자 액세스가 부여됩니다.

사용자에게 READ 전용 액세스를 제공하려면 다음 권한을 지정합니다.

"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 상태가 포함되어 있는지 확인합니다.


관련 정보

AWS 계정 간에 Amazon QuickSight 마이그레이션

AWS 공식
AWS 공식업데이트됨 2년 전