Amazon QuickSight에서 템플릿을 사용해 교차 계정 액세스를 설정하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2020년 12월 16일
Amazon QuickSight에서 내 데이터 집합 및 대시보드에 대한 교차 계정 액세스를 생성하려고 합니다. 어떻게 해야 하나요?
간략한 설명
서로 다른 두 AWS 계정 간에 Amazon QuickSight 데이터 집합 및 대시보드에 대한 교차 계정 액세스를 생성할 수 있습니다. 교차 계정 액세스를 생성하려면 CreateTemplate API 작업을 사용합니다. 템플릿 API 객체를 사용하면 기존 Amazon QuickSight 분석 또는 템플릿에서 템플릿을 생성할 수 있습니다. 그런 다음 CreateDashboard API를 사용하여 대시보드를 생성합니다.
중요: 소스 계정에서 적절한 READ 권한이 설정되어 있는지 확인하세요. 올바른 권한이 설정되면 다른 AWS 계정에서 대시보드를 생성하거나 템플릿에서 공유할 수 있습니다.
Amazon QuickSight에서 다음과 같은 유형의 교차 계정 액세스를 생성할 수 있습니다.- 기존 템플릿(계정 A)에서 다른 AWS 계정(계정 B)에 새 템플릿을 생성합니다.
- 기존 템플릿(계정 A)에서 다른 AWS 계정(계정 B)에 대시보드를 생성합니다.
해결 방법
계정 A와 동일한 스키마를 사용하여 계정 B에서 데이터 집합 생성하기
계정 A와 동일한 스키마를 사용하여 데이터 집합 생성하기:
aws quicksight create-data-set --cli-input-json file://<dataset.json>
-또는-
다음 Boto3 SDK 쿼리를 사용하여 계정 A와 동일한 스키마를 사용해 계정 B에 데이터 집합을 생성합니다.
response = client.create_data_set(
AwsAccountId='<string>',
DataSetId='<string>',
Name='<string>',
'S3Source': {
'DataSourceArn': 'arn:aws:quicksight:<region>:<Account-ID>:datasource/<datasource-name>"',
'InputColumns': [
{
"Name": "Col1",
"Type": "INTEGER"
},
{
"Name": "col2",
"Type": "DECIMAL"
},
{
"Name": "col3",
"Type": "INTEGER"
},
{
"Name": "col4",
"Type": "DECIMAL"
}
]
},
ImportMode='SPICE'|'DIRECT_QUERY',
)
이 예제 쿼리에서는 Amazon Simple Storage Service(Amazon S3)를 데이터 원본으로 사용하고 있습니다.
데이터 집합 ARN을 얻으려면 다음 명령을 사용합니다.
aws quicksight list-data-sets --aws-account-id <value>
계정 A에 있는 기존 분석에서 계정 A에 템플릿 생성
계정 A에 대해 create-template AWS CLI 명령을 사용하여 분석이 위치하는 AWS 리전에 템플릿을 생성합니다.
중요: 서로 다른 AWS 리전에서는 템플릿을 생성할 수 없습니다.
다음 AWS CLI 명령 구문을 사용하여 계정 A에서 템플릿을 생성합니다.
aws quicksight create-template --aws-account-id <Account_A> --template-id firsttemplate --source-entity file://template.json --profile default
-또는-
다음 Boto3 SDK 쿼리를 사용하여 계정 A에서 템플릿을 생성합니다.
%config IPCompleter.greedy=True
import boto3
default_namespace = 'default'
account_id = 'Account_A'
client = boto3.client('quicksight')
response = client.create_template( AwsAccountId=account_id, TemplateId='jabsma13', Name='jasbir', SourceEntity={ 'SourceAnalysis': { 'Arn': 'arn:aws:quicksight:us-east-1:12150061445:analysis/198ab579-d3ce-4401-b793-50dd2f81fcd9',
'DataSetReferences': [ { 'DataSetPlaceholder': 'test', 'DataSetArn': 'arn:aws:quicksight:us-east-1:121500614395:dataset/639111f1-36d2-4873-947a-f94dc9a148bb' }, ] } }, Tags=[ { 'Key': 'jsabir', 'Value': 'singh' }, ], VersionDescription='1'
)
다음은 템플릿 JSON 파일(template.json)의 예제입니다.
{
"SourceAnalysis": {
"Arn": "arn:aws:quicksight:<Region of analysis>:<Account_A>:analysis/<Analysis ID>",
"DataSetReferences": [
{
"DataSetPlaceholder": "<Any name>",
"DataSetArn": "arn:aws:quicksight:<dataset region>:<Account_A>:dataset/<DatasetID>"
}
]
}
}
계정 A에 있는 기존 템플릿에서 계정 B에 템플릿 생성하기
1. 계정 A에서, UpdateTemplatePermissions API를 호출하여 원본 템플릿(계정 A)의 교차 계정 READ 권한을 계정 B에 부여합니다.
AWS CLI
aws quicksight update-template-permissions --aws-account-id <Account_A> --template-id firsttemplate --grant-permissions file://TemplatePermission.json --profile default
템플릿 파일(TemplatePermission.json)을 다음과 같이 업데이트합니다.
[{
"Principal": "arn:aws:iam::<Account_B>:root",
"Actions": ["quicksight:UpdateTemplatePermissions", "quicksight:DescribeTemplate"]
}]
Boto3 SDK
response_updated_perm = client.update_template_permissions(
AwsAccountId='Account_A',
TemplateId='kumo-123',
GrantPermissions=[
{
'Principal': 'arn:aws:iam::<Account_B>:root',
'Actions': [
'quicksight:UpdateTemplatePermissions',
'quicksight:DescribeTemplate'
]
},
]
)
print(response_updated_perm
2. 계정 B의 IAM 사용자(QS-test)에 대한 적절한 AWS Identity and Access Management(IAM) 권한을 설정합니다.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Resource": "arn:aws:quicksight:us-east-1:<Account_A>:template/kumo-123",
"Action": "quicksight:DescribeTemplate"
},
{
"Effect": "Allow",
"Resource": "*",
"Action": "quicksight:CreateTemplate"
}
]
}
IAM 사용자(QS-test)는 다음 작업을 수행할 수 있는 권한이 있어야 합니다.
계정 A에서 생성한 템플릿 파일에서 quicksight:DescribeTemplate
계정 B에서 새 템플릿을 생성하기 위한 quicksight:CreateTemplate
3. 2단계에서 정의한 권한으로 IAM 역할을 위임합니다.
AWS CLI
aws sts assume-role \
--role-arn "arn:aws:iam::<Account_B>:role/<role_name>" \
--role-session-name john.doe@example.com
export.export AWS_ACCESS_KEY_ID = "access_key_from_assume_role"
export AWS_SECRET_ACCESS_KEY = "secret_key_from_assume_role"
export AWS_SESSION_TOKEN = "session_token_from_assume_role"
Boto3 SDK
/code
sts_client = boto3.client('sts')
assumed_role_object=sts_client.assume_role(
RoleArn="arn:aws:iam::<Account_B>:role/<role_name>",
RoleSessionName="AssumeRoleSession1"
)
credentials=assumed_role_object['Credentials']
QS=boto3.client(
'quicksight',
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken'],
)
AssumeRole이 반환하는 임시 자격 증명을 사용하여 Amazon QuickSight에 연결합니다.
4. 계정 B에서 템플릿을 생성합니다.
AWS CLI
aws quicksight create-template --aws-account-id <Account B ID> --template-id firsttemplate --source-entity file://TemplateFromTemplate.json --profile default
계정 B의 템플릿 파일(TemplateFromTemplate.json)은 다음과 같습니다.
{
"SourceTemplate": {
"Arn": "arn:aws:quicksight:us-east-1:<Account A ID>:template/firsttemplate"
}
Boto3 SDK
# Create template in Account B
client = boto3.client(
'quicksight',
# Hard coded strings as credentials, not recommended.
aws_access_key_id='xxxxxxx',
aws_secret_access_key='xxxxxxxxx'
)
response = client.create_template(
AwsAccountId='Account_B',
TemplateId='XXXXXXX',
Name='XXXXXX',
SourceEntity={
'SourceTemplate': {
'Arn': 'arn:aws:quicksight:us-east-1:<Account_A>:template/kumo-123'
}
}
)
print(response)
5. list_template API를 사용하여 계정 B의 템플릿을 확인합니다.
AWS CLI
aws quicksight list-templates --aws-account-id <Account B>
Boto3 SDK
responsetemplates_B = client.list_templates(
AwsAccountId='Account_B')
print(responsetemplates_B['TemplateSummaryList'])
계정 A에서 방금 생성한 템플릿에서 계정 B에 대시보드 생성하기
1. 계정 A의 템플릿에서 계정 B에 대시보드를 생성하거나 계정 B에서 새로 생성된 템플릿을 사용하여 대시보드를 생성할 수 있습니다.
AWS CLI
aws quicksight create-dashboard --aws-account-id <Account B ID> --dashboard-id <any ID> --name <any dashboard name> --source-entity file://DashboardFromTemplate.json
다음은 대시보드 JSON 파일(DashboardFromTemplate.json)의 예입니다.
{
"SourceTemplate": {
"DataSetReferences": [
{
"DataSetPlaceholder": "placeholder", // the place holder you have provided while creating the template in step 1.
"DataSetArn": "arn:aws:quicksight:us-east-1:<Account B ID>:dataset/<Dataset ID>"
}
],
"Arn": "arn:aws:quicksight:us-east-1:<Account B ID>:template/<Template ID>"
}
}
Boto3 SDK
response_dashboard = client.create_dashboard(
AwsAccountId=Account_B_Id,
DashboardId='Test',
Name='test123',
SourceEntity={
'SourceTemplate': {
'DataSetReferences': [
{
'DataSetPlaceholder': 'test',
'DataSetArn': 'arn:aws:quicksight:us-east-1:<accountId B>:dataset/639111f1-36d2-4873-947a-f94dc9a148bb'
},
],
'Arn': 'arn:aws:quicksight:us-east-1:<Accout_A>:template/<TemplateName>' }
},
Tags=[
{
'Key': 'test',
'Value': 'jsb'
},
]
)
print(response_dashboard)
2. 새로 생성한 대시보드를 확인합니다.
AWS CLI
aws quicksight list-dashboards \
--aws-account-id <Account B>
Boto3 SDK
response_dashboards_B= client.list_dashboards(
AwsAccountId='Account_B'
)
print(response_dashboards_A['DashboardSummaryList'])
3. 계정 B에서 위임된 IAM 역할에 IAM 권한을 부여합니다.
참고: IAM 정책은 특정 작업으로 제한될 수 있습니다. 새 대시보드의 권한을 업데이트해야 합니다. 그렇지 않으면 Amazon QuickSight 콘솔에 표시되지 않습니다.
AWS CLI
aws quicksight update-dashboard-permissions --aws-account-id <Account B> --dashboard-id <ID of newly created dashboard> --grant-permissions file://DashboardPermission.json
이 명령 구문은 IAM 역할(QS-TEST)에 Amazon QuickSight 대시보드에 대한 전체 액세스 권한을 부여합니다. update-dashboard-permissions 명령을 사용하여 새 대시보드의 권한을 업데이트할 수 있습니다.
Boto3 SDK
response = client.update_dashboard_permissions(AwsAccountId='string',DashboardId='string',GrantPermissions=[{'Principal': 'string','Actions': ['string',]},],RevokePermissions=[{'Principal': 'string','Actions': ['string',]},])
다음은 대시보드 JSON 파일(DashboardPermission.json)의 예입니다.
[
{
"Principal": "arn:aws:quicksight:us-east-1:<Account_A ID >:user/default/<Quicksight user name>", // arn of the QuickSight user you want to assign ownership
"Actions": ["quicksight:DescribeDashboard","quicksight:ListDashboardVersions","quicksight:UpdateDashboardPermissions","quicksight:QueryDashboard","quicksight:UpdateDashboard","quicksight:DeleteDashboard","quicksight:DescribeDashboardPermissions","quicksight:UpdateDashboardPublishedVersion"]
}
]
이 템플릿 파일에 나열된 권한을 통해 대시보드의 공동 소유자로 액세스할 수 있습니다.
다른 사용자에게 READ 전용 액세스 권한을 제공하려면 다음 권한을 지정합니다.
quicksight:DescribeDashboard
quicksight:ListDashboardVersions
quicksight:QueryDashboard
다음 예에서는 "quicksight:*" 와일드카드 표현식을 사용하여 전체 액세스 권한이 부여됩니다.
}
]
}
"Effect": "Allow"
"Resource": "*",
"Action": "quicksight:*",
"Statement": {
"Version": "2012-10-17",
{