

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Quick Sight API를 사용하여 Amazon Quick Sight 대시보드 임베딩
대시보드 임베딩

다음 주제를 사용하여 Amazon Quick Sight API를 사용한 대시보드 임베딩에 대해 알아봅니다.

**Topics**
+ [

# 등록된 사용자를 위한 Amazon Quick Sight 대시보드 임베딩
](embedded-analytics-dashboards-for-authenticated-users.md)
+ [

# 익명(미등록) 사용자를 위한 Amazon Quick Sight 대시보드 임베딩
](embedded-analytics-dashboards-for-everyone.md)
+ [

# 임베디드 대시보드에서 실행 요약 활성화
](embedded-analytics-genbi-executive-summaries-dashboard.md)

# 등록된 사용자를 위한 Amazon Quick Sight 대시보드 임베딩
등록된 사용자를 위한 대시보드 임베딩

**중요**  
Amazon Quick Sight에는 및 임베딩 분석을 위한 새로운 API 작업이 `GenerateEmbedUrlForAnonymousUser` 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` API 작업을 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. 이전 API 작업을 사용한 임베딩에 대한 자세한 내용은 [GetDashboardEmbedURL 및 GetSessionEmbedURL API 작업을 사용한 분석 임베딩을](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html) 참조하세요.


|  | 
| --- |
|  적용 대상: Enterprise Edition  | 


|  | 
| --- |
|    대상:  Amazon Quick 개발자  | 

다음 섹션에서는 Amazon Quick Sight의 등록된 사용자를 위해 임베디드 Amazon Quick Sight 대시보드를 설정하는 방법에 대한 자세한 정보를 확인할 수 있습니다.

**Topics**
+ [

## 1단계: 권한 설정
](#embedded-dashboards-for-authenticated-users-step-1)
+ [

## 2단계: 인증 코드가 첨부된 URL 생성
](#embedded-dashboards-for-authenticated-users-step-2)
+ [

## 3단계: 대시보드 URL 임베드
](#embedded-dashboards-for-authenticated-users-step-3)

## 1단계: 권한 설정
1단계: 권한 설정

다음 단원에서 백엔드 애플리케이션 또는 웹 서버의 권한을 설정하는 방법을 알아봅니다. 이 작업을 수행하려면 IAM에 대한 관리자 액세스 권한이 있어야 합니다.

대시보드에 액세스하는 각 사용자는 Amazon Quick Sight에 대시보드에 대한 액세스 및 권한을 부여하는 역할을 수임합니다. 이렇게 하려면에서 IAM 역할을 생성합니다 AWS 계정. IAM 정책을 역할과 연결하여 역할을 수행하는 사용자에게 권한을 제공합니다. IAM 역할은 특정 사용자 풀의 임베딩 URL을 검색할 수 있는 권한을 제공해야 합니다. 와일드카드 문자 \$1를 사용하여, 특정 네임스페이스의 모든 사용자 또는 특정 네임스페이스의 일부 사용자에 대해 URL을 생성할 권한을 부여할 수 있습니다. 이를 위해 `quicksight:GenerateEmbedUrlForRegisteredUser`을(를) 추가합니다.

IAM 정책에 개발자가 `GenerateEmbedUrlForRegisteredUser` API 작업의 `AllowedDomains` 파라미터에 나열할 수 있는 도메인을 제한하는 조건을 만들 수 있습니다. `AllowedDomains` 파라미터는 선택 파라미터입니다. 개발자는 **Amazon Quick Sight 관리** 메뉴에 구성된 정적 도메인을 재정의할 수 있는 옵션을 제공합니다. 대신 생성된 URL에 액세스할 수 있는 도메인 또는 하위 도메인을 최대 3개까지 나열할 수 있습니다. 그러면 만든 웹 사이트에 이 URL이 포함됩니다. 파라미터에 나열된 도메인만 포함된 시각적 객체에 액세스할 수 있습니다. 이 조건이 없으면, 인터넷에 있는 모든 도메인을 `AllowedDomains` 파라미터에 나열할 수 있습니다.

개발자가 이 파라미터로 사용할 수 있는 도메인을 제한하려면 IAM 정책에 `AllowedEmbeddingDomains` 조건을 추가하세요. `AllowedDomains` 파라미터에 대한 자세한 내용은 Amazon Quick Sight API 참조의 [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)를 참조하세요. ** 

**IAM 조건 연산자에 대한 보안 모범 사례**  
잘못 구성된 IAM 조건 연산자는 URL 변형을 통해 임베디드 Quick 리소스에 대한 무단 액세스를 허용할 수 있습니다. IAM 정책에서 `quicksight:AllowedEmbeddingDomains` 조건 키를 사용하는 경우 특정 도메인을 허용하거나 특별히 허용되지 않는 모든 도메인을 거부하는 조건 연산자를 사용합니다. IAM 조건 연산자에 대한 자세한 내용은 [IAM 사용 설명서의 IAM JSON 정책 요소: 조건 연산자를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) 참조하세요.  
다양한 URL 변형이 동일한 리소스를 가리킬 수 있습니다. 예를 들어 다음 URLs 모두 동일한 콘텐츠로 확인됩니다.  
`https://example.com`
`https://example.com/`
`https://Example.com`
정책에서 이러한 URL 변형을 고려하지 않는 연산자를 사용하는 경우 공격자는 동등한 URL 변형을 제공하여 제한을 우회할 수 있습니다.  
IAM 정책이 적절한 조건 연산자를 사용하여 우회 취약성을 방지하고 의도한 도메인만 임베디드 리소스에 액세스할 수 있는지 확인해야 합니다.

다음 샘플 정책은 이러한 권한을 제공합니다.

또한 Amazon Quick Sight 독자가 될 사용자를 처음 생성하는 경우 정책에 `quicksight:RegisterUser` 권한을 추가해야 합니다.

다음 샘플 정책은 Amazon Quick Sight 리더인 최초 사용자를 위해 임베딩 URL을 검색할 수 있는 권한을 제공합니다.

마지막으로, 방금 생성한 역할에 액세스하려면 애플리케이션의 IAM 자격 증명에 신뢰 정책이 연결되어 있어야 합니다. 즉, 사용자가 애플리케이션에 액세스하면 애플리케이션이 사용자를 대신하여 역할을 수임하고 Amazon Quick Sight에서 사용자를 프로비저닝할 수 있습니다. 다음 예제는 샘플 신뢰 정책입니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowLambdaFunctionsToAssumeThisRole",
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
            "Sid": "AllowEC2InstancesToAssumeThisRole",
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

OpenID Connect 또는 SAML 인증의 신뢰 정책에 대한 자세한 내용은 IAM 사용 설명서의 다음 단원을 참조하십시오.
+ [웹 자격 증명 또는 OpenID Connect 연동을 위한 역할 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [SAML 2.0 연동을 위한 역할 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## 2단계: 인증 코드가 첨부된 URL 생성
2단계: URL 생성

다음 단원에서는 사용자를 인증하고 애플리케이션 서버에서 임베딩 가능한 대시보드 URL을 가져오는 방법을 알아볼 수 있습니다. IAM 또는 Amazon Quick Sight 자격 증명 유형에 대한 대시보드를 포함하려는 경우 대시보드를 사용자와 공유합니다.

사용자가 앱에 액세스할 때, 앱은 사용자를 대신하여 IAM 역할을 맡습니다. 그런 다음 사용자가 아직 없는 경우 Amazon Quick Sight에 사용자를 추가합니다. 다음으로 식별자를 고유한 역할 세션 ID로 전달합니다.

이 단계를 수행하면 대시보드의 각 뷰어가 Amazon Quick Sight에서 고유하게 프로비저닝됩니다. 또한 사용자 단위 설정(예: 파라미터에 대한 동적 기본값 및 행 수준 보안)을 적용합니다.

다음 예는 사용자를 대신하여 IAM 인증을 수행합니다. 이 코드는 앱 서버에서 실행됩니다.

### Java


```
import com.amazonaws.auth.AWSCredentials;
    import com.amazonaws.auth.BasicAWSCredentials;
    import com.amazonaws.auth.AWSCredentialsProvider;
    import com.amazonaws.regions.Regions;
    import com.amazonaws.services.quicksight.AmazonQuickSight;
    import com.amazonaws.services.quicksight.AmazonQuickSightClientBuilder;
    import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserRequest;
    import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserResult;
    import com.amazonaws.services.quicksight.model.RegisteredUserEmbeddingExperienceConfiguration;
    import com.amazonaws.services.quicksight.model.RegisteredUserDashboardEmbeddingConfiguration;

    /**
    * Class to call QuickSight AWS SDK to get url for dashboard embedding.
    */
    public class GetQuicksightEmbedUrlRegisteredUserDashboardEmbedding {

        private final AmazonQuickSight quickSightClient;

        public GetQuicksightEmbedUrlRegisteredUserDashboardEmbedding() {
            this.quickSightClient = AmazonQuickSightClientBuilder
                    .standard()
                    .withRegion(Regions.US_EAST_1.getName())
                    .withCredentials(new AWSCredentialsProvider() {
                        @Override
                        public AWSCredentials getCredentials() {
                            // provide actual IAM access key and secret key here
                            return new BasicAWSCredentials("access-key", "secret-key");
                        }

                        @Override
                        public void refresh() {}
                        }
                    )
                    .build();
        }

        public String getQuicksightEmbedUrl(
                final String accountId, // AWS Account ID
                final String dashboardId, // Dashboard ID to embed
                final List<String> allowedDomains, // Runtime allowed domain for embedding
                final String userArn // Registered user arn to use for embedding. Refer to Get Embed Url section in developer portal to find out how to get user arn for a QuickSight user.
        ) throws Exception {
            final RegisteredUserEmbeddingExperienceConfiguration experienceConfiguration = new RegisteredUserEmbeddingExperienceConfiguration()
                    .withDashboard(new RegisteredUserDashboardEmbeddingConfiguration().withInitialDashboardId(dashboardId));
            final GenerateEmbedUrlForRegisteredUserRequest generateEmbedUrlForRegisteredUserRequest = new GenerateEmbedUrlForRegisteredUserRequest();
            generateEmbedUrlForRegisteredUserRequest.setAwsAccountId(accountId);
            generateEmbedUrlForRegisteredUserRequest.setUserArn(userArn);
            generateEmbedUrlForRegisteredUserRequest.setAllowedDomains(allowedDomains);
            generateEmbedUrlForRegisteredUserRequest.setExperienceConfiguration(experienceConfiguration);

            final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

            return generateEmbedUrlForRegisteredUserResult.getEmbedUrl();
        }
    }
```

### JavaScript


```
global.fetch = require('node-fetch');
    const AWS = require('aws-sdk');

    function generateEmbedUrlForRegisteredUser(
        accountId,
        dashboardId,
        openIdToken, // Cognito-based token
        userArn, // registered user arn
        roleArn, // IAM user role to use for embedding
        sessionName, // Session name for the roleArn assume role
        allowedDomains, // Runtime allowed domain for embedding
        getEmbedUrlCallback, // GetEmbedUrl success callback method
        errorCallback // GetEmbedUrl error callback method
        ) {
        const stsClient = new AWS.STS();
        let stsParams = {
            RoleSessionName: sessionName,
            WebIdentityToken: openIdToken,
            RoleArn: roleArn
        }

        stsClient.assumeRoleWithWebIdentity(stsParams, function(err, data) {
            if (err) {
                console.log('Error assuming role');
                console.log(err, err.stack);
                errorCallback(err);
            } else {
                const getDashboardParams = {
                    "AwsAccountId": accountId,
                    "ExperienceConfiguration": {
                        "Dashboard": {
                            "InitialDashboardId": dashboardId
                        }
                    },
                    "UserArn": userArn,
                    "AllowedDomains": allowedDomains,
                    "SessionLifetimeInMinutes": 600
                };

                const quicksightClient = new AWS.QuickSight({
                    region: process.env.AWS_REGION,
                    credentials: {
                        accessKeyId: data.Credentials.AccessKeyId,
                        secretAccessKey: data.Credentials.SecretAccessKey,
                        sessionToken: data.Credentials.SessionToken,
                        expiration: data.Credentials.Expiration
                    }
                });

                quicksightClient.generateEmbedUrlForRegisteredUser(getDashboardParams, function(err, data) {
                    if (err) {
                        console.log(err, err.stack);
                        errorCallback(err);
                    } else {
                        const result = {
                            "statusCode": 200,
                            "headers": {
                                "Access-Control-Allow-Origin": "*", // Use your website domain to secure access to GetEmbedUrl API
                                "Access-Control-Allow-Headers": "Content-Type"
                            },
                            "body": JSON.stringify(data),
                            "isBase64Encoded": false
                        }
                        getEmbedUrlCallback(result);
                    }
                });
            }
        });
    }
```

### Python3


```
import json
import boto3
from botocore.exceptions import ClientError

sts = boto3.client('sts')

# Function to generate embedded URL  
# accountId: AWS account ID
# dashboardId: Dashboard ID to embed
# userArn: arn of registered user
# allowedDomains: Runtime allowed domain for embedding
# roleArn: IAM user role to use for embedding
# sessionName: session name for the roleArn assume role
def getEmbeddingURL(accountId, dashboardId, userArn, allowedDomains, roleArn, sessionName):
    try:
        assumedRole = sts.assume_role(
            RoleArn = roleArn,
            RoleSessionName = sessionName,
        )
    except ClientError as e:
        return "Error assuming role: " + str(e)
    else: 
        assumedRoleSession = boto3.Session(
            aws_access_key_id = assumedRole['Credentials']['AccessKeyId'],
            aws_secret_access_key = assumedRole['Credentials']['SecretAccessKey'],
            aws_session_token = assumedRole['Credentials']['SessionToken'],
        )
        try:
            quicksightClient = assumedRoleSession.client('quicksight', region_name='us-west-2')
            response = quicksightClient.generate_embed_url_for_registered_user(
                AwsAccountId=accountId,
                ExperienceConfiguration = {
                    "Dashboard": {
                        "InitialDashboardId": dashboardId
                    }
                },
                UserArn = userArn,
                AllowedDomains = allowedDomains,
                SessionLifetimeInMinutes = 600
            )
            
            return {
                'statusCode': 200,
                'headers': {"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "Content-Type"},
                'body': json.dumps(response),
                'isBase64Encoded':  bool('false')
            }
        except ClientError as e:
            return "Error generating embedding url: " + str(e)
```

### Node.js


다음 예제는 앱 서버에서 임베디드 대시보드에 대한 URL를 생성하는 데 사용할 수 있는 JavaScript(Node.js)를 보여줍니다. 웹 사이트 또는 앱에서 이 URL을 사용하여 대시보드를 표시할 수 있습니다.

**Example**  

```
const AWS = require('aws-sdk');
    const https = require('https');

    var quicksightClient = new AWS.Service({
        apiConfig: require('./quicksight-2018-04-01.min.json'),
        region: 'us-east-1',
    });

    quicksightClient.generateEmbedUrlForRegisteredUser({
        'AwsAccountId': '111122223333',
        'ExperienceConfiguration': { 
            'Dashboard': {
                'InitialDashboardId': '1c1fe111-e2d2-3b30-44ef-a0e111111cde'
            }
        },
        'UserArn': 'REGISTERED_USER_ARN',
        'AllowedDomains': allowedDomains,
        'SessionLifetimeInMinutes': 100
    }, function(err, data) {
        console.log('Errors: ');
        console.log(err);
        console.log('Response: ');
        console.log(data);
    });
```

**Example**  

```
//The URL returned is over 900 characters. For this example, we've shortened the string for
    //readability and added ellipsis to indicate that it's incomplete.
        { 
            Status: 200,
            EmbedUrl: 'https://quicksightdomain/embed/12345/dashboards/67890...'
            RequestId: '7bee030e-f191-45c4-97fe-d9faf0e03713' 
        }
```

### .NET/C\$1


다음 예제는 앱 서버에서 임베디드 대시보드에 대한 URL를 생성하는데 사용할 수 있는 .NET/C\$1 코드를 보여줍니다. 웹 사이트 또는 앱에서 이 URL을 사용하여 대시보드를 표시할 수 있습니다.

**Example**  

```
using System;
    using Amazon.QuickSight;
    using Amazon.QuickSight.Model;

    namespace GenerateDashboardEmbedUrlForRegisteredUser
    {
        class Program
        {
            static void Main(string[] args)
            {
                var quicksightClient = new AmazonQuickSightClient(
                    AccessKey,
                    SecretAccessKey,
                    SessionToken,
                    Amazon.RegionEndpoint.USEast1);
                try
                {
                    RegisteredUserDashboardEmbeddingConfiguration registeredUserDashboardEmbeddingConfiguration
                        = new RegisteredUserDashboardEmbeddingConfiguration
                        {
                            InitialDashboardId = "dashboardId"
                        };
                    RegisteredUserEmbeddingExperienceConfiguration registeredUserEmbeddingExperienceConfiguration
                        = new RegisteredUserEmbeddingExperienceConfiguration
                        {
                            Dashboard = registeredUserDashboardEmbeddingConfiguration
                        };
                        
                    Console.WriteLine(
                        quicksightClient.GenerateEmbedUrlForRegisteredUserAsync(new GenerateEmbedUrlForRegisteredUserRequest
                        {
                            AwsAccountId = "111122223333",
                            ExperienceConfiguration = registeredUserEmbeddingExperienceConfiguration,
                            UserArn = "REGISTERED_USER_ARN",
                            AllowedDomains = allowedDomains,
                            SessionLifetimeInMinutes = 100
                        }).Result.EmbedUrl
                    );
                } catch (Exception ex) {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
```

### AWS CLI


역할을 수임하려면 다음 AWS Security Token Service (AWS STS) API 작업 중 하나를 선택합니다.
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) - IAM 자격 증명을 사용하여 역할을 수임하는 경우 사용합니다.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) - 웹 ID 공급자를 사용하여 사용자를 인증하는 경우 이 작업을 사용하세요.
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) - SAML을 사용하여 사용자를 인증할 때 이 작업을 사용하세요.

다음 예에서는 IAM 역할을 설정하는 CLI 명령을 보여줍니다. 역할은 `quicksight:GenerateEmbedUrlForRegisteredUser`에 대한 권한이 활성화되어 있어야 합니다. 사용자가 대시보드를 처음 열 때 사용자를 추가하는 적시 접근 방식을 취하려면, 역할에 `quicksight:RegisterUser`에 대한 사용 권한도 활성화해야 합니다.

```
aws sts assume-role \
        --role-arn "arn:aws:iam::111122223333:role/embedding_quicksight_dashboard_role" \
        --role-session-name john.doe@example.com
```

`assume-role` 작업은 액세스 키, 보안 키 및 세션 토큰의 세 가지 출력 파라미터를 반환합니다.

**참고**  
`AssumeRole` 작업을 호출할 때 `ExpiredToken` 오류가 발생할 경우, 이는 아마도 이전의 `SESSION TOKEN`이(가) 환경 변수에 남아 있기 때문입니다. 다음 변수를 설정하여 이를 삭제합니다.  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

다음 예에서는 CLI에서 세 파라미터를 설정하는 방법을 보여줍니다. Microsoft Windows 컴퓨터를 사용하는 경우 `export` 대신 `set`을(를) 사용하십시오.

```
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"
```

이러한 명령을 실행하여 웹 사이트를 방문하는 사용자의 역할 세션 ID를 `embedding_quicksight_dashboard_role/john.doe@example.com`으로 설정합니다. 역할 세션 ID는 `role-arn`의 역할 이름과 `role-session-name` 값으로 구성됩니다. 각 사용자에 대해 적절한 권한을 설정하려면 각 사용자에 대해 고유한 역할 세션 ID를 사용해야 합니다. 또한 사용자 액세스 조절을 방지할 수 있습니다. *조절*은 동일한 사용자가 여러 위치에서 Amazon Quick Sight에 액세스하지 못하도록 하는 보안 기능입니다.

역할 세션 ID도 Amazon Quick Sight의 사용자 이름이 됩니다. 이 패턴을 사용하여 Amazon Quick Sight에서 사용자를 미리 프로비저닝하거나 대시보드에 처음 액세스할 때 프로비저닝할 수 있습니다.

다음 예에서는 사용자를 프로비저닝하는 데 사용할 수 있는 CLI 명령을 보여줍니다. [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html), [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html) 및 기타 Amazon Quick Sight API 작업에 대한 자세한 내용은 [Amazon Quick Sight API 참조](https://docs.aws.amazon.com/quicksight/latest/APIReference/Welcome.html)를 참조하세요.

```
aws quicksight register-user \
        --aws-account-id 111122223333 \
        --namespace default \
        --identity-type IAM \
        --iam-arn "arn:aws:iam::111122223333:role/embedding_quicksight_dashboard_role" \
        --user-role READER \
        --user-name jhnd \
        --session-name "john.doe@example.com" \
        --email john.doe@example.com \
        --region us-east-1 \
        --custom-permissions-name TeamA1
```

사용자가 Microsoft AD를 통해 인증된 경우에는, 설정을 위해 `RegisterUser`을(를) 사용하지 않아도 됩니다. 대신 Amazon Quick Sight에 처음 액세스할 때 자동으로 구독해야 합니다. Microsoft AD 사용자의 경우 사용자 ARN을 얻는 데 `DescribeUser`를 사용할 수 있습니다.

사용자가 Amazon Quick Sight에 처음 액세스할 때 대시보드가 공유되는 그룹에이 사용자를 추가할 수도 있습니다. 다음 예에서는 사용자를 그룹에 추가하는 CLI 명령을 보여줍니다.

```
aws quicksight create-group-membership \
    --aws-account-id=111122223333 \
    --namespace=default \
    --group-name=financeusers \
    --member-name="embedding_quicksight_dashboard_role/john.doe@example.com"
```

이제 Amazon Quick Sight 사용자이기도 하고 대시보드에 액세스할 수 있는 앱 사용자가 생겼습니다.

마지막으로 대시보드에 대해 서명된 URL을 가져오려면 앱 서버에서 `generate-embed-url-for-registered-user`을 호출합니다. 그러면 임베드 가능한 대시보드 URL이 반환됩니다. 다음 예제에서는 AWS Managed Microsoft AD 또는 Single Sign-On(IAM Identity Center)을 통해 인증된 사용자에 대한 서버 측 호출을 사용하여 임베디드 대시보드의 URL을 생성하는 방법을 보여줍니다.

```
aws quicksight generate-embed-url-for-registered-user \
        --aws-account-id 111122223333 \
        --session-lifetime-in-minutes 600 \
        --user-arn arn:aws:quicksight:us-east-1:111122223333:user/default/embedding_quicksight_visual_role/embeddingsession \
        --allowed-domains '["domain1","domain2"]' \
        --experience-configuration Dashboard={InitialDashboardId=1a1ac2b2-3fc3-4b44-5e5d-c6db6778df89}
```

이 작업의 사용에 대한 자세한 내용은 [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html) 단원을 참조하세요. 자체 코드에서 이 작업 및 다른 API 작업을 사용할 수 있습니다.

## 3단계: 대시보드 URL 임베드
3단계: URL 임베드

다음 섹션에서는 [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)(JavaScript)를 사용하여 웹 사이트 또는 애플리케이션 페이지의 3단계에서 대시보드 URL을 포함하는 방법을 알아볼 수 있습니다. SDK를 사용하여 다음 작업을 수행할 수 있습니다.
+ HTML 페이지에 대시보드 배치
+ 대시보드에 파라미터 전달
+ 애플리케이션에 사용자 지정되는 메시지로 오류 상태 처리

`GenerateEmbedUrlForRegisteredUser` API 작업을 직접 호출하여 앱에 포함할 수 있는 URL을 생성하세요. 이 URL은 5분 동안 유효하며, 결과 세션은 10시간까지 유효합니다. 이 API 작업은 URL에 single-sign on 세션을 허용하는 `auth_code`을(를) 제공합니다.

다음은 `generate-embed-url-for-registered-user`의 응답 예입니다.

```
//The URL returned is over 900 characters. For this example, we've shortened the string for
//readability and added ellipsis to indicate that it's incomplete.
    {
        "Status": "200",
        "EmbedUrl": "https://quicksightdomain/embed/12345/dashboards/67890..",
        "RequestId": "7bee030e-f191-45c4-97fe-d9faf0e03713"
    }
```

[Amazon Quick Sight 임베딩 SDK를 사용하거나이 URL을 iframe에 추가하여 웹 페이지에이 대시보드를 임베](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)딩합니다. 고정 높이 및 너비 숫자(픽셀)를 설정하면 Amazon Quick Sight는 이를 사용하며 창의 크기가 조정될 때 시각적 객체를 변경하지 않습니다. 상대 백분율 높이와 너비를 설정하면 Amazon Quick Sight는 창 크기가 변경될 때 수정되는 응답형 레이아웃을 제공합니다. Amazon Quick Sight 임베딩 SDK를 사용하면 대시보드 내에서 파라미터를 제어하고 페이지 로드 완료 및 오류 측면에서 콜백을 수신할 수도 있습니다.

임베디드 대시보드를 호스팅할 도메인은 Quick 구독이 승인된 도메인 목록인 허용 목록에 있어야 합니다. 이 요건은 임베디드 대시보드에서 미승인 도메인을 제외함으로써 데이터를 보호합니다. 임베디드 대시보드의 도메인 추가에 대한 자세한 내용은 [Amazon Quick Sight API를 사용하여 런타임에 도메인 나열 허용을](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html) 참조하세요.

다음 예제는 생성된 URL을 사용하는 방법을 보여 줍니다. 이 코드는 앱 서버에서 생성됩니다.

### SDK 2.0


```
<!DOCTYPE html>
<html>

    <head>
        <title>Dashboard Embedding Example</title>
        <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@2.0.0/dist/quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            const embedDashboard = async() => {
                const {
                    createEmbeddingContext,
                } = QuickSightEmbedding;

                const embeddingContext = await createEmbeddingContext({
                    onChange: (changeEvent, metadata) => {
                        console.log('Context received a change', changeEvent, metadata);
                    },
                });

                const frameOptions = {
                    url: '<YOUR_EMBED_URL>',
                    container: '#experience-container',
                    height: "700px",
                    width: "1000px",
                    onChange: (changeEvent, metadata) => {
                        switch (changeEvent.eventName) {
                            case 'FRAME_MOUNTED': {
                                console.log("Do something when the experience frame is mounted.");
                                break;
                            }
                            case 'FRAME_LOADED': {
                                console.log("Do something when the experience frame is loaded.");
                                break;
                            }
                        }
                    },
                };

                const contentOptions = {
                    parameters: [
                        {
                            Name: 'country',
                            Values: [
                                'United States'
                            ],
                        },
                        {
                            Name: 'states',
                            Values: [
                                'California',
                                'Washington'
                            ]
                        }
                    ],
                    locale: "en-US",
                    sheetOptions: {
                        initialSheetId: '<YOUR_SHEETID>',
                        singleSheet: false,                        
                        emitSizeChangedEventOnSheetChange: false,
                    },
                    toolbarOptions: {
                        export: false,
                        undoRedo: false,
                        reset: false
                    },
                    attributionOptions: {
                        overlayContent: false,
                    },
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'CONTENT_LOADED': {
                                console.log("All visuals are loaded. The title of the document:", messageEvent.message.title);
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Error occurred while rendering the experience. Error code:", messageEvent.message.errorCode);
                                break;
                            }
                            case 'PARAMETERS_CHANGED': {
                                console.log("Parameters changed. Changed parameters:", messageEvent.message.changedParameters);
                                break;
                            }
                            case 'SELECTED_SHEET_CHANGED': {
                                console.log("Selected sheet changed. Selected sheet:", messageEvent.message.selectedSheet);
                                break;
                            }
                            case 'SIZE_CHANGED': {
                                console.log("Size changed. New dimensions:", messageEvent.message);
                                break;
                            }
                            case 'MODAL_OPENED': {
                                window.scrollTo({
                                    top: 0 // iframe top position
                                });
                                break;
                            }
                        }
                    },
                };
                const embeddedDashboardExperience = await embeddingContext.embedDashboard(frameOptions, contentOptions);

                const selectCountryElement = document.getElementById('country');
                selectCountryElement.addEventListener('change', (event) => {
                    embeddedDashboardExperience.setParameters([
                        {
                            Name: 'country',
                            Values: event.target.value
                        }
                    ]);
                });
            };
        </script>
    </head>

    <body onload="embedDashboard()">
        <span>
            <label for="country">Country</label>
            <select id="country" name="country">
                <option value="United States">United States</option>
                <option value="Mexico">Mexico</option>
                <option value="Canada">Canada</option>
            </select>
        </span>
        <div id="experience-container"></div>
    </body>

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

    <head>
        <title>Basic Embed</title>
        <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@1.0.15/dist/quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            var dashboard
            function onDashboardLoad(payload) {
                console.log("Do something when the dashboard is fully loaded.");
            }

            function onError(payload) {
                console.log("Do something when the dashboard fails loading");
            }

            function embedDashboard() {
                var containerDiv = document.getElementById("embeddingContainer");
                var options = {
                    // replace this dummy url with the one generated via embedding API
                    url: "https://us-east-1.quicksight.aws.amazon.com/sn/dashboards/dashboardId?isauthcode=true&identityprovider=quicksight&code=authcode",
                    container: containerDiv,
                    parameters: {
                        country: "United States"
                    },
                    scrolling: "no",
                    height: "700px",
                    width: "1000px",
                    locale: "en-US",
                    footerPaddingEnabled: true
                };
                dashboard = QuickSightEmbedding.embedDashboard(options);
                dashboard.on("error", onError);
                dashboard.on("load", onDashboardLoad);
            }

            function onCountryChange(obj) {
                dashboard.setParameters({country: obj.value});
            }
        </script>
    </head>

    <body onload="embedDashboard()">
        <span>
            <label for="country">Country</label>
            <select id="country" name="country" onchange="onCountryChange(this)">
                <option value="United States">United States</option>
                <option value="Mexico">Mexico</option>
                <option value="Canada">Canada</option>
            </select>
        </span>
        <div id="embeddingContainer"></div>
    </body>

</html>
```

이 예제가 작동하려면 Amazon Quick Sight 임베딩 SDK를 사용하여 JavaScript를 사용하여 웹 사이트에 임베디드 대시보드를 로드해야 합니다. 이 정보를 얻으려면 다음 중 하나를 수행합니다.
+ GitHub에서 [Amazon Quick Sight 임베딩 SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object)를 다운로드합니다. 이 리포지토리는 Amazon Quick Sight 개발자 그룹이 유지 관리합니다.
+ [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)에서 최신 임베딩 SDK 버전을 다운로드하세요.
+ JavaScript 종속성에 `npm`을(를) 사용하는 경우 다음 명령을 실행하여 다운로드하고 설치합니다.

  ```
  npm install amazon-quicksight-embedding-sdk
  ```

# 익명(미등록) 사용자를 위한 Amazon Quick Sight 대시보드 임베딩
익명 사용자를 위한 대시보드 임베딩

**중요**  
Amazon Quick Sight에는 및 임베딩 분석을 위한 새로운 API 작업이 `GenerateEmbedUrlForAnonymousUser` 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` API 작업을 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. 이전 API 작업을 사용한 임베딩에 대한 자세한 내용은 [GetDashboardEmbedURL 및 GetSessionEmbedURL API 작업을 사용한 분석 임베딩을](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html) 참조하세요.


|  | 
| --- |
|  적용 대상: Enterprise Edition  | 


|  | 
| --- |
|    대상:  Amazon Quick 개발자  | 

다음 섹션에서는 익명(미등록) 사용자를 위해 임베디드 Amazon Quick Sight 대시보드를 설정하는 방법에 대한 자세한 정보를 확인할 수 있습니다.

**Topics**
+ [

## 1단계: 권한 설정
](#embedded-analytics-dashboards-with-anonymous-users-step-1)
+ [

## 2단계: 인증 코드가 첨부된 URL 생성
](#embedded-analytics-dashboards-with-anonymous-users-step-2)
+ [

## 3단계: 대시보드 URL 임베드
](#embedded-analytics-dashboards-with-anonymous-users-step-3)

## 1단계: 권한 설정
1단계: 권한 설정


|  | 
| --- |
|  적용 대상:  Enterprise Edition  | 


|  | 
| --- |
|    대상:  Amazon Quick 개발자  | 

다음 단원에서 백엔드 애플리케이션 또는 웹 서버의 권한을 설정하는 방법을 알아봅니다. 이 작업을 수행하려면 IAM에 대한 관리자 액세스 권한이 있어야 합니다.

대시보드에 액세스하는 각 사용자는 Amazon Quick Sight에 대시보드에 대한 액세스 및 권한을 부여하는 역할을 수임합니다. 이렇게 하려면에서 IAM 역할을 생성합니다 AWS 계정. IAM 정책을 역할과 연결하여 역할을 수행하는 사용자에게 권한을 제공합니다.

IAM 정책에 개발자가 `GenerateEmbedUrlForAnonymousUser` API 작업의 `AllowedDomains` 파라미터에 나열할 수 있는 도메인을 제한하는 조건을 만들 수 있습니다. `AllowedDomains` 파라미터는 선택 파라미터입니다. 개발자는 **Amazon Quick Sight 관리** 메뉴에 구성된 정적 도메인을 재정의할 수 있는 옵션을 제공합니다. 대신 생성된 URL에 액세스할 수 있는 도메인 또는 하위 도메인을 최대 세 개까지 나열할 수 있습니다. 그러면 만든 웹 사이트에 이 URL이 포함됩니다. 파라미터에 나열된 도메인만 임베디드 대시보드에 액세스할 수 있습니다. 이 조건이 없으면, 인터넷에 있는 모든 도메인을 `AllowedDomains` 파라미터에 나열할 수 있습니다.

개발자가 이 파라미터로 사용할 수 있는 도메인을 제한하려면 IAM 정책에 `AllowedEmbeddingDomains` 조건을 추가하세요. `AllowedDomains` 파라미터에 대한 자세한 내용은 Amazon Quick Sight API 참조의 [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)를 참조하세요. ** 

**IAM 조건 연산자에 대한 보안 모범 사례**  
잘못 구성된 IAM 조건 연산자는 URL 변형을 통해 임베디드 Quick 리소스에 대한 무단 액세스를 허용할 수 있습니다. IAM 정책에서 `quicksight:AllowedEmbeddingDomains` 조건 키를 사용하는 경우 특정 도메인을 허용하거나 특별히 허용되지 않는 모든 도메인을 거부하는 조건 연산자를 사용합니다. IAM 조건 연산자에 대한 자세한 내용은 [IAM 사용 설명서의 IAM JSON 정책 요소: 조건 연산자를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) 참조하세요.  
다양한 URL 변형이 동일한 리소스를 가리킬 수 있습니다. 예를 들어 다음 URLs 모두 동일한 콘텐츠로 확인됩니다.  
`https://example.com`
`https://example.com/`
`https://Example.com`
정책에서 이러한 URL 변형을 고려하지 않는 연산자를 사용하는 경우 공격자는 동등한 URL 변형을 제공하여 제한을 우회할 수 있습니다.  
IAM 정책이 적절한 조건 연산자를 사용하여 우회 취약성을 방지하고 의도한 도메인만 임베디드 리소스에 액세스할 수 있는지 확인해야 합니다.

다음 샘플 정책은 `GenerateEmbedUrlForAnonymousUser`을(를) 사용할 수 있는 권한을 제공합니다. 이 접근 방식이 제대로 작동하려면 AWS 계정에 대해 필요에 맞는 세션 팩 또는 세션 용량 요금도 필요합니다. 그렇지 않으면 사용자가 대시보드에 액세스하려고 하면 `UnsupportedPricingPlanException` 오류가 반환됩니다.

방금 생성한 역할에 액세스하려면 애플리케이션의 IAM 자격 증명에 신뢰 정책이 연결되어 있어야 합니다. 즉, 사용자가 애플리케이션에 액세스하면, 애플리케이션이 사용자를 대신하여 역할을 맡아서 대시보드를 열 수 있습니다. 다음 예제는 샘플 신뢰 정책입니다.

------
#### [ JSON ]

****  

```
{
"Version":"2012-10-17",		 	 	 
"Statement": [
    {
        "Sid": "AllowLambdaFunctionsToAssumeThisRole",
        "Effect": "Allow",
        "Principal": {
            "Service": "lambda.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
    },
    {
        "Sid": "AllowEC2InstancesToAssumeThisRole",
        "Effect": "Allow",
        "Principal": {
            "Service": "ec2.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
    }
]
}
```

------

자세한 내용은 IAM 사용 설명서의 [IAM의 임시 보안 인증](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) 단원을 참조하세요.

## 2단계: 인증 코드가 첨부된 URL 생성
2단계: URL 생성


|  | 
| --- |
|  적용 대상:  Enterprise Edition  | 


|  | 
| --- |
|    대상:  Amazon Quick 개발자  | 

다음 단원에서는 익명의 방문자를 대신해 인증하고 애플리케이션 서버에서 임베딩 가능한 대시보드 URL을 가져오는 방법을 알아볼 수 있습니다.

사용자가 앱에 액세스할 때, 앱은 사용자를 대신하여 IAM 역할을 맡습니다. 그런 다음 사용자가 아직 없는 경우 Amazon Quick Sight에 사용자를 추가합니다. 다음으로 식별자를 고유한 역할 세션 ID로 전달합니다.

다음 예는 사용자를 대신하여 IAM 인증을 수행합니다. 식별자를 고유한 역할 세션 ID로 전달합니다. 이 코드는 앱 서버에서 실행됩니다.

### Java


```
import java.util.List;
    import com.amazonaws.auth.AWSCredentials;
    import com.amazonaws.auth.AWSCredentialsProvider;
    import com.amazonaws.auth.BasicAWSCredentials;
    import com.amazonaws.regions.Regions;
    import com.amazonaws.services.quicksight.AmazonQuickSight;
    import com.amazonaws.services.quicksight.AmazonQuickSightClientBuilder;
    import com.amazonaws.services.quicksight.model.RegisteredUserDashboardEmbeddingConfiguration;
    import com.amazonaws.services.quicksight.model.AnonymousUserEmbeddingExperienceConfiguration;
    import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForAnonymousUserRequest;
    import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForAnonymousUserResult;
    import com.amazonaws.services.quicksight.model.SessionTag;


    /**
    * Class to call QuickSight AWS SDK to generate embed url for anonymous user.
    */
    public class GenerateEmbedUrlForAnonymousUserExample {

        private final AmazonQuickSight quickSightClient;

        public GenerateEmbedUrlForAnonymousUserExample() {
            quickSightClient = AmazonQuickSightClientBuilder
                .standard()
                .withRegion(Regions.US_EAST_1.getName())
                .withCredentials(new AWSCredentialsProvider() {
                        @Override
                        public AWSCredentials getCredentials() {
                            // provide actual IAM access key and secret key here
                            return new BasicAWSCredentials("access-key", "secret-key");
                        }

                        @Override
                        public void refresh() {
                        }
                    }
                )
                .build();
        }

        public String GenerateEmbedUrlForAnonymousUser(
            final String accountId, // YOUR AWS ACCOUNT ID
            final String initialDashboardId, // DASHBOARD ID TO WHICH THE CONSTRUCTED URL POINTS.
            final String namespace, // ANONYMOUS EMBEDDING REQUIRES SPECIFYING A VALID NAMESPACE FOR WHICH YOU WANT THE EMBEDDING URL
            final List<String> authorizedResourceArns, // DASHBOARD ARN LIST TO EMBED
            final List<String> allowedDomains, // RUNTIME ALLOWED DOMAINS FOR EMBEDDING
            final List<SessionTag> sessionTags // SESSION TAGS USED FOR ROW-LEVEL SECURITY
        ) throws Exception {
            AnonymousUserEmbeddingExperienceConfiguration experienceConfiguration = new AnonymousUserEmbeddingExperienceConfiguration();
            AnonymousUserDashboardEmbeddingConfiguration dashboardConfiguration = new AnonymousUserDashboardEmbeddingConfiguration();
            dashboardConfiguration.setInitialDashboardId(initialDashboardId);
            experienceConfiguration.setDashboard(dashboardConfiguration);

            GenerateEmbedUrlForAnonymousUserRequest generateEmbedUrlForAnonymousUserRequest = new GenerateEmbedUrlForAnonymousUserRequest()
                .withAwsAccountId(accountId)
                .withNamespace(namespace)
                .withAuthorizedResourceArns(authorizedResourceArns)
                .withExperienceConfiguration(experienceConfiguration)
                .withSessionTags(sessionTags)
                .withSessionLifetimeInMinutes(600L); // OPTIONAL: VALUE CAN BE [15-600]. DEFAULT: 600
                .withAllowedDomains(allowedDomains);

            GenerateEmbedUrlForAnonymousUserResult dashboardEmbedUrl = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

            return dashboardEmbedUrl.getEmbedUrl();
        }

    }
```

### JavaScript


```
global.fetch = require('node-fetch');
const AWS = require('aws-sdk');

function generateEmbedUrlForAnonymousUser(
accountId, // YOUR AWS ACCOUNT ID
initialDashboardId, // DASHBOARD ID TO WHICH THE CONSTRUCTED URL POINTS
quicksightNamespace, // VALID NAMESPACE WHERE YOU WANT TO DO NOAUTH EMBEDDING
authorizedResourceArns, // DASHBOARD ARN LIST TO EMBED
allowedDomains, // RUNTIME ALLOWED DOMAINS FOR EMBEDDING
sessionTags, // SESSION TAGS USED FOR ROW-LEVEL SECURITY
generateEmbedUrlForAnonymousUserCallback, // GENERATEEMBEDURLFORANONYMOUSUSER SUCCESS CALLBACK METHOD
errorCallback // GENERATEEMBEDURLFORANONYMOUSUSER ERROR CALLBACK METHOD
) {
const experienceConfiguration = {
    "DashboardVisual": {
        "InitialDashboardVisualId": {
            "DashboardId": "dashboard_id",
            "SheetId": "sheet_id",
            "VisualId": "visual_id"
        }
    }
};

const generateEmbedUrlForAnonymousUserParams = {
    "AwsAccountId": accountId,
    "Namespace": quicksightNamespace,
    "AuthorizedResourceArns": authorizedResourceArns,
    "AllowedDomains": allowedDomains,
    "ExperienceConfiguration": experienceConfiguration,
    "SessionTags": sessionTags,
    "SessionLifetimeInMinutes": 600
};

const quicksightClient = new AWS.QuickSight({
    region: process.env.AWS_REGION,
    credentials: {
        accessKeyId: AccessKeyId,
        secretAccessKey: SecretAccessKey,
        sessionToken: SessionToken,
        expiration: Expiration
    }
});

quicksightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserParams, function(err, data) {
    if (err) {
        console.log(err, err.stack);
        errorCallback(err);
    } else {
        const result = {
            "statusCode": 200,
            "headers": {
                "Access-Control-Allow-Origin": "*", // USE YOUR WEBSITE DOMAIN TO SECURE ACCESS TO THIS API
                "Access-Control-Allow-Headers": "Content-Type"
            },
            "body": JSON.stringify(data),
            "isBase64Encoded": false
        }
        generateEmbedUrlForAnonymousUserCallback(result);
    }
});
}
```

### Python3


```
import json
import boto3
from botocore.exceptions import ClientError
import time

# Create QuickSight and STS clients
quicksightClient = boto3.client('quicksight',region_name='us-west-2')
sts = boto3.client('sts')

# Function to generate embedded URL for anonymous user
# accountId: YOUR AWS ACCOUNT ID
# quicksightNamespace: VALID NAMESPACE WHERE YOU WANT TO DO NOAUTH EMBEDDING
# authorizedResourceArns: DASHBOARD ARN LIST TO EMBED
# allowedDomains: RUNTIME ALLOWED DOMAINS FOR EMBEDDING
# dashboardId: DASHBOARD ID TO WHICH THE CONSTRUCTED URL POINTS
# sessionTags: SESSION TAGS USED FOR ROW-LEVEL SECURITY
def generateEmbedUrlForAnonymousUser(accountId, quicksightNamespace, authorizedResourceArns, allowedDomains, dashboardId, sessionTags):
try:
    response = quicksightClient.generate_embed_url_for_anonymous_user(
        AwsAccountId = accountId,
        Namespace = quicksightNamespace,
        AuthorizedResourceArns = authorizedResourceArns,
        AllowedDomains = allowedDomains,
            ExperienceConfiguration = {
                "Dashboard": {
                    "InitialDashboardId": dashboardId
                }
            },
        SessionTags = sessionTags,
        SessionLifetimeInMinutes = 600
    )
        
    return {
        'statusCode': 200,
        'headers': {"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "Content-Type"},
        'body': json.dumps(response),
        'isBase64Encoded':  bool('false')
    }
except ClientError as e:
    print(e)
    return "Error generating embeddedURL: " + str(e)
```

### Node.js


다음 예제는 앱 서버에서 임베디드 대시보드에 대한 URL를 생성하는 데 사용할 수 있는 JavaScript(Node.js)를 보여줍니다. 웹 사이트 또는 앱에서 이 URL을 사용하여 대시보드를 표시할 수 있습니다.

**Example**  

```
const AWS = require('aws-sdk');
    const https = require('https');

    var quicksightClient = new AWS.Service({
        apiConfig: require('./quicksight-2018-04-01.min.json'),
        region: 'us-east-1',
    });

    quicksightClient.generateEmbedUrlForAnonymousUser({
        'AwsAccountId': '111122223333',
        'Namespace' : 'default',
        'AuthorizedResourceArns': authorizedResourceArns,
        'AllowedDomains': allowedDomains,
        'ExperienceConfiguration': experienceConfiguration,
        'SessionTags': sessionTags,
        'SessionLifetimeInMinutes': 600

    }, function(err, data) {
        console.log('Errors: ');
        console.log(err);
        console.log('Response: ');
        console.log(data);
    });
```

**Example**  

```
//The URL returned is over 900 characters. For this example, we've shortened the string for
    //readability and added ellipsis to indicate that it's incomplete.
        { 
            Status: 200,
            EmbedUrl: 'https://quicksightdomain/embed/12345/dashboards/67890..',
            RequestId: '7bee030e-f191-45c4-97fe-d9faf0e03713' 
        }
```

### .NET/C\$1


다음 예제는 앱 서버에서 임베디드 대시보드에 대한 URL를 생성하는데 사용할 수 있는 .NET/C\$1 코드를 보여줍니다. 웹 사이트 또는 앱에서 이 URL을 사용하여 대시보드를 표시할 수 있습니다.

**Example**  

```
using System;
    using Amazon.QuickSight;
    using Amazon.QuickSight.Model;

    var quicksightClient = new AmazonQuickSightClient(
        AccessKey,
        SecretAccessKey,
        sessionToken,
        Amazon.RegionEndpoint.USEast1);
        
    try
    {
        Console.WriteLine(
            quicksightClient.GenerateEmbedUrlForAnonymousUserAsync(new GenerateEmbedUrlForAnonymousUserRequest
            {
                AwsAccountId = "111122223333",
                Namespace = default,
                AuthorizedResourceArns = authorizedResourceArns,
                AllowedDomains = allowedDomains,
                ExperienceConfiguration = experienceConfiguration,
                SessionTags = sessionTags,
                SessionLifetimeInMinutes = 600,
            }).Result.EmbedUrl
        );
    } catch (Exception ex) {
        Console.WriteLine(ex.Message);
    }
```

### AWS CLI


역할을 수임하려면 다음 AWS Security Token Service (AWS STS) API 작업 중 하나를 선택합니다.
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) - IAM 자격 증명을 사용하여 역할을 수임하는 경우 사용합니다.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) - 웹 ID 공급자를 사용하여 사용자를 인증하는 경우 이 작업을 사용하세요.
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) - Security Assertion Markup(SAML)을 사용하여 사용자를 인증하는 경우 이 작업을 사용하십시오.

다음 예에서는 IAM 역할을 설정하는 CLI 명령을 보여줍니다. 역할은 `quicksight:GenerateEmbedUrlForAnonymousUser`에 대한 권한이 활성화되어 있어야 합니다.

```
aws sts assume-role \
    --role-arn "arn:aws:iam::11112222333:role/QuickSightEmbeddingAnonymousPolicy" \
    --role-session-name anonymous caller
```

`assume-role` 작업은 액세스 키, 보안 키 및 세션 토큰의 세 가지 출력 파라미터를 반환합니다.

**참고**  
`AssumeRole` 작업을 호출할 때 `ExpiredToken` 오류가 발생할 경우, 이는 아마도 이전의 `SESSION TOKEN`이(가) 환경 변수에 남아 있기 때문입니다. 다음 변수를 설정하여 이를 삭제합니다.  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

다음 예에서는 CLI에서 세 파라미터를 설정하는 방법을 보여줍니다. Microsoft Windows 컴퓨터를 사용하는 경우 `export` 대신 `set`을(를) 사용하십시오.

```
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"
```

이러한 명령을 실행하여 웹 사이트를 방문하는 사용자의 역할 세션 ID를 `embedding_quicksight_dashboard_role/QuickSightEmbeddingAnonymousPolicy`으로 설정합니다. 역할 세션 ID는 `role-arn`의 역할 이름과 `role-session-name` 값으로 구성됩니다. 각 방문 사용자에 대해 적절한 권한을 설정하려면 각 사용자에 대해 고유한 역할 세션 ID를 사용해야 합니다. 또한 각 세션을 분리하고 구분할 수 있습니다. 로드 밸런싱 등을 위해 여러 웹 서버를 사용하는 경우, 세션이 다른 서버에 다시 연결되면 새 세션이 시작됩니다.

대시보드에 대해 서명된 URL을 가져오려면, 앱 서버에서 `generate-embed-url-for-anynymous-user`을(를) 호출합니다. 그러면 임베드 가능한 대시보드 URL이 반환됩니다. 다음 예제는 웹 포털 또는 앱을 익명으로 방문하는 사용자에 대해 서버 측 직접 호출을 사용하여 임베디드 대시보드의 URL을 생성하는 방법을 보여줍니다.

```
aws quicksight generate-embed-url-for-anonymous-user \
--aws-account-id 111122223333 \
--namespace default-or-something-else \
--session-lifetime-in-minutes 15 \
--authorized-resource-arns '["dashboard-arn-1","dashboard-arn-2"]' \
--allowed-domains '["domain1","domain2"]' \
--session-tags '["Key": tag-key-1,"Value": tag-value-1,{"Key": tag-key-1,"Value": tag-value-1}]' \
--experience-configuration 'DashboardVisual={InitialDashboardVisualId={DashboardId=dashboard_id,SheetId=sheet_id,VisualId=visual_id}}'
```

이 작업의 사용에 대한 자세한 내용은 [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html) 단원을 참조하세요. 자체 코드에서 이 작업 및 다른 API 작업을 사용할 수 있습니다.

## 3단계: 대시보드 URL 임베드
3단계: URL 임베드


|  | 
| --- |
|  적용 대상:  Enterprise Edition  | 


|  | 
| --- |
|    대상:  Amazon Quick 개발자  | 

다음 섹션에서는 [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)(JavaScript)를 사용하여 웹 사이트 또는 애플리케이션 페이지의 2단계에서 대시보드 URL을 포함하는 방법을 알아볼 수 있습니다. SDK를 사용하여 다음 작업을 수행할 수 있습니다.
+ HTML 페이지에 대시보드 배치
+ 대시보드에 파라미터 전달
+ 애플리케이션에 사용자 지정되는 메시지로 오류 상태 처리

`GenerateEmbedUrlForAnynymousUser` API 작업을 직접 호출하여 앱에 포함할 수 있는 URL을 생성하세요. 이 URL은 5분 동안 유효하며 결과 세션은 10시간 동안 유효합니다. 이 API 작업은 URL에 single-sign on 세션을 허용하는 `auth_code`을(를) 제공합니다.

다음은 `generate-embed-url-for-anynymous-user`의 응답 예입니다.

```
//The URL returned is over 900 characters. For this example, we've shortened the string for
//readability and added ellipsis to indicate that it's incomplete.
        {
            "Status": "200",
            "EmbedUrl": "https://quicksightdomain/embed/12345/dashboards/67890..",
            "RequestId": "7bee030e-f191-45c4-97fe-d9faf0e03713"
        }
```

[Amazon Quick Sight 임베딩 SDK를 사용하거나이 URL을 iframe에 추가하여 웹 페이지에이 대시보드를 임베](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)딩합니다. 고정 높이 및 너비 숫자(픽셀)를 설정하면 Amazon Quick Sight는 이를 사용하며 창 크기가 조정될 때 시각적 객체를 변경하지 않습니다. 상대 백분율 높이와 너비를 설정하면 Amazon Quick Sight는 창 크기가 변경될 때 수정되는 응답형 레이아웃을 제공합니다. Amazon Quick Sight 임베딩 SDK를 사용하면 대시보드 내에서 파라미터를 제어하고 페이지 로드 완료 및 오류 측면에서 콜백을 수신할 수도 있습니다.

임베디드 대시보드를 호스팅할 도메인은 Quick 구독이 승인된 도메인 목록인 허용 목록에 있어야 합니다. 이 요건은 임베디드 대시보드에서 미승인 도메인을 제외함으로써 데이터를 보호합니다. 임베디드 대시보드의 도메인 추가에 대한 자세한 내용은 [Amazon Quick Sight API를 사용하여 런타임에 도메인 나열 허용을](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html) 참조하세요.

다음 예제는 생성된 URL을 사용하는 방법을 보여 줍니다. 이 코드는 앱 서버에서 실행됩니다.

### SDK 2.0


```
<!DOCTYPE html>
<html>

<head>
    <title>Dashboard Embedding Example</title>
    <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@2.0.0/dist/quicksight-embedding-js-sdk.min.js"></script>
    <script type="text/javascript">
        const embedDashboard = async() => {
            const {
                createEmbeddingContext,
            } = QuickSightEmbedding;

            const embeddingContext = await createEmbeddingContext({
                onChange: (changeEvent, metadata) => {
                    console.log('Context received a change', changeEvent, metadata);
                },
            });

            const frameOptions = {
                url: '<YOUR_EMBED_URL>',
                container: '#experience-container',
                height: "700px",
                width: "1000px",
                onChange: (changeEvent, metadata) => {
                    switch (changeEvent.eventName) {
                        case 'FRAME_MOUNTED': {
                            console.log("Do something when the experience frame is mounted.");
                            break;
                        }
                        case 'FRAME_LOADED': {
                            console.log("Do something when the experience frame is loaded.");
                            break;
                        }
                    }
                },
            };

            const contentOptions = {
                parameters: [
                    {
                        Name: 'country',
                        Values: [
                            'United States'
                        ],
                    },
                    {
                        Name: 'states',
                        Values: [
                            'California',
                            'Washington'
                        ]
                    }
                ],
                locale: "en-US",
                sheetOptions: {
                    initialSheetId: '<YOUR_SHEETID>',
                    singleSheet: false,                        
                    emitSizeChangedEventOnSheetChange: false,
                },
                toolbarOptions: {
                    export: false,
                    undoRedo: false,
                    reset: false
                },
                attributionOptions: {
                    overlayContent: false,
                },
                onMessage: async (messageEvent, experienceMetadata) => {
                    switch (messageEvent.eventName) {
                        case 'CONTENT_LOADED': {
                            console.log("All visuals are loaded. The title of the document:", messageEvent.message.title);
                            break;
                        }
                        case 'ERROR_OCCURRED': {
                            console.log("Error occurred while rendering the experience. Error code:", messageEvent.message.errorCode);
                            break;
                        }
                        case 'PARAMETERS_CHANGED': {
                            console.log("Parameters changed. Changed parameters:", messageEvent.message.changedParameters);
                            break;
                        }
                        case 'SELECTED_SHEET_CHANGED': {
                            console.log("Selected sheet changed. Selected sheet:", messageEvent.message.selectedSheet);
                            break;
                        }
                        case 'SIZE_CHANGED': {
                            console.log("Size changed. New dimensions:", messageEvent.message);
                            break;
                        }
                        case 'MODAL_OPENED': {
                            window.scrollTo({
                                top: 0 // iframe top position
                            });
                            break;
                        }
                    }
                },
            };
            const embeddedDashboardExperience = await embeddingContext.embedDashboard(frameOptions, contentOptions);

            const selectCountryElement = document.getElementById('country');
            selectCountryElement.addEventListener('change', (event) => {
                embeddedDashboardExperience.setParameters([
                    {
                        Name: 'country',
                        Values: event.target.value
                    }
                ]);
            });
        };
    </script>
</head>

<body onload="embedDashboard()">
    <span>
        <label for="country">Country</label>
        <select id="country" name="country">
            <option value="United States">United States</option>
            <option value="Mexico">Mexico</option>
            <option value="Canada">Canada</option>
        </select>
    </span>
    <div id="experience-container"></div>
</body>

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

<head>
    <title>Basic Embed</title>
    <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@1.0.15/dist/quicksight-embedding-js-sdk.min.js"></script>
    <script type="text/javascript">
        var dashboard
        function onDashboardLoad(payload) {
            console.log("Do something when the dashboard is fully loaded.");
        }

        function onError(payload) {
            console.log("Do something when the dashboard fails loading");
        }

        function embedDashboard() {
            var containerDiv = document.getElementById("embeddingContainer");
            var options = {
                // replace this dummy url with the one generated via embedding API
                url: "https://us-east-1.quicksight.aws.amazon.com/sn/dashboards/dashboardId?isauthcode=true&identityprovider=quicksight&code=authcode",
                container: containerDiv,
                parameters: {
                    country: "United States"
                },
                scrolling: "no",
                height: "700px",
                width: "1000px",
                locale: "en-US",
                footerPaddingEnabled: true
            };
            dashboard = QuickSightEmbedding.embedDashboard(options);
            dashboard.on("error", onError);
            dashboard.on("load", onDashboardLoad);
        }

        function onCountryChange(obj) {
            dashboard.setParameters({country: obj.value});
        }
    </script>
</head>

<body onload="embedDashboard()">
    <span>
        <label for="country">Country</label>
        <select id="country" name="country" onchange="onCountryChange(this)">
            <option value="United States">United States</option>
            <option value="Mexico">Mexico</option>
            <option value="Canada">Canada</option>
        </select>
    </span>
    <div id="embeddingContainer"></div>
</body>

</html>
```

이 예제가 작동하려면 Amazon Quick Sight 임베딩 SDK를 사용하여 JavaScript를 사용하여 웹 사이트에 임베디드 대시보드를 로드해야 합니다. 이 정보를 얻으려면 다음 중 하나를 수행합니다.
+ GitHub에서 [Amazon Quick Sight 임베딩 SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object)를 다운로드합니다. 이 리포지토리는 Amazon Quick Sight 개발자 그룹이 유지 관리합니다.
+ [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) 최신 Amazon Quick Sight 임베딩 SDK 버전을 다운로드합니다.
+ JavaScript 종속성에 `npm`을(를) 사용하는 경우 다음 명령을 실행하여 다운로드하고 설치합니다.

  ```
  npm install amazon-quicksight-embedding-sdk
  ```

# 임베디드 대시보드에서 실행 요약 활성화
실행 요약 활성화


|  | 
| --- |
|  적용 대상:  Enterprise Edition  | 


|  | 
| --- |
|    대상:  Amazon Quick 개발자  | 

임베디드 대시보드에서 실행 요약을 활성화할 수 있습니다. 활성화되면 등록된 사용자는 Amazon Quick Sight가 대시보드에 대해 생성한 모든 인사이트의 요약을 제공하는 실행 요약을 생성할 수 있습니다. 실행 요약을 통해 리더는 대시보드에 대한 주요 인사이트와 정보를 한눈에 쉽게 확인할 수 있습니다. 사용자가 대시보드의 실행 요약을 생성하는 방법에 대한 자세한 내용은 [Amazon Quick Sight 대시보드의 실행 요약 생성을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/use-executive-summaries.html).

**참고**  
실행 요약은 등록된 사용자의 경우 임베디드 대시보드에서만 사용할 수 있으며 익명 또는 미등록 사용자의 경우 임베디드 대시보드에서 활성화할 수 없습니다.

**등록된 사용자의 경우 임베디드 대시보드에서 실행 요약을 활성화하는 방법**
+ [등록된 사용자의 Amazon Quick Sight 대시보드 임베딩](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-dashboards-for-authenticated-users.html) 단계에 따라 다음과 같은 변경 사항이 있는 대시보드를 임베딩합니다.

  1. 2단계에서 URL을 생성하는 경우 다음 예제와 같이 [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html) 또는 [GenerateEmbedUrlForRegisteredUserWithIdentity](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUserWithIdentity.html)의 `ExecutiveSummary` 파라미터에서 `Enabled: true`를 설정하세요.

     ```
     ExperienceConfiguration: {
             Dashboard: {
                 InitialDashboardId: dashboard_id,
                 FeatureConfigurations: {
                     AmazonQInQuickSight: {
                         ExecutiveSummary: {
                             Enabled: true
                         }
                     }
                 }
             }
         }
     }
     ```

  1. 3단계에서 Amazon Quick Sight 임베딩 SDK를 사용하여 대시보드 URL을 임베딩할 때 다음 예제`contentOptions`와 같이 `executiveSummary: true`에서를 설정합니다.

     ```
     const contentOptions = {
         toolbarOptions: {
             executiveSummary: true
         }
     };
     ```