

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

# Amazon Quick Sight에 대한 임베디드 분석
<a name="embedded-analytics"></a>

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


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


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

Amazon Quick Sight 임베디드 분석을 사용하면 데이터 기반 경험을 소프트웨어 애플리케이션에 원활하게 통합할 수 있습니다. 브랜드에 맞게 임베디드 구성 요소의 스타일을 지정할 수 있습니다. 이 기능은 최종 사용자가 애플리케이션을 떠나지 않고도 데이터를 분석하고 상호 작용할 수 있는 Amazon Quick Sight의 기능을 제공합니다. 인지적 복잡성을 줄여 사용자 경험을 개선하면 사용자는 더 깊이 이해하고 효과적으로 작업할 수 있는 더 나은 기회를 얻을 수 있습니다.

Amazon Quick Sight는 다음 요소에 대한 임베딩을 지원합니다.
+ Amazon Quick Sight 콘솔(등록된 사용자를 위한 전체 작성 환경)
+ Amazon Quick Sight 대시보드 및 시각적 객체(등록 사용자, 익명 사용자, 퍼블릭 최종 사용자용)
+ Amazon Quick Sight Q 검색 창(등록 사용자 및 익명 사용자용)

임베디드 Amazon Quick Sight 콘솔을 사용하면 전체 Amazon Quick Sight 환경을 포함할 수 있습니다. 이렇게 하면 AWS Management Console 또는 독립 실행형 웹 사이트의 컨텍스트가 아닌 애플리케이션의 일부로 Amazon Quick Sight 작성 도구를 사용할 수 있습니다. 임베디드 Amazon Quick Sight 콘솔 사용자는에 Amazon Quick Sight 작성자 또는 관리자로 등록해야 합니다 AWS 계정. 또한 Amazon Quick Sight 지원 인증 방법을 AWS 계정사용하여 동일한에 인증해야 합니다.

임베디드 Amazon Quick Sight 대시보드 또는 시각적 객체를 사용하면 독자는 게시된 대시보드 또는 시각적 객체에서와 동일한 기능과 상호 작용을 얻을 수 있습니다. 임베디드 대시보드 또는 시각적 객체를 사용하기 위해, 독자(뷰어) 는 다음 중 하나를 포함할 수 있습니다.
+ Amazon Quick Sight에서 지원하는 AWS 계정 모든 방법으로에서 인증된 Amazon Quick Sight 사용자.
+ 웹 사이트 또는 애플리케이션의 인증되지 않은 방문자 - 이 옵션을 사용하려면 용량 요금이 책정된 세션 팩이 필요합니다. 구독 유형에 대한 자세한 내용은 [Amazon Quick Sight 구독 및 역할 이해를 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/user-types.html#subscription-role-mapping).
+ 프로그래밍 방식으로 액세스하여 모니터나 대형 화면에서 디스플레이를 보는 여러 최종 사용자

앱도에 상주 AWS하는 경우 앱은 Amazon Quick Sight 구독 AWS 계정 과 동일한에 상주할 필요가 없습니다. 그러나 앱은 API 호출에 사용하는 AWS Identity and Access Management (IAM) 역할을 수임할 수 있어야 합니다.

콘텐츠를 임베딩하려면 먼저 임베딩을 사용하려는 AWS 계정 에서 Amazon Quick Sight Enterprise 에디션을 사용해야 합니다.

Amazon Quick Sight 임베딩은 지원되는 모든에서 사용할 수 있습니다 AWS 리전.

**Topics**
+ [

# 애플리케이션에 Amazon Quick Sight 분석 임베딩
](embedding-overview.md)
+ [

# 사용자 지정 Amazon Quick Sight 자산을 애플리케이션에 임베딩
](customize-and-personalize-embedded-analytics.md)
+ [

# 원클릭 임베드 코드를 사용하여 Amazon Quick Sight 시각적 객체 및 대시보드 임베딩
](1-click-embedding.md)
+ [

# Amazon Quick Sight APIs를 사용한 임베딩
](embedded-analytics-api.md)

# 애플리케이션에 Amazon Quick Sight 분석 임베딩
<a name="embedding-overview"></a>


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

분석을 임베드하려면 Amazon Quick Sight 임베딩 API를 실행하여 임베드 코드를 생성할 수 있습니다. 또는 대시보드의 경우 Amazon Quick Sight에서 대시보드를 공유할 때 임베드 코드를 복사할 수 있습니다. 각 옵션에 대해 아래에 설명되어 있습니다.

## 등록된 사용자의 원클릭 임베딩
<a name="embedding-overview-1-click"></a>

계정의 등록된 사용자와 대시보드를 공유하는 경우 대시보드의 임베드 코드를 복사하여 내부 애플리케이션의 HTML에 붙여 넣을 수 있습니다.

원클릭 엔터프라이즈 임베딩을 사용하는 것은 사용자가 인증해야 하는 내부 애플리케이션에 Amazon Quick Sight 대시보드를 임베드하려는 경우에 가장 적합합니다. 임베드 코드를 복사하면 변경되지 않는 정적 임베드 코드가 생성됩니다.

자세한 내용은 [원클릭 임베드 코드를 사용하여 등록된 사용자를 위한 Amazon Quick Sight 시각적 객체 및 대시보드 임베딩](embedded-analytics-1-click.md) 단원을 참조하십시오.

## Amazon Quick Sight APIs를 사용한 임베딩
<a name="embedding-overview-api"></a>

Amazon Quick Sight API를 사용한 임베딩은 사용자가 인증해야 하는 내부 애플리케이션 또는 누구나 액세스할 수 있는 외부 애플리케이션에 Amazon Quick Sight 환경을 포함하려는 경우에 가장 적합합니다. 임베딩 API 작업을 사용하여 임베드 코드를 생성하면 일회성 코드가 생성됩니다.

자세한 내용은 [Amazon Quick Sight APIs를 사용한 임베딩](embedded-analytics-api.md) 단원을 참조하십시오.

# 사용자 지정 Amazon Quick Sight 자산을 애플리케이션에 임베딩
<a name="customize-and-personalize-embedded-analytics"></a>

Amazon Quick Sight 임베디드 분석을 사용하여 비즈니스 요구 사항에 맞게 조정된 사용자 지정 Amazon Quick Sight 자산을 애플리케이션에 포함할 수 있습니다. 임베디드 대시보드 및 시각적 객체의 경우 Amazon Quick Sight 작성자는 독자가 대시보드 또는 시각적 객체를 탐색할 때 액세스할 수 있는 필터 및 드릴다운을 추가할 수 있습니다. Amazon Quick Sight 개발자는 Amazon Quick Sight SDKs를 사용하여 SaaS 애플리케이션과 Amazon Quick Sight 임베디드 자산 간에 더 엄격한 통합을 구축하여 런타임 시 대시보드의 시각적 객체에 데이터 포인트 콜백 작업을 추가할 수도 있습니다.

Amazon Quick Sight SDKs에 대한 자세한 내용은 [GitHub](https://github.com/awslabs/amazon-quicksight-embedding-sdk) 또는 [NPM](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)`amazon-quicksight-embedding-sdk`의 섹션을 참조하세요.

아래에서 Amazon Quick Sight SDKs를 사용하여 Amazon Quick Sight 임베디드 분석을 사용자 지정하는 방법에 대한 설명을 찾을 수 있습니다.

**Topics**
+ [

# Amazon Quick Sight에서 런타임 시 임베디드 콜백 작업 추가
](embedding-custom-actions-callback.md)
+ [

# Amazon Quick Sight 임베디드 대시보드 및 시각적 객체의 런타임 데이터 필터링
](embedding-runtime-filtering.md)
+ [

# Amazon Quick Sight 임베디드 대시보드 및 시각적 객체의 모양과 느낌 사용자 지정
](embedding-runtime-theming.md)
+ [

# Amazon Quick Sight 임베딩 SDK를 사용하여 임베디드 대시보드 보기에 대한 공유 가능한 링크 활성화
](embedded-view-sharing.md)

# Amazon Quick Sight에서 런타임 시 임베디드 콜백 작업 추가
<a name="embedding-custom-actions-callback"></a>

임베디드 데이터 포인트 콜백 작업을 사용하여 서비스형 소프트웨어(SaaS) 애플리케이션과 Amazon Quick Sight 임베디드 대시보드 및 시각적 객체 간에 더 긴밀한 통합을 구축합니다. 개발자는 Amazon Quick Sight 임베딩 SDK를 사용하여 다시 호출할 데이터 포인트를 등록할 수 있습니다. 시각적 객체에 대한 콜백 작업을 등록하면, 독자는 시각적 객체에서 데이터 포인트를 선택하여 선택한 데이터 포인트와 관련된 데이터를 제공하는 콜백을 수신할 수 있습니다. 이 정보를 사용하여 주요 레코드에 플래그를 지정하고, 데이터 포인트와 관련된 원시 데이터를 컴파일하고, 레코드를 캡처하고, 백엔드 프로세스용 데이터를 컴파일할 수 있습니다.

사용자 지정 시각적 콘텐츠, 텍스트 상자 또는 인사이트에는 임베디드 콜백이 지원되지 않습니다.

콜백에 데이터 포인트를 등록하기 전에 Embedding SDK를 버전 2.3.0으로 업데이트하세요. Amazon Quick Sight 임베딩 SDK 사용에 대한 자세한 내용은 GitHub의 [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk)를 참조하세요.

Amazon Quick Sight SDK를 통해 런타임 시 데이터 포인트 콜백을 하나 이상의 시각적 객체에 등록할 수 있습니다. 또한 [VisualCustomAction](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualCustomAction.html) API 구조에서 지원하는 모든 상호 작용에 데이터 포인트 콜백을 등록할 수 있습니다. 이렇게 하면 사용자가 시각적 객체에서 데이터 포인트를 선택하거나 데이터 포인트 컨텍스트 메뉴에서 데이터 포인트를 선택할 때 데이터 포인트 콜백이 시작될 수 있습니다. 다음 예제는 독자가 시각적 객체에서 데이터 포인트를 선택할 때 시작하는 데이터 포인트 콜백을 등록합니다.

```
/const MY_GET_EMBED_URL_ENDPOINT =
  "https://my.api.endpoint.domain/MyGetEmbedUrlApi"; // Sample URL

// The dashboard id to embed
const MY_DASHBOARD_ID = "my-dashboard"; // Sample ID

// The container element in your page that will have the embedded dashboard
const MY_DASHBOARD_CONTAINER = "#experience-container"; // Sample ID

// SOME HELPERS

const ActionTrigger = {
  DATA_POINT_CLICK: "DATA_POINT_CLICK",
  DATA_POINT_MENU: "DATA_POINT_MENU",
};

const ActionStatus = {
  ENABLED: "ENABLED",
  DISABLED: "DISABLED",
};

// This function makes a request to your endpoint to obtain an embed url for a given dashboard id
// The example implementation below assumes the endpoint takes dashboardId as request data
// and returns an object with EmbedUrl property
const myGetEmbedUrl = async (dashboardId) => {
  const apiOptions = {
    dashboardId,
  };
  const apiUrl = new URL(MY_GET_EMBED_URL_ENDPOINT);
  apiUrl.search = new URLSearchParams(apiOptions).toString();
  const apiResponse = await fetch(apiUrl.toString());
  const apiResponseData = await apiResponse.json();
  return apiResponseData.EmbedUrl;
};

// This function constructs a custom action object
const myConstructCustomActionModel = (
  customActionId,
  actionName,
  actionTrigger,
  actionStatus
) => {
  return {
    Name: actionName,
    CustomActionId: customActionId,
    Status: actionStatus,
    Trigger: actionTrigger,
    ActionOperations: [
      {
        CallbackOperation: {
          EmbeddingMessage: {},
        },
      },
    ],
  };
};

// This function adds a custom action on the first visual of first sheet of the embedded dashboard
const myAddVisualActionOnFirstVisualOfFirstSheet = async (
  embeddedDashboard
) => {
  // 1. List the sheets on the dashboard
  const { SheetId } = (await embeddedDashboard.getSheets())[0];
  // If you'd like to add action on the current sheet instead, you can use getSelectedSheetId method
  // const SheetId = await embeddedDashboard.getSelectedSheetId();

  // 2. List the visuals on the specified sheet
  const { VisualId } = (await embeddedDashboard.getSheetVisuals(SheetId))[0];

  // 3. Add the custom action to the visual
  try {
    const customActionId = "custom_action_id"; // Sample ID
    const actionName = "Flag record"; // Sample name
    const actionTrigger = ActionTrigger.DATA_POINT_CLICK; // or ActionTrigger.DATA_POINT_MENU
    const actionStatus = ActionStatus.ENABLED;
    const myCustomAction = myConstructCustomActionModel(
      customActionId,
      actionName,
      actionTrigger,
      actionStatus
    );
    const response = await embeddedDashboard.addVisualActions(
      SheetId,
      VisualId,
      [myCustomAction]
    );
    if (!response.success) {
      console.log("Adding visual action failed", response.errorCode);
    }
  } catch (error) {
    console.log("Adding visual action failed", error);
  }
};

const parseDatapoint = (visualId, datapoint) => {
  datapoint.Columns.forEach((Column, index) => {
    // FIELD | METRIC
    const columnType = Object.keys(Column)[0];

    // STRING | DATE | INTEGER | DECIMAL
    const valueType = Object.keys(Column[columnType])[0];
    const { Column: columnMetadata } = Column[columnType][valueType];

    const value = datapoint.RawValues[index][valueType];
    const formattedValue = datapoint.FormattedValues[index];

    console.log(
      `Column: ${columnMetadata.ColumnName} has a raw value of ${value}
           and formatted value of ${formattedValue.Value} for visual: ${visualId}`
    );
  });
};

// This function is used to start a custom workflow after the end user selects a datapoint
const myCustomDatapointCallbackWorkflow = (callbackData) => {
  const { VisualId, Datapoints } = callbackData;

  parseDatapoint(VisualId, Datapoints);
};

// EMBEDDING THE DASHBOARD

const main = async () => {
  // 1. Get embed url
  let url;
  try {
    url = await myGetEmbedUrl(MY_DASHBOARD_ID);
  } catch (error) {
    console.log("Obtaining an embed url failed");
  }

  if (!url) {
    return;
  }

  // 2. Create embedding context
  const embeddingContext = await createEmbeddingContext();

  // 3. Embed the dashboard
  const embeddedDashboard = await embeddingContext.embedDashboard(
    {
      url,
      container: MY_DASHBOARD_CONTAINER,
      width: "1200px",
      height: "300px",
      resizeHeightOnSizeChangedEvent: true,
    },
    {
      onMessage: async (messageEvent) => {
        const { eventName, message } = messageEvent;
        switch (eventName) {
          case "CONTENT_LOADED": {
            await myAddVisualActionOnFirstVisualOfFirstSheet(embeddedDashboard);
            break;
          }
          case "CALLBACK_OPERATION_INVOKED": {
            myCustomDatapointCallbackWorkflow(message);
            break;
          }
        }
      },
    }
  );
};

main().catch(console.error);
```

사용자가 컨텍스트 메뉴를 열 때 데이터포인트 콜백을 시작하도록 위 예제를 구성할 수도 있습니다. 위 예제에서 이 작업을 수행하려면 `actionTrigger`의 값을 `ActionTrigger.DATA_POINT_MENU`(으)로 설정합니다.

데이터포인트 콜백이 등록되면, 지정된 시각적 객체나 시각적 객체의 대부분의 데이터포인트에 적용됩니다. 콜백은 시각적 객체의 합계 또는 소계에는 적용되지 않습니다. 리더가 데이터 포인트와 상호 작용하면 Amazon Quick Sight 임베딩 SDK로 `CALLBACK_OPERATION_INVOKED` 메시지가 전송됩니다. 이 메시지는 `onMessage` 핸들러에 의해 캡처됩니다. 메시지에는 선택한 데이터 포인트와 관련된 전체 데이터 행의 원시 및 표시 값이 포함됩니다. 또한 데이터 포인트가 포함된 시각적 객체의 모든 열에 대한 열 메타데이터도 포함됩니다. 다음은 `CALLBACK_OPERATION_INVOKED` 메시지의 예입니다.

```
{
   CustomActionId: "custom_action_id",
   DashboardId: "dashboard_id",
   SheetId: "sheet_id",
   VisualId: "visual_id",
   DataPoints: [
        {
            RawValues: [
                    {
                        String: "Texas" // 1st raw value in row
                    },
                    {
                        Integer: 1000 // 2nd raw value in row
                    }
            ],
            FormattedValues: [
                    {Value: "Texas"}, // 1st formatted value in row
                    {Value: "1,000"} // 2nd formatted value in row
            ],
            Columns: [
                    { // 1st column metadata
                        Dimension: {
                            String: {
                                Column: {
                                    ColumnName: "State",
                                    DatsetIdentifier: "..."
                                }
                            }
                        }
                    },
                    { // 2nd column metadata
                        Measure: {
                            Integer: {
                                Column: {
                                    ColumnName: "Cancelled",
                                    DatsetIdentifier: "..."
                                },
                                AggregationFunction: {
                                    SimpleNumericalAggregation: "SUM"
                                }
                            }
                        }
                    }
            ]
        }
   ]
}
```

# Amazon Quick Sight 임베디드 대시보드 및 시각적 객체의 런타임 데이터 필터링
<a name="embedding-runtime-filtering"></a>

Amazon Quick Sight 임베딩 SDK의 필터 메서드를 사용하여 런타임 시 서비스형 소프트웨어(SaaS) 애플리케이션 내에서 Amazon Quick Sight 필터의 성능을 활용할 수 있습니다. 런타임 필터를 사용하면 비즈니스 소유자가 애플리케이션을 임베디드 Amazon Quick Sight 대시보드 및 시각적 객체와 통합할 수 있습니다. 이를 수행하려면 애플리케이션에서 사용자 지정 필터 제어를 생성하고 애플리케이션의 데이터를 기반으로 필터 사전 설정을 적용합니다. 그런 다음 개발자는 런타임 시 최종 사용자를 위한 필터 구성을 개인화할 수 있습니다.

개발자는 Amazon Quick Sight 임베딩 SDK를 사용하여 임베디드 대시보드 또는 시각적 객체에서 Amazon Quick Sight 필터를 생성, 쿼리, 업데이트 및 제거할 수 있습니다. [FilterGroup](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterGroup.html) 데이터 모델을 사용하여 애플리케이션에서 Amazon Quick Sight 필터 객체를 생성하고 필터 방법을 사용하여 임베디드 대시보드 및 시각적 객체에 적용합니다. Amazon Quick Sight 임베딩 SDK 사용에 대한 자세한 내용은 GitHub의 [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk)를 참조하세요.

**사전 조건**

시작하기 전에 Amazon Quick Sight 임베딩 SDK 버전 2.5.0 이상을 사용하고 있는지 확인하세요.

## 용어 및 개념
<a name="runtime-filtering-terminology"></a>

다음 용어는 임베디드 런타임 필터링을 사용할 때 유용할 수 있습니다.
+ *필터 그룹* - 개별 필터의 그룹입니다. `FilterGroup` 내에 있는 필터는 서로 OR 처리됩니다. [FilterGroup](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterGroup.html) 내의 필터는 동일한 시트 또는 시각적 객체에 적용됩니다.
+ *필터* - 단일 필터입니다. 필터는 범주, 숫자 또는 날짜/시간 필터 유형일 수 있습니다. 필터에 대한 자세한 정보는 [필터](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html)를 참조하세요.

## 설정
<a name="runtime-filtering-setup"></a>

시작하기 전에 다음 자산 및 정보가 준비되어 있는지 확인합니다.
+ 범위를 `FilterGroup`으로 지정할 시트의 시트 ID입니다. 이는 임베딩 SDK의 `getSheets` 메서드를 사용하여 얻을 수 있습니다.
+ 필터링하려는 데이터세트의 데이터세트 및 열 식별자입니다. 이는 [DescribeDashboardDefinition](https://docs.aws.amazon.com/APIReference/API_DescribeDashboardDefinition.html) API 작업을 통해 얻을 수 있습니다.

  사용하는 열 유형에 따라 임베디드 자산에 추가할 수 있는 필터 유형에 제한이 있을 수 있습니다. 필터 제한에 대한 자세한 정보는 [필터](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html)를 참조하세요.
+ 해당하는 경우 범위를 `FilterGroup`으로 지정할 시각적 객체의 시각적 ID입니다. 이는 임베딩 SDK의 `getSheetVisuals` 메서드를 사용하여 얻을 수 있습니다.

  `getSheetVisuals` 메서드 외에도 추가하는 `FilterGroup`의 범위는 현재 선택한 시트로만 지정할 수 있습니다.

이 기능을 사용하려면 Amazon Quick Sight 임베딩 SDK를 통해 애플리케이션에 대시보드 또는 시각적 객체가 이미 포함되어 있어야 합니다. Amazon Quick Sight 임베딩 SDK 사용에 대한 자세한 내용은 GitHub의 [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk)를 참조하세요.

## SDK 메서드 인터페이스
<a name="runtime-filtering-sdk-interface"></a>

**대시보드 임베딩 getter 메서드**

다음 테이블에서는 개발자가 사용할 수 있는 다양한 대시보드 임베딩 getter 메서드를 설명합니다.


| 방법 | 설명 | 
| --- | --- | 
|  `getFilterGroupsForSheet(sheetId: string) `  |  파라미터에 제공된 시트에 현재 범위가 지정된 모든 FilterGroups를 반환합니다.  | 
|  `getFilterGroupsForVisual(sheetId: string, visualId: string)`  |  파라미터에 제공된 시각적 객체로 범위가 지정된 모든 `FilterGroups`를 반환합니다.  | 

파라미터에 제공된 시트가 임베디드 대시보드에서 현재 선택한 시트가 아닌 경우 위 메서드는 오류를 반환합니다.

**시각적 객체 임베딩 getter 메서드**

다음 테이블에서는 개발자가 사용할 수 있는 다양한 시각적 객체 임베딩 getter 메서드를 설명합니다.


| 방법 | 설명 | 
| --- | --- | 
|  `getFilterGroups()`  |  현재 범위가 임베디드 시각적 객체로 지정된 모든 `FilterGroups`를 반환합니다.  | 

**Setter 메서드**

다음 테이블에서는 개발자가 대시보드 또는 시각적 객체 임베딩에 사용할 수 있는 다양한 setter 메서드를 설명합니다.


| 방법 | 설명 | 
| --- | --- | 
|  `addFilterGroups(filterGroups: FilterGroup[])`  |  제공된 **FilterGroups**를 임베디드 대시보드 또는 시각적 객체에 추가하고 적용합니다. 추가 성공 여부를 나타내는 `ResponseMessage`가 반환됩니다.  | 
|  `updateFilterGroups(filterGroups: FilterGroup[])`  |  파라미터에 제공된 `FilterGroup`과 동일한 `FilterGroupId`가 포함된 임베디드 환경에서 `FilterGroups`를 업데이트합니다. 업데이트 성공 여부를 나타내는 `ResponseMessage`가 반환됩니다.  | 
|  `removeFilterGroups(filterGroupsOrIds: FilterGroup[] \| string[])`  |  대시보드에서 제공된 FilterGroups를 제거하고 제거 시도가 성공 여부를 나타내는 `ResponseMessage`를 반환합니다.  | 

제공되는 `FilterGroup`은 현재 선택된 임베디드 시트 또는 시각적 객체로 범위가 지정되어야 합니다.

# Amazon Quick Sight 임베디드 대시보드 및 시각적 객체의 모양과 느낌 사용자 지정
<a name="embedding-runtime-theming"></a>

Amazon Quick Sight 임베딩 SDK(버전 2.5.0 이상)를 사용하여 런타임 시 임베디드 Amazon Quick Sight 대시보드 및 시각적 객체의 테마를 변경할 수 있습니다. 런타임 테마를 사용하면 서비스형 소프트웨어(SaaS) 애플리케이션을 Amazon Quick Sight 임베디드 자산과 더 쉽게 통합할 수 있습니다. 런타임 테마를 사용하면 임베디드 콘텐츠의 테마를 Amazon Quick Sight 자산이 임베디드되는 상위 애플리케이션의 테마와 동기화할 수 있습니다. 런타임 테마 지정을 사용하여 독자에 대한 사용자 지정 옵션을 추가할 수도 있습니다. 테마 지정 변경 사항은 초기화 시 또는 임베디드 대시보드 또는 시각적 객체의 수명 기간 동안 임베디드 자산에 적용할 수 있습니다.

테마에 대한 자세한 정보는 [Amazon Quick Sight에서 테마 사용](themes-in-quicksight.md) 섹션을 참조하세요. Amazon Quick Sight 임베딩 SDK 사용에 대한 자세한 내용은 GitHub의 [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk)를 참조하세요.

**사전 조건**

시작하기 전에 다음 사전 조건을 충족하는지 확인합니다.
+ Amazon Quick Sight 임베딩 SDK 버전 2.5.0 이상을 사용하고 있습니다.
+ 작업하려는 테마에 액세스할 수 있는 권한입니다. Amazon Quick Sight의 테마에 권한을 부여하려면 `UpdateThemePermissions` API를 호출하거나 Amazon Quick Sight 콘솔의 분석 편집기에서 테마 옆에 있는 **공유** 아이콘을 사용합니다.

## 용어 및 개념
<a name="runtime-theming-terminology"></a>

다음 용어는 임베디드 런타임 지정을 작업할 때 유용할 수 있습니다.
+ *테마* - 콘텐츠 표시 방식을 변경하는 여러 분석 및 대시보드에 적용할 수 있는 설정 모음입니다.
+ *ThemeConfiguration* – 이 구성 객체에는 테마의 모든 표시 속성이 포함됩니다.
+ *테마 재정의* - 콘텐츠 표시 방법의 일부 또는 모든 측면을 재정의하기 위해 활성 테마에 적용되는 `ThemeConfiguration` 객체입니다.
+ *테마 ARN * - Amazon Quick Sight 테마를 식별하는 Amazon 리소스 이름(ARN)입니다. 다음은 사용자 지정 테마 ARN의 예제입니다.

  `arn:aws:quicksight:region:account-id:theme/theme-id`

  Amazon Quick Sight에서 제공하는 스타터 테마에는 테마 ARN에 리전이 없습니다. 다음은 시작 테마 ARN의 예제입니다.

  `arn:aws:quicksight::aws:theme/CLASSIC`

## 설정
<a name="runtime-theming-setup"></a>

런타임 테마 지정 작업을 시작할 수 있도록 다음 정보가 준비되어 있는지 확인합니다.
+ 사용하려는 테마의 테마 ARN입니다. 기존 테마를 선택하거나 새로 만들 수 있습니다. Amazon Quick Sight 계정의 모든 테마 및 테마 ARNs 목록을 가져오려면 [ListThemes](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListThemes.html) API 작업을 호출합니다. 사전 설정된 Amazon Quick Sight 테마에 대한 자세한 내용은 섹션을 참조하세요[Amazon Quick APIs를 사용한 Amazon Quick 분석의 기본 테마 설정](customizing-quicksight-default-theme.md).
+ 등록된 사용자 임베딩을 사용하는 경우 사용자가 사용하려는 테마에 액세스할 수 있는지 확인합니다.

  익명 사용자 임베딩을 사용하는 경우 테마 ARN 목록을 `GenerateEmbedUrlForAnonymousUser` API의 `AuthorizedResourceArns` 파라미터에 전달합니다. 익명 사용자에게는 `AuthorizedResourceArns` 파라미터에 나열된 모든 테마에 대한 액세스 권한이 부여됩니다.

## SDK 메서드 인터페이스
<a name="runtime-theming-sdk-interface"></a>

**Setter 메서드**

다음 테이블에서는 개발자가 테마 지정에 사용할 수 있는 다양한 setter 메서드를 설명합니다.


| 방법 | 설명 | 
| --- | --- | 
|  `setTheme(themeArn: string)`  |  대시보드 또는 시각적 객체의 활성 테마를 다른 테마로 바꿉니다. 적용된 경우 테마 재정의가 제거됩니다. 테마에 액세스할 수 없거나 테마가 없는 경우 오류가 반환됩니다.  | 
|  `setThemeOverride(themeOverride: ThemeConfiguration)`  |  현재 활성 테마를 재정의하도록 동적 `ThemeConfiguration`을 설정합니다. 이는 이전에 설정한 테마 재정의를 대체합니다. 새 `ThemeConfiguration`에 제공되지 않은 모든 값은 현재 활성 테마의 값으로 기본 설정됩니다. 제공한 `ThemeConfiguration`이 유효하지 않은 경우 오류가 반환됩니다.  | 

## 테마로 임베디드 콘텐츠 초기화
<a name="runtime-theming-sdk-initialize"></a>

기본값이 아닌 테마로 임베디드 대시보드 또는 시각적 객체를 초기화하려면 `DashboardContentOptions` 또는 `VisualContentOptions` 파라미터에 `themeOptions` 객체를 정의하고 `themeOptions` 내에 `themeArn` 속성을 원하는 테마 ARN으로 설정합니다.

다음 예제에서는 `MIDNIGHT` 테마로 임베디드 대시보드를 초기화합니다.

```
import { createEmbeddingContext } from 'amazon-quicksight-embedding-sdk';

const embeddingContext = await createEmbeddingContext();

const {
    embedDashboard,
} = embeddingContext;

const frameOptions = {
    url: '<YOUR_EMBED_URL>',
    container: '#experience-container',
};
const contentOptions = {
    themeOptions: {
        themeArn: "arn:aws:quicksight::aws:theme/MIDNIGHT"
    }
};

// Embedding a dashboard experience
const embeddedDashboardExperience = await embedDashboard(frameOptions, contentOptions);
```

## 테마 재정의로 임베디드 콘텐츠 초기화
<a name="runtime-theming-runtime-initialize-override"></a>

개발자는 테마 재정의를 사용하여 런타임 시 임베디드 대시보드 또는 시각적 객체의 테마를 정의할 수 있습니다. 이렇게 하면 Amazon Quick Sight 내에서 테마를 사전 구성할 필요 없이 대시보드 또는 시각적 객체가 타사 애플리케이션에서 테마를 상속할 수 있습니다. 테마 재정의로 임베디드 대시보드 또는 시각적 객체를 초기화하려면 `DashboardContentOptions` 또는 `VisualContentOptions` 파라미터에서 `themeOptions` 내에 `themeOverride` 속성을 설정합니다. 다음 예제에서는 대시보드 테마의 글꼴을 기본 글꼴에서 `Amazon Ember`로 재정의합니다.

```
import { createEmbeddingContext } from 'amazon-quicksight-embedding-sdk';

const embeddingContext = await createEmbeddingContext();

const {
    embedDashboard,
} = embeddingContext;

const frameOptions = {
    url: '<YOUR_EMBED_URL>',
    container: '#experience-container',
};
const contentOptions = {
    themeOptions: {
        "themeOverride":{"Typography":{"FontFamilies":[{"FontFamily":"Comic Neue"}]}}
    }
};

// Embedding a dashboard experience
const embeddedDashboardExperience = await embedDashboard(frameOptions, contentOptions);
```

## 사전 로드된 테마로 임베디드 콘텐츠 초기화
<a name="runtime-theming-runtime-initialize-preloaded"></a>

개발자는 초기화 시 사전 로드되도록 대시보드 테마 세트를 구성할 수 있습니다. 이는 어두운 모드와 밝은 모드와 같은 다양한 뷰 간에 빠르게 전환할 때 가장 유용합니다. 임베디드 대시보드 또는 시각적 객체는 최대 5개의 사전 로드된 테마로 초기화할 수 있습니다. 사전 로드된 테마를 사용하려면 `DashboardContentOptions` 또는 `VisualContentOptions`에서 `preloadThemes` 속성을 최대 5개의 `themeArns` 배열로 설정합니다. 다음 예제에서는 `Midnight` 및 `Rainier` 시작 테마를 대시보드에 사전 로드합니다.

```
import { createEmbeddingContext } from 'amazon-quicksight-embedding-sdk';

const embeddingContext = await createEmbeddingContext();

const {
    embedDashboard,
} = embeddingContext;

const frameOptions = {
    url: '<YOUR_EMBED_URL>',
    container: '#experience-container',
};
const contentOptions = {
    themeOptions: {
        "preloadThemes": ["arn:aws:quicksight::aws:theme/RAINIER", "arn:aws:quicksight::aws:theme/MIDNIGHT"]
    }
};

// Embedding a dashboard experience
const embeddedDashboardExperience = await embedDashboard(frameOptions, contentOptions);
```

# Amazon Quick Sight 임베딩 SDK를 사용하여 임베디드 대시보드 보기에 대한 공유 가능한 링크 활성화
<a name="embedded-view-sharing"></a>

Amazon Quick Sight 개발자는 Amazon Quick Sight 임베딩 SDK(버전 2.8.0 이상)를 사용하여 임베디드 대시보드 독자가 임베디드 대시보드 보기에 대한 공유 가능한 링크를 수신하고 배포할 수 있습니다. 개발자는 대시보드 또는 콘솔 임베딩을 사용하여 Amazon Quick Sight 임베딩 SDK를 사용하여 캡슐화된 Amazon Quick Sight의 참조를 사용하여 애플리케이션 페이지에 대한 공유 가능한 링크를 생성할 수 있습니다. 그러면 Amazon Quick Sight 독자가 공유 가능한 링크를 동료에게 보낼 수 있습니다. 피어가 공유 링크에 액세스하면 임베디드 Amazon Quick Sight 대시보드가 포함된 애플리케이션의 페이지로 이동합니다. 또한 개발자는 익명 임베딩을 사용할 때 Amazon Quick Sight의 익명 독자를 위한 북마크로 사용할 수 있는 공유 가능한 대시보드 보기 링크를 생성하고 저장할 수 있습니다.

**사전 조건**

시작하기 전에 Amazon Quick Sight 임베딩 SDK 버전 2.8.0 이상을 사용하고 있는지 확인합니다.

**Topics**
+ [

# Amazon Quick Sight 임베디드 분석을 위한 `SharedView` 기능 구성 활성화
](embedded-view-sharing-set-up.md)
+ [

# Amazon Quick Sight `createSharedView` API를 사용하여 공유 뷰 생성
](embedded-view-sharing-sdk-create.md)
+ [

# 공유 Amazon Quick Sight 보기 사용
](embedded-view-sharing-sdk-consume.md)

# Amazon Quick Sight 임베디드 분석을 위한 `SharedView` 기능 구성 활성화
<a name="embedded-view-sharing-set-up"></a>

Amazon Quick Sight API를 사용하여 임베디드 인스턴스를 생성할 때 아래 예제`true`와 같이 `FeatureConfigurations`페이로드`SharedView`의 값을 로 설정합니다.는 임베디드 대시보드에 액세스하는 등록된 사용자의 `StatePersistence` 구성을 `SharedView` 재정의합니다. 대시보드 사용자가 `StatePersistence`에 비활성화되고 `SharedView`에 활성화된 경우 해당 상태는 유지됩니다.

```
const generateNewEmbedUrl = async () => {
    const generateUrlPayload = {
        experienceConfiguration: {
            QuickSightConsole: {
            FeatureConfigurations: {
                "SharedView": { 
                    "Enabled": true
                 },
            },
        },
    }
    const result: GenerateEmbedUrlResult = await generateEmbedUrlForRegisteredUser(generateUrlPayload);
    return result.url;
};
```

# Amazon Quick Sight `createSharedView` API를 사용하여 공유 뷰 생성
<a name="embedded-view-sharing-sdk-create"></a>

임베딩 SDK를 버전 2.8.0 이상으로 업데이트한 후 `createSharedView` API를 사용하여 새 공유 뷰를 생성합니다. 작업이 반환하는 `sharedViewId` 및 `dashboardId`를 기록합니다. 아래 예제에서는 새 공유 뷰를 생성합니다.

```
const response = await embeddingFrame.createSharedView();
const sharedViewId = response.message.sharedViewId;
const dashboardId = response.message.dashboardId;
```

`createSharedView`는 사용자가 대시보드를 볼 때만 호출할 수 있습니다. 콘솔별 공유 뷰를 생성하려면 `createSharedView` 작업을 활성화하기 전에 사용자가 대시보드 페이지에 있는지 확인합니다. 아래 예제에 표시된 대로 `PAGE_NAVIGATION` 이벤트로 이 작업을 수행할 수 있습니다.

```
const contentOptions = {
    onMessage: async (messageEvent, metadata) => {
    switch (messageEvent.eventName) {
            case 'CONTENT_LOADED': {
                console.log("Do something when the embedded experience is fully loaded.");
                break;
            }
            case 'ERROR_OCCURRED': {
                console.log("Do something when the embedded experience fails loading.");
                break;
            }
            case 'PAGE_NAVIGATION': {
                setPageType(messageEvent.message.pageType); 
                if (messageEvent.message.pageType === 'DASHBOARD') {
                    setShareEnabled(true);
                    } else {
                    setShareEnabled(false);
                }
                break;
            }
        }
    }
};
```

# 공유 Amazon Quick Sight 보기 사용
<a name="embedded-view-sharing-sdk-consume"></a>

새 공유 뷰를 생성한 후 임베딩 SDK를 사용하여 공유 뷰를 다른 사용자에게 사용 가능하게 합니다. 아래 예제에서는 Amazon Quick Sight의 임베디드 대시보드에 대한 소모성 공유 보기를 설정합니다.

------
#### [ With an appended URL ]

임베드 URL에 `sharedViewId`를 추가하고 ` /views/{viewId}`에서 이 URL을 사용자에게 노출합니다. 사용자는 이 URL을 사용하여 공유 뷰로 이동할 수 있습니다.

```
const response = await dashboardFrame.createSharedView();
const newEmbedUrl = await generateNewEmbedUrl();
const formattedUrl = new URL(newEmbedUrl);
formattedUrl.pathname = formattedUrl.pathname.concat('/views/' + response.message.sharedViewId);
const baseUrl = formattedUrl.href;
alert("Click to view this QuickSight shared view", baseUrl);
```

------
#### [ With the contentOptions SDK ]

`viewId`를 `contentOptions`에 전달하여 지정된 `viewId`에 대한 환경을 엽니다.

```
const contentOptions = {
    toolbarOptions: {
        ...
    },
    viewId: sharedViewId,
};

const embeddedDashboard = await embeddingContext.embedDashboard(
    {container: containerRef.current},
    contentOptions
);
```

------
#### [ With the InitialPath property ]

```
const shareView = async() => {
    const returnValue = await consoleFrame.createSharedView();
    const {dashboardId, sharedViewId} = returnValue.message;
    const newEmbedUrl = await generateNewEmbedUrl(`/dashboards/${dashboardId}/views/${sharedViewId}`);
    setShareUrl(newEmbedUrl);
};

const generateNewEmbedUrl = async (initialPath) => {
    const generateUrlPayload = {
        experienceConfiguration: {
            QuickSightConsole: {
            InitialPath: initialPath,
            FeatureConfigurations: {
                "SharedView": { 
                    "Enabled": true
                 },
            },
        },
    }
    const result: GenerateEmbedUrlResult = await generateEmbedUrlForRegisteredUser(generateUrlPayload);
    return result.url;
};
```

------

# 원클릭 임베드 코드를 사용하여 Amazon Quick Sight 시각적 객체 및 대시보드 임베딩
<a name="1-click-embedding"></a>

임베드 코드를 사용하여 시각적 객체 또는 대시보드를 애플리케이션에 포함할 수 있습니다. 대시보드를 공유하거나 Amazon Quick Sight의 **시각적 객체 임베드** 메뉴에서이 코드를 얻을 수 있습니다.

등록된 사용자를 위해 내부 애플리케이션에 시각적 객체 또는 대시보드를 포함할 수 있습니다. 또는 Amazon Quick Sight 콘솔에서 퍼블릭 공유를 켤 수 있습니다. 이렇게 하면 인터넷상의 모든 사용자가 퍼블릭 애플리케이션, Wiki 또는 포털에 포함된 공유 영상 또는 대시보드에 액세스할 수 있습니다.

다음에는 원클릭 시각적 객체 또는 대시보드 임베드 코드를 사용하여 시각적 객체와 대시보드를 임베드하는 방법에 대한 설명이 나와 있습니다.

**Topics**
+ [

# 원클릭 임베드 코드를 사용하여 등록된 사용자를 위한 Amazon Quick Sight 시각적 객체 및 대시보드 임베딩
](embedded-analytics-1-click.md)
+ [

# 원클릭 임베드 코드를 사용하여 익명 사용자를 위한 Amazon Quick Sight 시각적 객체 및 대시보드 임베딩
](embedded-analytics-1-click-public.md)

# 원클릭 임베드 코드를 사용하여 등록된 사용자를 위한 Amazon Quick Sight 시각적 객체 및 대시보드 임베딩
<a name="embedded-analytics-1-click"></a>


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

Amazon Quick Sight 계정의 등록된 사용자를 위해 내부 애플리케이션에 시각적 객체 또는 대시보드를 포함할 수 있습니다. 대시보드를 공유할 때 얻는 임베드 코드를 사용하거나 Amazon Quick Sight의 **임베드 시각적** 객체 메뉴에서 임베드 코드를 사용하면 됩니다. 임베드 코드를 생성하기 위해 Amazon Quick Sight 임베딩 API를 실행할 필요가 없습니다. Amazon Quick Sight에서 임베드 코드를 복사하여 내부 애플리케이션의 HTML 코드에 붙여 넣을 수 있습니다.

내장하려는 대시보드에 액세스할 수 있거나 내장하려는 시각적 객체가 있는 사용자 및 그룹(또는 Amazon Quick Sight 계정의 모든 사용자)이 내부 애플리케이션에 액세스할 수 있는 경우 자격 증명으로 Amazon Quick Sight 계정에 로그인하라는 메시지가 표시됩니다. 인증을 받은 사용자는 내부 페이지에서 시각적 요소나 대시보드에 액세스할 수 있습니다. SSO(Single Sign-On)를 사용하도록 설정한 경우 사용자에게 다시 로그인하라는 메시지가 표시되지 않습니다.

다음에는 원클릭 시각적 객체 또는 대시보드 임베드 코드를 사용하여 시각적 객체와 대시보드를 임베드하는 방법에 대한 설명이 나와 있습니다.

## 시작하기 전에
<a name="embedded-analytics-1-click-prerequisites"></a>

시작하기 전에 다음을 확인하세요.
+ 인터넷 브라우저 설정에는 팝업과 iframe 간의 통신을 허용하는 다음 중 하나가 포함되어 있습니다.
  + Mozilla Broadcast Channel API가 기본적으로 지원됩니다. 자세한 내용은 Mozilla 설명서의 [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API)를 참조하세요.
  + IndexedDB 지원
  + LocalStorage 지원
+ 인터넷 브라우저의 "모든 쿠키 차단" 설정이 꺼져 있습니다.

## 1단계: 대시보드 액세스 권한 부여
<a name="embedded-analystics-1-click-share"></a>

사용자가 임베디드 대시보드에 액세스할 수 있도록 하려면 해당 대시보드를 볼 수 있는 액세스 권한을 부여하세요. 개별 사용자 및 그룹에 대시보드 액세스 권한을 부여하거나, 계정의 모든 사용자에게 액세스 권한을 부여할 수 있습니다. 시각적 권한은 대시보드 수준에서 결정됩니다. 임베디드 시각적 개체에 대한 액세스 권한을 부여하려면 해당 시각적 개체가 속한 대시보드에 대한 액세스 권한을 부여하세요. 자세한 내용은 [대시보드 액세스 권한 부여](share-a-dashboard.md) 단원을 참조하십시오.

## 2단계: 시각적 객체나 대시보드를 삽입하려는 도메인을 허용 목록에 추가
<a name="embedded-analytics-1-click-allow-list"></a>

내부 애플리케이션에 시각적 객체와 대시보드를 포함하려면 임베딩하려는 도메인이 Amazon Quick Sight 계정에 허용 목록에 있는지 확인합니다. 자세한 내용은 [정적 도메인 리스팅 허용](manage-domains.md#embedding-static) 단원을 참조하십시오.

## 3단계: 임베디드 코드 가져오기
<a name="embedded-analytics-1-click-code"></a>

다음 절차에 따라 시각적 객체 코드 또는 대시보드 임베디드 코드를 가져오십시오.

**대시보드 임베드 코드 가져오기**

1. Amazon Quick Sight에서 게시된 대시보드를 열고 오른쪽 상단에서 **공유**를 선택합니다. 그런 다음 **대시보드 공유**를 선택합니다.

1. 열린 **대시보드 공유** 페이지에서 왼쪽 상단의 **임베드 코드 복사**를 선택합니다.

   임베드 코드는 클립보드에 복사되며 다음과 유사합니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

   ```
   <iframe
           width="960"
           height="720"
           src="https://quicksightdomain/sn/embed/share/accounts/accountid/dashboards/dashboardid?directory_alias=account_directory_alias">
       </iframe>
   ```

**시각적 객체 임베드 코드 가져오기**

1. Amazon Quick Sight에서 게시된 대시보드를 열고 임베드하려는 시각적 객체를 선택합니다. 그런 다음 시각적 객체의 오른쪽 상단에서 시각적 객체 메뉴를 열어서 **시각적 객체 임베드**를 선택합니다.

1. 열리는 **시각적 객체 임베드** 창에서 **코드 복사**를 선택합니다.

   임베드 코드는 클립보드에 복사되며 다음과 유사합니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

   ```
   <iframe
           width="600"
           height="400"
           src="https://quicksightdomain/sn/embed/share/accounts/111122223333/dashboards/DASHBOARDID/sheets/SHEETID>/visuals/VISUALID">
       </iframe>
   ```

## 4단계: 코드를 내부 애플리케이션의 HTML 페이지에 붙여넣기
<a name="embedded-analytics-1-click-html"></a>

다음 절차를 사용하여 임베드 코드를 내부 애플리케이션의 HTML 페이지에 붙여 넣습니다.

**내부 응용 프로그램의 HTML 페이지에 코드 붙여 넣기**
+ 대시보드를 임베드하려는 페이지의 HTML 코드를 열고 임베드 코드를 붙여 넣습니다.

  다음 예는 임베디드 대시보드에서 어떤 모양을 갖추게 되는지 보여줍니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

  ```
  <!DOCTYPE html>
      <html>
      <body>
  
      <h2>Example.com - Employee Portal</h2>
      <h3>Current shipment stats</h3>
          <iframe
          width="960"
          height="720"
          src="https://quicksightdomain/sn/embed/share/accounts/accountid/dashboards/dashboardid?directory_alias=account_directory_alias">
      </iframe>
  
      </body>
      </html>
  ```

  다음 예는 임베디드 시각적 객체에서 어떤 모양을 갖추게 되는지 보여줍니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

  ```
  <!DOCTYPE html>
      <html>
      <body>
  
      <h2>Example.com - Employee Portal</h2>
      <h3>Current shipment stats</h3>
          <iframe
          width="600"
          height="400"
          src="https://quicksightdomain/sn/embed/share/accounts/111122223333/dashboards/DASHBOARDID/sheets/SHEETID>/visuals/VISUALID?directory_alias=account_directory_alias">
      </iframe>
  
      </body>
      </html>
  ```

예를 들어 내부 Google Sites 도구 페이지에 시각적 객체 또는 대시보드를 임베드하고 싶다고 가정해 보겠습니다. Google Sites에서 페이지를 열고 임베드 위젯에 임베드 코드를 붙여 넣을 수 있습니다.

시각적 객체나 대시보드를 내부 Microsoft SharePoint 사이트에 포함하려는 경우, 새 페이지를 만든 다음 임베드 웹 파트에 임베드 코드를 붙여넣을 수 있습니다.

# 원클릭 임베드 코드를 사용하여 익명 사용자를 위한 Amazon Quick Sight 시각적 객체 및 대시보드 임베딩
<a name="embedded-analytics-1-click-public"></a>


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

Amazon Quick Sight에서 시각적 객체 또는 대시보드를 공유할 때 얻는 임베드 코드를 사용하여 퍼블릭 사이트에 시각적 객체 또는 대시보드를 임베드할 수 있습니다. Amazon Quick Sight 콘솔을 사용하여 퍼블릭 공유를 활성화하고 인터넷상의 모든 사용자에게 공유 시각적 객체 또는 대시보드에 대한 액세스 권한을 자동으로 부여할 수도 있습니다.

다음에서 시각적 객체 또는 대시보드에 대한 퍼블릭 공유를 켜고 인터넷상의 모든 사용자가 볼 수 있도록 시각적 또는 대시보드를 포함하는 방법을 확인할 수 있습니다. 두 경우 모두 원클릭 임베드 코드를 사용하면 됩니다.

## 시작하기 전에
<a name="embedded-analytics-1-click-prerequisites"></a>

시작하기 전에 다음을 확인하세요.
+ 인터넷 브라우저 설정에는 팝업과 iframe 간의 통신을 허용하는 다음 중 하나가 포함되어 있습니다.
  + Mozilla Broadcast Channel API가 기본적으로 지원됩니다. 자세한 내용은 Mozilla 설명서의 [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API)를 참조하세요.
  + IndexedDB 지원
  + LocalStorage 지원
+ 인터넷 브라우저의 "모든 쿠키 차단" 설정이 꺼져 있습니다.

## 1단계: 대시보드에 대한 퍼블릭 액세스 켜기
<a name="embedded-analytics-1-click-step-1"></a>

인터넷상의 모든 사용자가 임베디드 시각적 객체나 대시보드에 액세스할 수 있게 하려면 먼저 대시보드의 퍼블릭 액세스를 켜세요. 시각적 권한은 대시보드 수준에서 결정됩니다. 임베디드 시각적 개체에 대한 액세스 권한을 부여하려면 해당 시각적 개체가 속한 대시보드에 대한 액세스 권한을 부여하세요. 자세한 내용은 [인터넷상의 모든 사용자에게 Amazon Quick Sight 대시보드에 대한 액세스 권한 부여](share-a-dashboard-grant-access-anyone.md) 단원을 참조하십시오.

## 2단계: 시각적 객체나 대시보드를 삽입하려는 도메인을 허용 목록에 추가
<a name="embedded-analytics-1-click-step-2"></a>

퍼블릭 애플리케이션, Wiki 또는 포털에 시각적 객체와 대시보드를 포함하려면 이를 포함하려는 도메인이 Amazon Quick Sight 계정의 허용 목록에 있는지 확인합니다.

## 3단계: 임베디드 코드 가져오기
<a name="embedded-analytics-1-click-step-3"></a>

다음 절차에 따라 시각적 객체 코드 또는 대시보드 임베디드 코드를 가져오십시오.

**대시보드 임베드 코드 가져오기**

1. Amazon Quick Sight에서 게시된 대시보드를 열고 오른쪽 상단에서 **공유**를 선택합니다. 그런 다음 **대시보드 공유**를 선택합니다.

1. 열린 **대시보드 공유** 페이지에서 왼쪽 상단의 **임베드 코드 복사**를 선택합니다.

   임베드 코드는 클립보드에 복사되며 다음과 유사합니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

   ```
   <iframe
           width="960"
           height="720"
           src="https://quicksightdomain/sn/
               embed/share/accounts/accountid/dashboards/dashboardid">
       </iframe>
   ```

**시각적 객체 임베드 코드 가져오기**

1. Amazon Quick Sight에서 게시된 대시보드를 열고 임베드하려는 시각적 객체를 선택합니다. 그런 다음 시각적 객체의 오른쪽 상단에 있는 시각적 메뉴를 열고 **시각적 객체 임베드을 선택합니다.**

1. 열리는 **시각적 객체 임베드** 창에서 **코드 복사**를 선택합니다.

   임베드 코드는 클립보드에 복사되며 다음과 유사합니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

   ```
   <iframe
           width="600"
           height="400"
           src="https://quicksightdomain/sn/embed/share/accounts/111122223333/dashboards/DASHBOARDID/sheets/SHEETID>/visuals/VISUALID">
       </iframe>
   ```

## 4단계: 임베드 코드를 HTML 페이지, Wiki 페이지 또는 포털에 붙여넣기
<a name="embedded-analytics-1-click-step-4"></a>

다음 절차에 따라 임베드 코드를 HTML 페이지, Wiki 페이지 또는 포털에 붙여넣을 수 있습니다.

**임베드 코드 붙여넣기**
+ 시각적 객체나 대시보드를 임베드하려는 위치의 HTML 코드를 열고 임베드 코드를 붙여넣습니다.

  다음 예는 임베디드 대시보드에서 어떤 모양을 갖추게 되는지 보여줍니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

  ```
  <!DOCTYPE html>
      <html>
      <body>
  
      <h2>Example.com - Employee Portal</h2>
      <h3>Current shipment stats</h3>
          <iframe
          width="960"
          height="720"
          src="https://quicksightdomain/sn/
              embed/share/accounts/accountid/dashboards/dashboardid">
      </iframe>
  
      </body>
      </html>
  ```

  다음 예는 임베디드 시각적 객체에서 어떤 모양을 갖추게 되는지 보여줍니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

  ```
  <!DOCTYPE html>
      <html>
      <body>
  
      <h2>Example.com - Employee Portal</h2>
      <h3>Current shipment stats</h3>
          <iframe
          width="600"
          height="400"
          src="https://quicksightdomain/sn/embed/share/accounts/111122223333/dashboards/DASHBOARDID/sheets/SHEETID>/visuals/VISUALID">
      </iframe>
  
      </body>
      </html>
  ```

공개 애플리케이션을 Google Sites에 구축한 경우 Google Sites에서 페이지를 연 다음 임베드 위젯을 사용하여 임베드 코드를 붙여넣습니다.

Google 사이트에 임베드할 때 Amazon Quick Sight의 다음 도메인이 허용 목록에 있는지 확인합니다.
+ `https://googleusercontent.com` (하위 도메인 켜기)
+ `https://www.gstatic.com`
+ `https://sites.google.com`

시각적 객체 또는 대시보드를 애플리케이션에 포함한 후에는, 애플리케이션에 액세스할 수 있는 모든 사용자가 임베디드 시각적 객체 또는 대시보드에 액세스할 수 있습니다. 모든 사람과 공유되는 대시보드를 업데이트하려면 [공개적으로 공유된 대시보드 업데이트](share-a-dashboard-grant-access-anyone-update.md)을 참조하세요. 퍼블릭 공유를 끄려면 [퍼블릭 공유 설정 끄기](share-a-dashboard-grant-access-anyone-no-share.md)을(를) 참조하세요.

퍼블릭 공유를 끄면 공용 애플리케이션에 포함했거나 링크를 통해 공유한 대시보드 또는 대시보드에 인터넷을 사용하는 누구도 액세스할 수 없습니다. 다음에 누군가가 인터넷에서 이러한 대시보드를 보려고 하면 해당 대시보드를 볼 수 있는 액세스 권한이 없다는 메시지를 받게 됩니다.

# Amazon Quick Sight APIs를 사용한 임베딩
<a name="embedded-analytics-api"></a>


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


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

Amazon Quick Sight APIs를 사용하여 분석을 임베딩하는 실제 프로세스에는 몇 가지 단계만 포함됩니다.

시작하기 전에 다음 도구가 있는지 확인하세요.
+  AWS SDK를 사용하여 API 호출을 수행할 애플리케이션에서 사용하는 호출자 자격 증명에 필요한 IAM 권한을 설정합니다. 예를 들어, `quicksight:GenerateEmbedUrlForAnonymousUser` 또는 `quicksight:GenerateEmbedUrlForRegisteredUser` 작업을 허용할 권한을 부여합니다.
+ 등록된 사용자를 위해 임베드하려면 Amazon Quick Sight 자산을 사용자와 미리 공유합니다. 신규 인증 사용자의 경우 자산에 대한 액세스 권한을 부여하는 방법을 숙지하세요. 이렇게 하는 한 가지 방법은 Amazon Quick Sight 폴더에 모든 자산을 추가하는 것입니다. Amazon Quick Sight API를 사용하려면 `DescribeDashboardPermissions` 및 `UpdateDashboardPermissions` API 작업을 사용합니다. 자세한 내용은 Amazon Quick API 참조의 [DescribeDashboardPermissions](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeDashboardPermissions.html) 또는 [UpdateDashboardPermissions](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateDashboardPermissions.html)를 참조하세요. ** 네임스페이스 또는 그룹의 모든 사용자와 대시보드를 공유하려는 경우, 대시보드를 `namespace` 또는 `group`와(과) 공유할 수 있습니다.
+ 대시보드를 임베딩하는 경우, 포함하려는 대시보드의 ID가 있어야 합니다. 대시보드 ID는 대시보드 URL의 코드입니다. 대시보드 URL에서도 가져올 수 있습니다.
+ Amazon Quick Sight 관리자는 Amazon Quick Sight 분석을 포함할 도메인을 명시적으로 활성화해야 합니다. 프로필 메뉴에서 **Amazon Quick Sight, 도메인 및 임베딩 관리를** 사용하거나 `GenerateEmbedUrlForAnonymousUser` 또는 `GenerateEmbedUrlForRegisteredUser` API 호출의 `AllowedDomains` 파라미터를 사용하여이 작업을 수행할 수 있습니다. **** 

  이 옵션은 Amazon Quick Sight 관리자에게만 표시됩니다. 하위 도메인을 도메인의 일부로 추가할 수도 있습니다. 자세한 내용은 [Amazon Quick API를 사용하여 런타임 시 도메인 나열 허용](manage-domains.md#embedding-run-time) 단원을 참조하십시오.

  정적 허용 목록의 모든 도메인(예: 개발, 스테이징, 프로덕션)이 명시적으로 허용되고 HTTPS를 사용해야 합니다. 최대 100개의 도메인을 허용 목록에 추가할 수 있습니다. Amazon Quick Sight API 작업을 사용하여 런타임에 도메인을 추가할 수 있습니다.

모든 사전 요구 사항이 완료되면 Amazon Quick Sight 임베딩에는 다음 단계가 포함되며, 이에 대해서는 나중에 자세히 설명합니다.

1. 인증을 위해서는 애플리케이션 서버를 사용하여 사용자를 인증하세요. 서버에서 인증한 후 필요한 AWS SDK를 사용하여 임베디드 대시보드 URL을 생성합니다.

1. 웹 포털 또는 애플리케이션에 생성된 URL을 사용하여 Amazon Quick Sight를 포함합니다. 이 프로세스를 간소화하기 위해 [NPMJS](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) 및 [GitHub](https://github.com/awslabs/amazon-quicksight-embedding-sdk)에서 사용할 수 있는 Amazon Quick Sight 임베딩 SDK를 사용할 수 있습니다. 이 사용자 지정 JavaScript SDK는 Amazon Quick Sight를 애플리케이션 페이지에 효율적으로 통합하고, 기본값을 설정하고, 제어를 연결하고, 콜백을 가져오고, 오류를 처리할 수 있도록 설계되었습니다.

 AWS CloudTrail 감사 로그를 사용하여 임베디드 대시보드 수, 임베디드 경험 사용자 및 액세스 속도에 대한 정보를 가져올 수 있습니다.

**Topics**
+ [

# Amazon Quick Sight API를 사용하여 Amazon Quick Sight 대시보드 임베딩
](embedding-dashboards.md)
+ [

# Amazon Quick Sight APIs를 사용하여 Amazon Quick Sight 시각적 객체 임베딩
](embedding-visuals.md)
+ [

# 등록된 사용자를 위한 Amazon Quick Sight 콘솔의 전체 기능 임베딩
](embedded-analytics-full-console-for-authenticated-users.md)
+ [

# Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩
](embedding-gen-bi.md)
+ [

# Amazon Quick Sight Q 검색 창 임베딩(클래식)
](embedding-quicksight-q.md)
+ [

# GetDashboardEmbedURL 및 GetSessionEmbedURL API 작업을 사용한 분석 기능 임베딩
](embedded-analytics-deprecated.md)

# Amazon Quick Sight API를 사용하여 Amazon Quick Sight 대시보드 임베딩
<a name="embedding-dashboards"></a>

다음 주제를 사용하여 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 대시보드 임베딩
<a name="embedded-analytics-dashboards-for-authenticated-users"></a>

**중요**  
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단계: 권한 설정
<a name="embedded-dashboards-for-authenticated-users-step-1"></a>

다음 단원에서 백엔드 애플리케이션 또는 웹 서버의 권한을 설정하는 방법을 알아봅니다. 이 작업을 수행하려면 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 생성
<a name="embedded-dashboards-for-authenticated-users-step-2"></a>

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

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

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

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

### Java
<a name="embedded-dashboards-for-authenticated-users-java"></a>

```
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
<a name="embedded-dashboards-for-authenticated-users-js"></a>

```
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
<a name="embedded-dashboards-for-authenticated-users-py"></a>

```
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
<a name="embedded-dashboards-for-authenticated-users-node"></a>

다음 예제는 앱 서버에서 임베디드 대시보드에 대한 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
<a name="embedded-dashboards-for-authenticated-users-cs"></a>

다음 예제는 앱 서버에서 임베디드 대시보드에 대한 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
<a name="embedded-dashboards-for-authenticated-users-cli"></a>

역할을 수임하려면 다음 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 임베드
<a name="embedded-dashboards-for-authenticated-users-step-3"></a>

다음 섹션에서는 [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
<a name="embedded-dashboards-for-authenticated-users-sdkv2"></a>

```
<!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
<a name="embedded-dashboards-for-authenticated-users-sdkv1"></a>

```
<!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 대시보드 임베딩
<a name="embedded-analytics-dashboards-for-everyone"></a>

**중요**  
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단계: 권한 설정
<a name="embedded-analytics-dashboards-with-anonymous-users-step-1"></a>


|  | 
| --- |
|  적용 대상:  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 생성
<a name="embedded-analytics-dashboards-with-anonymous-users-step-2"></a>


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


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

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

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

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

### Java
<a name="embedded-analytics-dashboards-with-anonymous-users-java"></a>

```
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
<a name="embedded-analytics-dashboards-with-anonymous-users-js"></a>

```
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
<a name="embedded-analytics-dashboards-with-anonymous-users-py"></a>

```
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
<a name="embedded-analytics-dashboards-with-anonymous-users-node"></a>

다음 예제는 앱 서버에서 임베디드 대시보드에 대한 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
<a name="embedded-analytics-dashboards-with-anonymous-users-cs"></a>

다음 예제는 앱 서버에서 임베디드 대시보드에 대한 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
<a name="embedded-analytics-dashboards-with-anonymous-users-cli"></a>

역할을 수임하려면 다음 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 임베드
<a name="embedded-analytics-dashboards-with-anonymous-users-step-3"></a>


|  | 
| --- |
|  적용 대상:  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
<a name="embedded-analytics-dashboards-with-anonymous-users-sdkv2"></a>

```
<!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
<a name="embedded-analytics-dashboards-with-anonymous-users-sdkv1"></a>

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

# 임베디드 대시보드에서 실행 요약 활성화
<a name="embedded-analytics-genbi-executive-summaries-dashboard"></a>


|  | 
| --- |
|  적용 대상:  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
         }
     };
     ```

# Amazon Quick Sight APIs를 사용하여 Amazon Quick Sight 시각적 객체 임베딩
<a name="embedding-visuals"></a>

Amazon Quick Sight API를 사용하여 게시된 대시보드의 일부인 개별 시각적 객체를 애플리케이션에 포함할 수 있습니다.

**Topics**
+ [

# 등록된 사용자를 위한 Amazon Quick Sight 시각적 객체 임베딩
](embedded-analytics-visuals-for-authenticated-users.md)
+ [

# 익명(미등록) 사용자를 위한 Amazon Quick Sight 시각적 객체 임베딩
](embedded-analytics-visuals-for-everyone.md)

# 등록된 사용자를 위한 Amazon Quick Sight 시각적 객체 임베딩
<a name="embedded-analytics-visuals-for-authenticated-users"></a>


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


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

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

**Topics**
+ [

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

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

## 3단계: 시각적 객체 URL 임베드
](#embedded-visuals-for-authenticated-users-step-3)

## 1단계: 권한 설정
<a name="embedded-visuals-for-authenticated-users-step-1"></a>

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

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

IAM 정책에 개발자가 `GenerateEmbedUrlForAnonymousUser` API 작업의 `AllowedDomains` 파라미터에 나열할 수 있는 도메인을 제한하는 조건을 만들 수 있습니다. `AllowedDomains` 파라미터는 선택 파라미터입니다. 개발자는 **Amazon Quick Sight 관리** 메뉴에 구성된 정적 도메인을 재정의할 수 있는 옵션을 제공합니다. 대신 생성된 URL에 액세스할 수 있는 도메인 또는 하위 도메인을 최대 세 개까지 나열할 수 있습니다. 그러면 만든 웹 사이트에 이 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 생성
<a name="embedded-visuals-for-authenticated-users-step-2"></a>

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

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

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

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

### Java
<a name="embedded-visuals-for-authenticated-users-java"></a>

```
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.DashboardVisualId;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserRequest;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserResult;
import com.amazonaws.services.quicksight.model.RegisteredUserDashboardVisualEmbeddingConfiguration;
import com.amazonaws.services.quicksight.model.RegisteredUserEmbeddingExperienceConfiguration;

import java.util.List;

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

    private final AmazonQuickSight quickSightClient;

    public GenerateEmbedUrlForRegisteredUserTest() {
        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 getEmbedUrl(
            final String accountId, // AWS Account ID
            final String dashboardId, // Dashboard ID of the dashboard to embed
            final String sheetId, // Sheet ID of the sheet to embed
            final String visualId, // Visual ID of the visual to embed
            final List<String> allowedDomains, // Runtime allowed domains for embedding
            final String userArn // Registered user arn of the user that you want to provide embedded visual. Refer to Get Embed Url section in developer portal to find out how to get user arn for a QuickSight user.
    ) throws Exception {
        final DashboardVisualId dashboardVisual = new DashboardVisualId()
            .withDashboardId(dashboardId)
            .withSheetId(sheetId)
            .withVisualId(visualId);
        final RegisteredUserDashboardVisualEmbeddingConfiguration registeredUserDashboardVisualEmbeddingConfiguration
            = new RegisteredUserDashboardVisualEmbeddingConfiguration()
                .withInitialDashboardVisualId(dashboardVisual);
        final RegisteredUserEmbeddingExperienceConfiguration registeredUserEmbeddingExperienceConfiguration
            = new RegisteredUserEmbeddingExperienceConfiguration()
                .withDashboardVisual(registeredUserDashboardVisualEmbeddingConfiguration);
        final GenerateEmbedUrlForRegisteredUserRequest generateEmbedUrlForRegisteredUserRequest
            = new GenerateEmbedUrlForRegisteredUserRequest()
                .withAwsAccountId(accountId)
                .withUserArn(userArn)
                .withExperienceConfiguration(registeredUserEmbeddingExperienceConfiguration)
                .withAllowedDomains(allowedDomains);

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

### JavaScript
<a name="embedded-visuals-for-authenticated-users-js"></a>

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

function generateEmbedUrlForRegisteredUser(
    accountId, // Your AWS account ID
    dashboardId, // Dashboard ID to which the constructed URL points
    sheetId, // Sheet ID to which the constructed URL points
    visualId, // Visual ID to which the constructed URL points
    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": {
                    "DashboardVisual": {
                        "InitialDashboardVisualId": {
                            "DashboardId": dashboardId,
                            "SheetId": sheetId,
                            "VisualId": visualId
                        }
                    }
                },
                "UserArn": userArn,
                "AllowedDomains": allowedDomains,
                "SessionLifetimeInMinutes": 600
            };

            const quicksightGetDashboard = 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
                }
            });

            quicksightGetDashboard.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
<a name="embedded-visuals-for-authenticated-users-py"></a>

```
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
# sheetId: SHEET ID to embed from the dashboard 
# visualId: Id for the Visual you want to embedded from the dashboard sheet. 
# 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, sheetId, visualId, 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 = {
                    'DashboardVisual': {
                        'InitialDashboardVisualId': {
                            'DashboardId': dashboardId,
                            'SheetId': sheetId,
                            'VisualId': visualId
                        }
                    },
                },
                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
<a name="embedded-visuals-for-authenticated-users-node"></a>

다음 예제는 앱 서버에서 임베디드 대시보드에 대한 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': { 
        'DashboardVisual': {
            'InitialDashboardVisualId': {
                'DashboardId': 'dashboard_id',
                'SheetId': 'sheet_id',
                'VisualId': 'visual_id'
            }
        }
    },
    '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/sheets/12345/visuals/67890...",
        "RequestId": "7bee030e-f191-45c4-97fe-d9faf0e03713"
    }
```

### .NET/C\$1
<a name="embedded-visuals-for-authenticated-users-cs"></a>

다음 예제는 앱 서버에서 임베디드 대시보드에 대한 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
            {
                DashboardVisualId dashboardVisual = new DashboardVisualId
                {
                    DashboardId = "dashboard_id",
                    SheetId = "sheet_id",
                    VisualId = "visual_id"
                };

                RegisteredUserDashboardVisualEmbeddingConfiguration registeredUserDashboardVisualEmbeddingConfiguration
                    = new RegisteredUserDashboardVisualEmbeddingConfiguration
                    {
                        InitialDashboardVisualId = dashboardVisual                        
                    };               
                    
                RegisteredUserEmbeddingExperienceConfiguration registeredUserEmbeddingExperienceConfiguration
                    = new RegisteredUserEmbeddingExperienceConfiguration
                    {
                        DashboardVisual = registeredUserDashboardVisualEmbeddingConfiguration
                    };
                    
                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
<a name="embedded-visuals-for-authenticated-users-cli"></a>

역할을 수임하려면 다음 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_visual_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_visual_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_visual_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_visual_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 'DashboardVisual={InitialDashboardVisualId={DashboardId=dashboard_id,SheetId=sheet_id,VisualId=visual_id}}'
```

이 작업의 사용에 대한 자세한 내용은 [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 임베드
<a name="embedded-visuals-for-authenticated-users-step-3"></a>

다음 섹션에서는 [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`의 응답 예입니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

```
//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/sheets/12345/visuals/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
<a name="embedded-visuals-for-authenticated-users-sdkv2"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>Visual 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 embedVisual = 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>", // replace this value with the url generated via embedding API
                    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",
                    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 'SIZE_CHANGED': {
                                console.log("Size changed. New dimensions:", messageEvent.message);
                                break;
                            }
                        }
                    },
                };
                const embeddedVisualExperience = await embeddingContext.embedVisual(frameOptions, contentOptions);

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

    <body onload="embedVisual()">
        <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
<a name="embedded-visuals-for-authenticated-users-sdkv1"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>Visual Embedding Example</title>
        <!-- You can download the latest QuickSight embedding SDK version from https://www.npmjs.com/package/amazon-quicksight-embedding-sdk -->
        <!-- Or you can do "npm install amazon-quicksight-embedding-sdk", if you use npm for javascript dependencies -->
        <script src="./quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            let embeddedVisualExperience;
            function onVisualLoad(payload) {
                console.log("Do something when the visual is fully loaded.");
            }

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

            function embedVisual() {
                const containerDiv = document.getElementById("embeddingContainer");
                const options = {
                    url: "<YOUR_EMBED_URL>", // replace this value with the url generated via embedding API
                    container: containerDiv,
                    parameters: {
                        country: "United States"
                    },
                    height: "700px",
                    width: "1000px",
                    locale: "en-US"
                };
                embeddedVisualExperience = QuickSightEmbedding.embedVisual(options);
                embeddedVisualExperience.on("error", onError);
                embeddedVisualExperience.on("load", onVisualLoad);
            }

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

    <body onload="embedVisual()">
        <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 시각적 객체 임베딩
<a name="embedded-analytics-visuals-for-everyone"></a>


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


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

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

**Topics**
+ [

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

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

## 3단계: 시각적 객체 URL 임베드
](#embedded-analytics-visuals-with-anonymous-users-step-3)

## 1단계: 권한 설정
<a name="embedded-analytics-visuals-with-anonymous-users-step-1"></a>


|  | 
| --- |
|  적용 대상:  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 정책이 적절한 조건 연산자를 사용하여 우회 취약성을 방지하고 의도한 도메인만 임베디드 리소스에 액세스할 수 있는지 확인해야 합니다.

방금 생성한 역할에 액세스하려면 애플리케이션의 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 생성
<a name="embedded-analytics-visuals-with-anonymous-users-step-2"></a>


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


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

다음 단원에서는 사용자를 인증하고 애플리케이션 서버에서 임베딩 가능한 시각적 객체 URL을 가져오는 방법을 알아볼 수 있습니다.

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

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

### Java
<a name="embedded-analytics-visuals-with-anonymous-users-java"></a>

```
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.AnonymousUserDashboardVisualEmbeddingConfiguration;
import com.amazonaws.services.quicksight.model.AnonymousUserEmbeddingExperienceConfiguration;
import com.amazonaws.services.quicksight.model.DashboardVisualId;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForAnonymousUserRequest;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForAnonymousUserResult;
import com.amazonaws.services.quicksight.model.SessionTag;

import java.util.List;

/**
 * Class to call QuickSight AWS SDK to get url for Visual embedding.
 */
public class GenerateEmbedUrlForAnonymousUserTest {
    private final AmazonQuickSight quickSightClient;

    public GenerateEmbedUrlForAnonymousUserTest() {
        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 getEmbedUrl(
            final String accountId, // AWS Account ID
            final String namespace, // Anonymous embedding required specifying a valid namespace for which you want the enbedding URL
            final List<String> authorizedResourceArns, // Dashboard arn list of dashboard visuals to embed
            final String dashboardId, // Dashboard ID of the dashboard to embed
            final String sheetId, // Sheet ID of the sheet to embed
            final String visualId, // Visual ID of the visual to embed
            final List<String> allowedDomains, // Runtime allowed domains for embedding
            final List<SessionTag> sessionTags // Session tags used for row-level security
    ) throws Exception {
        final DashboardVisualId dashboardVisual = new DashboardVisualId()
            .withDashboardId(dashboardId)
            .withSheetId(sheetId)
            .withVisualId(visualId);
        final AnonymousUserDashboardVisualEmbeddingConfiguration anonymousUserDashboardVisualEmbeddingConfiguration
            = new AnonymousUserDashboardVisualEmbeddingConfiguration()
                .withInitialDashboardVisualId(dashboardVisual);
        final AnonymousUserEmbeddingExperienceConfiguration anonymousUserEmbeddingExperienceConfiguration
            = new AnonymousUserEmbeddingExperienceConfiguration()
                .withDashboardVisual(anonymousUserDashboardVisualEmbeddingConfiguration);
        final GenerateEmbedUrlForAnonymousUserRequest generateEmbedUrlForAnonymousUserRequest
            = new GenerateEmbedUrlForAnonymousUserRequest()
                .withAwsAccountId(accountId)
                .withNamespace(namespace)
                // authorizedResourceArns should contain ARN of dashboard used below in ExperienceConfiguration
                .withAuthorizedResourceArns(authorizedResourceArns)
                .withExperienceConfiguration(anonymousUserEmbeddingExperienceConfiguration)
                .withAllowedDomains(allowedDomains)
                .withSessionTags(sessionTags)
                .withSessionLifetimeInMinutes(600L);

        final GenerateEmbedUrlForAnonymousUserResult generateEmbedUrlForAnonymousUserResult
            = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

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

### JavaScript
<a name="embedded-analytics-visuals-with-anonymous-users-js"></a>

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

function generateEmbedUrlForAnonymousUser(
    accountId, // Your AWS account ID
    dashboardId, // Dashboard ID to which the constructed url points
    sheetId, // Sheet ID to which the constructed url points
    visualId, // Visual ID to which the constructed url points
    quicksightNamespace, // valid namespace where you want to do embedding
    authorizedResourceArns, // dashboard arn list of dashboard visuals to embed
    allowedDomains, // runtime allowed domains for embedding
    sessionTags, // session tags used for row-level security
    generateEmbedUrlForAnonymousUserCallback, // success callback method
    errorCallback // error callback method
    ) {
    const experienceConfiguration = {
        "DashboardVisual": {
            "InitialDashboardVisualId": {
                "DashboardId": dashboardId,
                "SheetId": sheetId,
                "VisualId": visualId
            }
        }
    };
    
    const generateEmbedUrlForAnonymousUserParams = {
        "AwsAccountId": accountId,
        "Namespace": quicksightNamespace,
        // authorizedResourceArns should contain ARN of dashboard used below in ExperienceConfiguration
        "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
<a name="embedded-analytics-visuals-with-anonymous-users-py"></a>

```
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
# experienceConfiguration: DASHBOARD ID, SHEET ID and VISUAL ID TO WHICH THE CONSTRUCTED URL POINTS
# Example experienceConfig -> 'DashboardVisual': {
#     'InitialDashboardVisualId': {
#         'DashboardId': 'dashboardId',
#         'SheetId': 'sheetId',
#         'VisualId': 'visualId'
#     }
# },
# sessionTags: SESSION TAGS USED FOR ROW-LEVEL SECURITY
def generateEmbedUrlForAnonymousUser(accountId, quicksightNamespace, authorizedResourceArns, allowedDomains, experienceConfiguration, sessionTags):
    try:
        response = quicksightClient.generate_embed_url_for_anonymous_user(
            AwsAccountId = accountId,
            Namespace = quicksightNamespace,
            AuthorizedResourceArns = authorizedResourceArns,
            AllowedDomains = allowedDomains,
            ExperienceConfiguration = experienceConfiguration,
            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
<a name="embedded-analytics-visuals-with-anonymous-users-node"></a>

다음 예제는 앱 서버에서 임베디드 대시보드에 대한 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 should contain ARN of dashboard used below in ExperienceConfiguration
    'AuthorizedResourceArns': authorizedResourceArns,
    'ExperienceConfiguration': { 
        'DashboardVisual': {
            'InitialDashboardVisualId': {
                'DashboardId': 'dashboard_id',
                'SheetId': 'sheet_id',
                'VisualId': 'visual_id'
            }
        }
    },
    'AllowedDomains': allowedDomains,    
    '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/sheets/12345/visuals/67890...",
        "RequestId": "7bee030e-f191-45c4-97fe-d9faf0e03713"
    }
```

### .NET/C\$1
<a name="embedded-analytics-visuals-with-anonymous-users-cs"></a>

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

**Example**  

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

namespace GenerateDashboardEmbedUrlForAnonymousUser
{
    class Program
    {
        static void Main(string[] args)
        {
            var quicksightClient = new AmazonQuickSightClient(
                AccessKey,
                SecretAccessKey,
                SessionToken,
                Amazon.RegionEndpoint.USEast1);
            try
            {
                DashboardVisualId dashboardVisual = new DashboardVisualId
                {
                    DashboardId = "dashboard_id",
                    SheetId = "sheet_id",
                    VisualId = "visual_id"
                };

                AnonymousUserDashboardVisualEmbeddingConfiguration anonymousUserDashboardVisualEmbeddingConfiguration
                    = new AnonymousUserDashboardVisualEmbeddingConfiguration
                    {
                        InitialDashboardVisualId = dashboardVisual                        
                    };               
                    
                AnonymousUserEmbeddingExperienceConfiguration anonymousUserEmbeddingExperienceConfiguration
                    = new AnonymousUserEmbeddingExperienceConfiguration
                    {
                        DashboardVisual = anonymousUserDashboardVisualEmbeddingConfiguration
                    }; 
                    
                Console.WriteLine(
                    quicksightClient.GenerateEmbedUrlForAnonymousUserAsync(new GenerateEmbedUrlForAnonymousUserRequest
                    {
                        AwsAccountId = "111222333444",
                        Namespace = default,
                        // authorizedResourceArns should contain ARN of dashboard used below in ExperienceConfiguration
                        AuthorizedResourceArns = { "dashboard_id" },
                        ExperienceConfiguration = anonymousUserEmbeddingExperienceConfiguration,
                        SessionTags = sessionTags,
                        SessionLifetimeInMinutes = 600,
                    }).Result.EmbedUrl
                );
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
        }
    }
}
```

### AWS CLI
<a name="embedded-analytics-visuals-with-anonymous-users-cli"></a>

역할을 수임하려면 다음 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_visual_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 임베드
<a name="embedded-analytics-visuals-with-anonymous-users-step-3"></a>


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


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

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

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

다음은 `generate-embed-url-for-anonymous-user`의 응답 예입니다. 이 예제`quicksightdomain`의는 Amazon Quick Sight 계정에 액세스하는 데 사용하는 URL입니다.

```
//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/sheets/12345/visuals/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
<a name="embedded-analytics-visuals-with-anonymous-users-sdkv2"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>Visual 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 embedVisual = 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>", // replace this value with the url generated via embedding API
                    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",
                    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 'SIZE_CHANGED': {
                                console.log("Size changed. New dimensions:", messageEvent.message);
                                break;
                            }
                        }
                    },
                };
                const embeddedVisualExperience = await embeddingContext.embedVisual(frameOptions, contentOptions);

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

    <body onload="embedVisual()">
        <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
<a name="embedded-analytics-visuals-with-anonymous-users-sdkv1"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>Visual Embedding Example</title>
        <!-- You can download the latest QuickSight embedding SDK version from https://www.npmjs.com/package/amazon-quicksight-embedding-sdk -->
        <!-- Or you can do "npm install amazon-quicksight-embedding-sdk", if you use npm for javascript dependencies -->
        <script src="./quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            let embeddedVisualExperience;
            function onVisualLoad(payload) {
                console.log("Do something when the visual is fully loaded.");
            }

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

            function embedVisual() {
                const containerDiv = document.getElementById("embeddingContainer");
                const options = {
                    url: "<YOUR_EMBED_URL>", // replace this value with the url generated via embedding API
                    container: containerDiv,
                    parameters: {
                        country: "United States"
                    },
                    height: "700px",
                    width: "1000px",
                    locale: "en-US"
                };
                embeddedVisualExperience = QuickSightEmbedding.embedVisual(options);
                embeddedVisualExperience.on("error", onError);
                embeddedVisualExperience.on("load", onVisualLoad);
            }

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

    <body onload="embedVisual()">
        <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)에서 최신 QuickSight 임베딩 SDK 버전을 다운로드하세요.
+ JavaScript 종속성에 `npm`을(를) 사용하는 경우 다음 명령을 실행하여 다운로드하고 설치합니다.

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

# 등록된 사용자를 위한 Amazon Quick Sight 콘솔의 전체 기능 임베딩
<a name="embedded-analytics-full-console-for-authenticated-users"></a>

**중요**  
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 개발자  | 

Enterprise Edition을 사용하면 읽기 전용 대시보드를 제공하는 것 외에도 사용자 지정 브랜드 작성 포털에서 Amazon Quick Sight 콘솔 환경을 제공할 수도 있습니다. 이 접근 방식을 사용하면 사용자가 데이터 소스, 데이터 세트 및 분석을 생성할 수 있습니다. 동일한 인터페이스에서 대시보드를 만들고 게시하고 볼 수 있습니다. 이러한 권한 중 일부를 제한하려는 경우에도 그렇게 할 수 있습니다.

임베디드 콘솔을 통해 Amazon Quick Sight에 액세스하는 사용자는 작성자 또는 관리자 보안 집단에 속해야 합니다. 독자는 Amazon Quick Sight 콘솔이 내장되어 있는지 또는의 일부인지에 관계없이 작성에 사용할 수 있는 충분한 액세스 권한이 없습니다 AWS Management Console. 하지만 작성자와 관리자는 여전히 임베디드 대시보드에 액세스할 수 있습니다. 일부 작성 기능에 대한 권한을 제한하려는 경우, [UpdateUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateUser.html) API 작업을 통해 사용자에게 사용자 지정 권한 프로필을 추가할 수 있습니다. [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html) API 작업을 사용하여 사용자 지정 권한 프로필이 첨부된 새 사용자를 추가할 수 있습니다. 자세한 내용은 다음 단원을 참조하세요.
+ 사용자 지정 콘솔 권한을 정의하여 사용자 지정 역할을 생성하는 방법에 대한 자세한 내용은 [Amazon Quick Sight 콘솔에 대한 액세스 사용자 지정을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/customizing-permissions-to-the-quicksight-console.html).
+ 네임스페이스를 사용하여 멀티테넌시 사용자, 그룹 및 Amazon Quick Sight 자산을 격리하는 방법에 대한 자세한 내용은 [Amazon Quick Sight 네임스페이스를 참조하세요](https://docs.aws.amazon.com/quicksight/latest/APIReference/controlling-access.html#namespaces.html).
+ 임베디드 Amazon Quick Sight 콘솔에 자체 브랜딩을 추가하는 방법에 대한 자세한 내용은 [Amazon Quick Sight에서 테마 사용](https://docs.aws.amazon.com/quicksight/latest/user/themes-in-quicksight.html) 및 [QuickSight 테마 API 작업을](https://docs.aws.amazon.com/quicksight/latest/APIReference/qs-assets.html#themes) 참조하세요.

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

**Topics**
+ [

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

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

## 3단계: 콘솔 세션 URL 임베드
](#embedded-analytics-full-console-for-authenticated-users-step-3)
+ [

# 등록된 사용자의 경우 임베디드 콘솔에서 생성형 BI 기능 활성화
](embedding-consoles-genbi.md)

## 1단계: 권한 설정
<a name="embedded-analytics-full-console-for-authenticated-users-step-1"></a>

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

Amazon Quick Sight에 액세스하는 각 사용자는 Amazon Quick Sight에 콘솔 세션에 대한 액세스 및 권한을 부여하는 역할을 수임합니다. 이렇게 하려면 AWS 계정에서 IAM 역할을 생성합니다. IAM 정책을 역할과 연결하여 역할을 수행하는 사용자에게 권한을 제공합니다. 독자가 읽기 전용 방식으로 Amazon Quick Sight에 액세스할 수 있고 다른 데이터 또는 생성 기능에 액세스할 수 없도록 `quicksight:RegisterUser` 권한을 추가합니다. 또한 IAM 역할은 콘솔 세션 URL을 검색할 수 있는 권한을 제공해야 합니다. 이를 위해 `quicksight:GenerateEmbedUrlForRegisteredUser`을(를) 추가합니다.

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

**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 정책이 적절한 조건 연산자를 사용하여 우회 취약성을 방지하고 의도한 도메인만 임베디드 리소스에 액세스할 수 있는지 확인해야 합니다.

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

다음 샘플 정책은 콘솔 세션 URL을 검색할 수 있는 권한을 제공합니다. 임베디드 세션에 액세스하기 전에 사용자를 생성 중이면 `quicksight:RegisterUser` 없이도 정책을 사용할 수 있습니다.

마지막으로, 방금 생성한 역할에 액세스하려면 애플리케이션의 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 생성
<a name="embedded-analytics-full-console-for-authenticated-users-step-2"></a>

다음 단원에서는 사용자를 인증하고 애플리케이션 서버에서 임베딩 가능한 콘솔 세션 URL을 가져오는 방법을 알아볼 수 있습니다.

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

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

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

### Java
<a name="embedded-analytics-full-console-for-authenticated-users-java"></a>

```
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.RegisteredUserQuickSightConsoleEmbeddingConfiguration;

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

    private final AmazonQuickSight quickSightClient;

    public GetQuicksightEmbedUrlRegisteredUserQSConsoleEmbedding() {
        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,
            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.
            final List<String> allowedDomains, // Runtime allowed domain for embedding
            final String initialPath
    ) throws Exception {
        final RegisteredUserEmbeddingExperienceConfiguration experienceConfiguration = new RegisteredUserEmbeddingExperienceConfiguration()
                .withQuickSightConsole(new RegisteredUserQuickSightConsoleEmbeddingConfiguration().withInitialPath(initialPath));
        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
<a name="embedded-analytics-full-console-for-authenticated-users-js"></a>

```
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": {
                    "QuickSightConsole": {
                        "InitialPath": '/start'
                    }
                },
                "UserArn": userArn,
                "AllowedDomains": allowedDomains,
                "SessionLifetimeInMinutes": 600
            };

            const quicksightGetDashboard = 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
                }
            });

            quicksightGetDashboard.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
<a name="embedded-analytics-full-console-for-authenticated-users-py"></a>

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

# Create QuickSight and STS clients
qs = boto3.client('quicksight', region_name='us-east-1')
sts = boto3.client('sts')

# Function to generate embedded URL  
# accountId: AWS account ID
# 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 generateEmbeddingURL(accountId, 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-east-1')
            
            experienceConfiguration = {
                "QuickSightConsole": {
                    "InitialPath": "/start"
                }
            }
            response = quickSightClient.generate_embed_url_for_registered_user(
                 AwsAccountId = accountId,
                 ExperienceConfiguration = experienceConfiguration,
                 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
<a name="embedded-analytics-full-console-for-authenticated-users-node"></a>

다음 예제는 앱 서버에서 임베디드 콘솔 세션에 대한 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': {
        'QuickSightConsole': {
            'InitialPath': '/start'
        }
    },
    '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)
<a name="embedded-analytics-full-console-for-authenticated-users-cs"></a>

다음 예제는 앱 서버에서 임베디드 콘솔 세션에 대한 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
            {
                RegisteredUserQuickSightConsoleEmbeddingConfiguration registeredUserQuickSightConsoleEmbeddingConfiguration
                    = new RegisteredUserQuickSightConsoleEmbeddingConfiguration
                    {
                        InitialPath = "/start"
                    };
                RegisteredUserEmbeddingExperienceConfiguration registeredUserEmbeddingExperienceConfiguration
                    = new RegisteredUserEmbeddingExperienceConfiguration
                    {
                        QuickSightConsole = registeredUserQuickSightConsoleEmbeddingConfiguration
                    };
                
                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
<a name="embedded-analytics-full-console-for-authenticated-users-cli"></a>

역할을 수임하려면 다음 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`에 대한 권한이 활성화되어 있어야 합니다. 사용자가 Amazon Quick Sight를 처음 열 때 사용자를 추가하기 위해 just-in-time 접근 방식을 취하는 경우 역할에는에 대한 권한도 활성화되어 있어야 합니다`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_console_session_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 사용자이기도 하고 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 \
    --entry-point the-url-for--the-console-session \
    --session-lifetime-in-minutes 600 \
    --user-arn arn:aws:quicksight:us-east-1:111122223333:user/default/embedding_quicksight_dashboard_role/embeddingsession
	--allowed-domains '["domain1","domain2"]' \
    --experience-configuration QuickSightConsole={InitialPath="/start"}
```

이 작업의 사용에 대한 자세한 내용은 [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 임베드
<a name="embedded-analytics-full-console-for-authenticated-users-step-3"></a>

다음 섹션에서는 [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/embedding/12345/start...",
     "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
<a name="embedded-analytics-full-console-for-authenticated-users-sdkv2"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>Console 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 embedSession = 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>", // replace this value with the url generated via embedding API
                    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 = {
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when the embedded experience fails loading.");
                                break;
                            }
                        }
                    }
                };
                const embeddedConsoleExperience = await embeddingContext.embedConsole(frameOptions, contentOptions);
            };
        </script>
    </head>

    <body onload="embedSession()">
        <div id="experience-container"></div>
    </body>

</html>
```

### SDK 1.0
<a name="embedded-analytics-full-console-for-authenticated-users-sdkv1"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>QuickSight Console Embedding</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 session

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

            function embedSession() {
                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", // replace this dummy url with the one generated via embedding API
                    container: containerDiv,
                    parameters: {
                        country: "United States"
                    },
                    scrolling: "no",
                    height: "700px",
                    width: "1000px",
                    locale: "en-US",
                    footerPaddingEnabled: true,
                    defaultEmbeddingVisualType: "TABLE", // this option only applies to QuickSight console embedding and is not used for dashboard embedding
                };
                session = QuickSightEmbedding.embedSession(options);
                session.on("error", onError);
            }

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

    <body onload="embedSession()">
        <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
  ```

# 등록된 사용자의 경우 임베디드 콘솔에서 생성형 BI 기능 활성화
<a name="embedding-consoles-genbi"></a>


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


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

임베디드 콘솔에서 다음과 같은 생성형 BI 기능을 활성화할 수 있습니다.
+ 실행 요약: 활성화된 경우 등록된 Author Pro 및 Reader Pro 사용자는 Amazon Quick Sight가 주요 인사이트를 쉽게 검색할 수 있도록 대시보드에 생성한 모든 인사이트의 요약을 제공하는 실행 요약을 생성할 수 있습니다.
+ 작성: 이 옵션을 활성화하는 경우 Author Pro 사용자는 생성형 BI를 사용하여 계산된 필드를 빌드하고 시각적 객체를 빌드 및 세분화할 수 있습니다.
+ Q&A: 이 옵션을 활성화하는 경우 Author Pro 및 Reader Pro 사용자는 AI 기반 Q&A를 사용하여 데이터와 관련된 질문을 제안하고 답변할 수 있습니다.
+ 데이터 스토리: 이 옵션을 활성화하는 경우 Author Pro 및 Reader Pro 사용자는 세부 정보를 제공하여 데이터 스토리의 첫 번째 초안을 빠르게 생성할 수 있습니다.

**등록된 사용자의 경우 임베디드 콘솔에서 생성형 BI 기능을 활성화하는 방법**
+ [등록된 사용자가 다음과 같은 변경 사항을 적용하여 콘솔을 포함할 수 있도록 Amazon Quick Sight 콘솔의 전체 기능 임베딩](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-full-console-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)의 `FeatureConfigurations` 파라미터에서 `Enabled: true`를 설정하세요. 구성이 제공되지 않으면 기능은 기본적으로 비활성화됩니다.

     ```
     ExperienceConfiguration: {
             QuickSightConsole: {
                 InitialPath: "initial_path",
                 AmazonQInQuickSight: {
                     FeatureConfigurations: { 
                         COMMENT: Enable executive summaries
                         ExecutiveSummary: {
                             Enabled: true
                         },
                         COMMENT: Enable Generative BI authoring
                         GenerativeAuthoring: {
                             Enabled: true
                         },
                         COMMENT: Enable Q&A
                         DataQnA: {
                             Enabled: true
                         },
                         COMMENT: Enable data stories
                         DataStories: {
                             Enabled: true
                         }       
                     }
                 }
             }
         }
     }
     ```

  1. 3단계에서 Amazon Quick Sight 임베딩 SDK를 사용하여 콘솔 URL을 임베딩할 때 다음 예제의 값을 원하는 대로 설정합니다. 구성이 제공되지 않으면 기능은 기본적으로 비활성화됩니다.
**참고**  
데이터 스토리를 활성화하기 위한 SDK 옵션은 없습니다. 이전 단계에서와 같이 API로 데이터 스토리를 활성화하는 경우 등록된 사용자는 데이터 스토리를 사용할 수 있습니다.

     ```
     const contentOptions = {
         toolbarOptions: {
             executiveSummary: true, // Enable executive summaries
             buildVisual: true, // Enable Generative BI authoring
             dataQnA: true // Enable Q&A
         }
     };
     ```

# Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩
<a name="embedding-gen-bi"></a>


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

다음 섹션에서는 LLM에서 제공하는 향상된 NLQ 기능을 사용하는 임베디드 생성형 Q&A 환경을 설정하는 방법에 대한 자세한 정보를 확인할 수 있습니다. 생성형 Q&A 환경은 임베디드 Q Search Bar의 권장 대체 기능이며 사용자에게 업데이트된 BI 환경을 제공합니다.

**Topics**
+ [

## 등록된 사용자를 위한 Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩
](#embedded-analytics-gen-bi-authenticated-users)
+ [

## 익명(미등록) 사용자를 위한 빠른 생성형 Q&A 환경에 Amazon Q 임베딩
](#embedded-analytics-gen-bi-anonymous-users)

## 등록된 사용자를 위한 Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩
<a name="embedded-analytics-gen-bi-authenticated-users"></a>

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

**Topics**
+ [

### 1단계: 권한 설정
](#embedded-analytics-gen-bi-authenticated-users-step-1)
+ [

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

### 3단계: 생성형 Q&A 환경 URL 임베드
](#embedded-analytics-gen-bi-authenticated-users-step-3)
+ [

### 임베디드 생성형 Q&A 환경 기능 옵션
](#embedded-analytics-gen-bi-authenticated-users-step-4)

### 1단계: 권한 설정
<a name="embedded-analytics-gen-bi-authenticated-users-step-1"></a>

다음 섹션에서는 생성형 Q&A 환경을 임베드할 백엔드 애플리케이션 또는 웹 서버의 권한을 설정하는 방법을 알아볼 수 있습니다. 이 작업을 수행하려면 AWS Identity and Access Management (IAM)에 대한 관리 액세스 권한이 필요합니다.

생성형 Q&A 환경에 액세스하는 각 사용자는 Amazon Quick Sight에 액세스 및 권한을 부여하는 역할을 수임합니다. 이렇게 하려면 AWS 계정에서 IAM 역할을 생성합니다. IAM 정책을 역할과 연결하여 역할을 수행하는 사용자에게 권한을 제공합니다. IAM 역할은 특정 사용자 풀의 임베딩 URL을 검색할 수 있는 권한을 제공해야 합니다.

와일드카드 문자 \$1를 사용하여, 특정 네임스페이스의 모든 사용자에 대해 URL을 생성할 권한을 부여할 수 있습니다. 또는 특정 네임스페이스에 있는 사용자 하위 집합에 대해 URL을 생성할 권한을 부여할 수 있습니다. 이를 위해 `quicksight:GenerateEmbedUrlForRegisteredUser`을(를) 추가합니다.

IAM 정책에 개발자가 `GenerateEmbedUrlForRegisteredUser` API 작업의 `AllowedDomains` 파라미터에 나열할 수 있는 도메인을 제한하는 조건을 만들 수 있습니다. `AllowedDomains` 파라미터는 선택 파라미터입니다. 개발자에게 **Amazon Quick Sight 관리** 메뉴에 구성된 정적 도메인을 재정의하고 생성된 URL에 액세스할 수 있는 최대 3개의 도메인 또는 하위 도메인을 나열할 수 있는 옵션을 부여합니다. 그러면 이 URL이 개발자 웹 사이트에 포함됩니다. 파라미터에 나열된 도메인만 임베디드 생성형 Q&A 환경에 액세스할 수 있습니다. 이 조건이 없으면, 개발자는 인터넷에 있는 모든 도메인을 `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 또는 Security Assertion Markup Language(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 생성
<a name="embedded-analytics-gen-bi-authenticated-users-step-2"></a>

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

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

설명된 단계를 수행하면 Q 주제의 각 뷰어가 Amazon Quick Sight에서 고유하게 프로비저닝됩니다. 또한 사용자 단위 설정(예: 파라미터에 대한 동적 기본값 및 행 수준 보안)을 적용합니다. 태그 기반 행 수준 보안은 Q 표시줄의 익명 사용자 임베딩에 사용할 수 있습니다.

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

#### Java
<a name="embedded-analytics-gen-bi-authenticated-users-java"></a>

```
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.RegisteredUserGenerativeQnAEmbeddingConfiguration;

/**
 * Class to call QuickSight AWS SDK to get url for embedding Generative Q&A experience.
 */
public class RegisteredUserGenerativeQnAEmbeddingSample {

    private final AmazonQuickSight quickSightClient;

    public RegisteredUserGenerativeQnAEmbeddingSample() {
        this.quickSightClient = AmazonQuickSightClientBuilder
                    .standard()
                    .withRegion(Regions.US_EAST_1.getName())
                    .withCredentials(new AWS CredentialsProvider() {
                            @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 topicId, // Topic 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 how to get user arn for a QuickSight user.
            ) throws Exception {

        final RegisteredUserEmbeddingExperienceConfiguration experienceConfiguration = new RegisteredUserEmbeddingExperienceConfiguration()
                .withGenerativeQnA(new RegisteredUserGenerativeQnAEmbeddingConfiguration().withInitialTopicId(topicId));
        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
<a name="embedded-analytics-gen-bi-authenticated-users-js"></a>

**참고**  
임베드 URL 생성 API는 브라우저에서 직접 호출할 수 없습니다. 대신 Node.JS 예제를 참조하세요.

#### Python3
<a name="embedded-analytics-gen-bi-authenticated-users-py"></a>

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

sts = boto3.client('sts')

# Function to generate embedded URL  
# accountId: AWS account ID
# topicId: Topic 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, topicId, 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 = {
                    'GenerativeQnA': {
                        'InitialTopicId': topicId
                    }
                },
                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
<a name="embedded-analytics-gen-bi-authenticated-users-node"></a>

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

**Example**  

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

var quicksightClient = new AWS.Service({
    region: 'us-east-1'
});

quicksightClient.generateEmbedUrlForRegisteredUser({
    'AwsAccountId': '111122223333',
    'ExperienceConfiguration': { 
        'GenerativeQnA': {
            'InitialTopicId': 'U4zJMVZ2n2stZflc8Ou3iKySEb3BEV6f'
        }
    },
    'UserArn': 'REGISTERED_USER_ARN',
    'AllowedDomains': allowedDomains,
    'SessionLifetimeInMinutes': 100
}, function(err, data) {
    console.log('Errors: ');
    console.log(err);
    console.log('Response: ');
    console.log(data);
});
```

#### .NET/C\$1
<a name="embedded-analytics-gen-bi-authenticated-users-cs"></a>

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

**Example**  

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

namespace GenerateGenerativeQnAEmbedUrlForRegisteredUser
{
    class Program
    {
        static void Main(string[] args)
        {
            var quicksightClient = new AmazonQuickSightClient(
                AccessKey,
                SecretAccessKey,
                SessionToken,
                Amazon.RegionEndpoint.USEast1);
            try
            {
                RegisteredUserGenerativeQnAEmbeddingConfiguration registeredUserGenerativeQnAEmbeddingConfiguration
                    = new RegisteredUserGenerativeQnAEmbeddingConfiguration
                    {
                        InitialTopicId = "U4zJMVZ2n2stZflc8Ou3iKySEb3BEV6f"
                    };
                RegisteredUserEmbeddingExperienceConfiguration registeredUserEmbeddingExperienceConfiguration
                    = new RegisteredUserEmbeddingExperienceConfiguration
                    {
                        GenerativeQnA = registeredUserGenerativeQnAEmbeddingConfiguration
                    }; 
                
                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
<a name="embedded-analytics-gen-bi-authenticated-users-cli"></a>

역할을 수임하려면 다음 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`에 대한 권한이 활성화되어 있어야 합니다. 사용자가 Q 검색 창의 주제를 사용할 때 사용자를 추가하는 적시 접근 방식을 취하려면, 역할에 `quicksight:RegisterUser`에 대한 사용 권한도 활성화해야 합니다.

```
aws sts assume-role \
     --role-arn "arn:aws:iam::111122223333:role/embedding_quicksight_q_generative_qna_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_q_search_bar_role/john.doe@example.com`으로 설정합니다. 역할 세션 ID는 `role-arn`의 역할 이름과 `role-session-name` 값으로 구성됩니다. 각 사용자에 대해 적절한 권한을 설정하려면 각 사용자에 대해 고유한 역할 세션 ID를 사용해야 합니다. 또한 사용자 액세스 조절을 방지할 수 있습니다. *조절*은 동일한 사용자가 여러 위치에서 Amazon Quick Sight에 액세스하지 못하도록 하는 보안 기능입니다.

역할 세션 ID도 Amazon Quick Sight의 사용자 이름이 됩니다. 이 패턴을 사용하여 Amazon Quick Sight에서 사용자를 미리 프로비저닝하거나 생성형 Q&A 환경에 처음 액세스할 때 사용자를 프로비저닝할 수 있습니다.

다음 예에서는 사용자를 프로비저닝하는 데 사용할 수 있는 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_q_generative_qna_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 사용자의 경우 사용자 Amazon 리소스 이름(ARN)을 얻는 데 `DescribeUser`을(를) 사용할 수 있습니다.

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

```
aws quicksight create-group-membership \
    --aws-account-id 111122223333 \
    --namespace default \
    --group-name financeusers \
    --member-name "embedding_quicksight_q_generative_qna_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-anonymous-user \
--aws-account-id 111122223333 \
--namespace default-or-something-else \
--authorized-resource-arns '["topic-arn-topicId1","topic-arn-topicId2"]' \
--allowed-domains '["domain1","domain2"]' \
--experience-configuration 'GenerativeQnA={InitialTopicId="topicId1"}' \
--session-tags '["Key": tag-key-1,"Value": tag-value-1,{"Key": tag-key-1,"Value": tag-value-1}]' \
--session-lifetime-in-minutes 15
```

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

### 3단계: 생성형 Q&A 환경 URL 임베드
<a name="embedded-analytics-gen-bi-authenticated-users-step-3"></a>

다음 섹션에서는 웹 사이트 또는 애플리케이션 페이지에 생성형 Q&A 환경 URL을 임베드하는 방법을 알아볼 수 있습니다. [Amazon Quick Sight 임베딩 SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)(JavaScript)를 사용하여이 작업을 수행할 수 있습니다. SDK를 사용하여 다음 작업을 수행할 수 있습니다.
+ 생성형 Q&A 환경을 HTML 페이지에 배치합니다.
+ 애플리케이션 요구 사항에 맞게 임베디드 환경의 레이아웃과 모양을 사용자 지정합니다.
+ 애플리케이션에 사용자 지정되는 메시지로 오류 상태 처리

앱에 포함할 수 있는 URL을 생성하러면, `GenerateEmbedUrlForRegisteredUser` API 작업을 직접 호출하세요. 이 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/embedding/12345/q/search...",
"RequestId": "7bee030e-f191-45c4-97fe-d9faf0e03713"
}
```

[Amazon Quick Sight 임베딩 SDK를 사용하거나이 URL을 iframe에 추가하여 웹 페이지에 생성형 Q&A 환경을 임베드](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)합니다. 고정 높이 및 너비 숫자(픽셀)를 설정하면 Amazon Quick Sight는 이를 사용하며 창의 크기가 조정될 때 시각적 객체를 변경하지 않습니다. 상대 백분율 높이와 너비를 설정하면 Amazon Quick Sight는 창 크기가 변경될 때 수정되는 응답형 레이아웃을 제공합니다.

임베디드 생성형 Q&A 환경을 호스팅할 도메인이 Amazon Quick Sight 구독에 대해 승인된 도메인 목록인 *허용 목록에* 있는지 확인합니다. 이 요건은 임베디드 대시보드에서 미승인 도메인을 제외함으로써 데이터를 보호합니다. 임베디드 생성형 Q&A 환경의 도메인 추가에 대한 자세한 정보는 [도메인 관리](manage-domains.md) 섹션을 참조하세요.

Amazon Quick Sight 임베딩 SDK를 사용하여 애플리케이션에 맞게 임베디드 생성형 Q&A 환경의 레이아웃과 모양을 사용자 지정할 수 있습니다. `panelType` 속성을 사용하여 애플리케이션에서 렌더링할 때 생성형 Q&A 환경의 랜딩 상태를 구성합니다. `panelType` 속성을 `'FULL'`로 설정하여 전체 생성형 Q&A 환경 패널을 렌더링합니다. 이 패널은 Amazon Quick Sight 사용자가 Amazon Quick Sight 콘솔에서 겪는 경험과 유사합니다. 패널의 프레임 높이는 사용자 상호 작용에 따라 변경되지 않으며 `frameOptions.height` 속성에서 설정한 값을 존중합니다. 아래 이미지에서는 `panelType` 값을 `'FULL'`로 설정할 때 렌더링하는 생성형 Q&A 환경 패널을 보여줍니다.

`panelType` 속성을 `'SEARCH_BAR'`로 설정하여 생성형 Q&A 환경 패널을 검색 표시줄로 렌더링합니다. 이 검색 표시줄은 Q Search Bar가 애플리케이션에 임베드될 때 렌더링하는 방식과 유사합니다. 생성형 Q&A 검색 표시줄은 주제 선택 옵션, 질문 제안 목록, 응답 패널 또는 핀보드를 표시하는 더 큰 패널로 확장됩니다.

기본 생성형 Q&A 검색 표시줄의 기본 최소 높이는 임베디드 자산이 로드될 때 렌더링됩니다. 검색 표시줄 환경을 최적화하려면 `frameOptions.height` 값을 `"38px"`로 설정하는 것이 좋습니다. `focusedHeight` 속성을 사용하여 주제 선택 드롭다운 및 질문 제안 목록의 최적 크기를 설정합니다. `expandedHeight` 속성을 사용하여 답변 패널과 핀보드의 최적 크기를 설정합니다. `'SEARCH_BAR'` 옵션을 선택하는 경우 애플리케이션에서 원치 않는 콘텐츠 이동을 방지하기 위해 상위 컨테이너를 절대 위치로 스타일링하는 것이 좋습니다. 아래 이미지에서는 `panelType` 값을 `'SEARCH_BAR'`로 설정할 때 렌더링하는 생성형 Q&A 환경 검색 표시줄을 보여줍니다.

`panelType` 속성을 구성한 후 Amazon Quick Sight 임베딩 SDK를 사용하여 생성형 Q&A 경험의 다음 속성을 사용자 지정합니다.
+ 생성형 Q&A 패널의 제목(`panelType: FULL` 옵션에만 적용됨)입니다.
+ 검색 표시줄의 자리 표시자 텍스트입니다.
+ 주제 선택을 허용할지 여부입니다.
+ 주제 이름을 표시할지 숨길지 여부입니다.
+ Amazon Q 아이콘을 표시할지 숨길지 여부입니다(`panelType: FULL` 옵션에만 적용됨).
+ 핀보드를 숨길지 여부입니다.
+ 사용자가 생성형 Q&A 패널을 전체 화면으로 최대화할 수 있는지 여부입니다.
+ 생성형 Q&A 패널의 테마입니다. 사용자 지정 테마 ARN을 SDK에 전달하여 프레임 콘텐츠의 모양을 변경할 수 있습니다. Amazon Quick Sight 스타터 테마는 임베디드 생성형 BI 패널에서 지원되지 않습니다. Amazon Quick Sight 스타터 테마를 사용하려면 Amazon Quick Sight에 사용자 지정 테마로 저장합니다.

Amazon Quick Sight 임베딩 SDK를 사용하는 경우 페이지의 생성형 Q&A 환경은 상태에 따라 동적으로 크기가 조정됩니다. Amazon Quick Sight 임베딩 SDK를 사용하면 생성형 Q&A 환경 내에서 파라미터를 제어하고 페이지 로드 완료, 상태 변경 및 오류 측면에서 콜백을 수신할 수도 있습니다.

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

#### SDK 2.0
<a name="collapsible-gen-bi-embedding-example"></a>

```
<!DOCTYPE html>
<html>
    <head>
        <title>Generative Q&A Embedding Example</title>
        <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@2.7.0/dist/quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            const embedGenerativeQnA = 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>", // replace this value with the url generated via embedding API
                    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 = {
                    // Optional panel settings. Default behavior is equivalent to {panelType: 'FULL'}
                    panelOptions: {
                        panelType: 'FULL',
                        title: 'custom title', // Optional
                        showQIcon: false, // Optional, Default: true
                    },
                    // Use SEARCH_BAR panel type for the landing state to be similar to embedQSearchBar
                    // with generative capability enabled topics
                    /*
                    panelOptions: {
                        panelType: 'SEARCH_BAR',
                        focusedHeight: '250px',
                        expandedHeight: '500px',
                    },
                    */
                    showTopicName: false, // Optional, Default: true
                    showPinboard: false, // Optional, Default: true
                    allowTopicSelection: false, // Optional, Default: true
                    allowFullscreen: false, // Optional, Default: true
                    searchPlaceholderText: "custom search placeholder", // Optional
                    themeOptions: { // Optional
                        themeArn: 'arn:aws:quicksight:<Region>:<AWS-Account-ID>:theme/<Theme-ID>'
                    }
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                // called when pinboard is shown / visuals are rendered
                                console.log("Do something when SEARCH_BAR type panel is expanded");
                                break;
                            }
                            case 'Q_SEARCH_FOCUSED': {
                                // called when question suggestions or topic selection dropdown are shown
                                console.log("Do something when SEARCH_BAR type panel is focused");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                // called when shrinked to initial bar height
                                console.log("Do something when SEARCH_BAR type panel is collapsed");
                                break;
                            }
                            case 'Q_PANEL_ENTERED_FULLSCREEN': {
                                console.log("Do something when panel enters full screen mode");
                                break;
                            }
                            case 'Q_PANEL_EXITED_FULLSCREEN': {
                                console.log("Do something when panel exits full screen mode");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something after experience is loaded");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when experience fails to load");
                                break;
                            }
                        }
                    }
                };
                const embeddedGenerativeQnExperience = await embeddingContext.embedGenerativeQnA(frameOptions, contentOptions);
            };
        </script>
    </head>

    <body onload="embedGenerativeQnA()">
        <div id="experience-container"></div>
    </body>

</html>
```

이 예제가 작동하려면 Amazon Quick Sight 임베딩 SDK를 사용하여 JavaScript를 사용하여 웹 사이트에서 임베디드 생성형 Q&A 환경을 로드해야 합니다. 이 정보를 얻으려면 다음 중 하나를 수행합니다.
+ 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
  ```

### 임베디드 생성형 Q&A 환경 기능 옵션
<a name="embedded-analytics-gen-bi-authenticated-users-step-4"></a>

임베딩 SDK를 사용하여 임베디드 생성형 Q&A 환경에 기능 옵션을 사용할 수 있습니다.

#### 생성형 Q&A 검색 표시줄 작업 호출
<a name="w2aac35c27c21c43c29b9c21b5"></a>
+ 질문 설정 - 이 기능은 생성형 Q&A 환경에 질문을 전송하고 즉시 질문을 쿼리합니다.

  ```
  embeddedGenerativeQnExperience.setQuestion('show me monthly revenue');
  ```
+ 응답 패널 닫기(생성형 Q&A 검색 표시줄 옵션에 적용) - 이 기능은 응답 패널을 닫고 iframe을 원래 검색 표시줄 상태로 되돌립니다.

  ```
  embeddedGenerativeQnExperience.close();
  ```

자세한 내용은 [Amazon Quick Sight 임베딩 SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk)를 참조하세요.

## 익명(미등록) 사용자를 위한 빠른 생성형 Q&A 환경에 Amazon Q 임베딩
<a name="embedded-analytics-gen-bi-anonymous-users"></a>


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

다음 섹션에서는 익명(등록되지 않은) 사용자를 위해 임베디드 생성형 Q&A 환경을 설정하는 방법에 대한 자세한 정보를 확인할 수 있습니다.

**Topics**
+ [

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

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

### 3단계: 생성형 Q&A 환경 URL 임베드
](#embedded-analytics-gen-bi-anonymous-users-step-3)
+ [

### 임베디드 생성형 Q&A 환경 기능 옵션
](#embedded-analytics-gen-bi-anonymous-users-step-4)

### 1단계: 권한 설정
<a name="embedded-analytics-gen-bi-anonymous-users-step-1"></a>

다음 섹션에서는 생성형 Q&A 환경을 임베드할 백엔드 애플리케이션 또는 웹 서버의 권한을 설정하는 방법을 알아볼 수 있습니다. 이 작업을 수행하려면 AWS Identity and Access Management (IAM)에 대한 관리 액세스 권한이 필요합니다.

생성형 Q&A 환경에 액세스하는 각 사용자는 Amazon Quick Sight에 액세스 및 권한을 부여하는 역할을 수임합니다. 이렇게 하려면 AWS 계정에서 IAM 역할을 생성합니다. IAM 정책을 역할과 연결하여 역할을 수행하는 사용자에게 권한을 제공합니다. IAM 역할은 특정 사용자 풀의 임베딩 URL을 검색할 수 있는 권한을 제공해야 합니다.

와일드카드 문자 \$1를 사용하여, 특정 네임스페이스의 모든 사용자에 대해 URL을 생성할 권한을 부여할 수 있습니다. 또는 특정 네임스페이스에 있는 사용자 하위 집합에 대해 URL을 생성할 권한을 부여할 수 있습니다. 이를 위해 `quicksight:GenerateEmbedUrlForAnonymousUser`을(를) 추가합니다.

IAM 정책에 개발자가 `GenerateEmbedUrlForAnonymousUser` API 작업의 `AllowedDomains` 파라미터에 나열할 수 있는 도메인을 제한하는 조건을 만들 수 있습니다. `AllowedDomains` 파라미터는 선택 파라미터입니다. 개발자에게 **Amazon Quick Sight 관리** 메뉴에 구성된 정적 도메인을 재정의하고 생성된 URL에 액세스할 수 있는 최대 3개의 도메인 또는 하위 도메인을 나열할 수 있는 옵션을 부여합니다. 그러면 이 URL이 개발자 웹 사이트에 포함됩니다. 파라미터에 나열된 도메인만 임베디드 Q 검색 창에 액세스할 수 있습니다. 이 조건이 없으면, 개발자는 인터넷에 있는 모든 도메인을 `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 정책이 적절한 조건 연산자를 사용하여 우회 취약성을 방지하고 의도한 도메인만 임베디드 리소스에 액세스할 수 있는지 확인해야 합니다.

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

------
#### [ 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 생성
<a name="embedded-analytics-gen-bi-anonymous-users-step-2"></a>

다음 단원에서는 사용자를 인증하고 애플리케이션 서버에서 임베딩 가능한 Q 주제 URL을 가져오는 방법을 알아볼 수 있습니다.

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

#### Java
<a name="embedded-analytics-gen-bi-anonymous-users-java"></a>

```
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.AnonymousUserGenerativeQnAEmbeddingConfiguration;
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 initialTopicId, // Q TOPIC ID TO WHICH THE CONSTRUCTED URL POINTS AND EXPERIENCE PREPOPULATES INITIALLY
        final String namespace, // ANONYMOUS EMBEDDING REQUIRES SPECIFYING A VALID NAMESPACE FOR WHICH YOU WANT THE EMBEDDING URL
        final List<String> authorizedResourceArns, // Q TOPIC 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();
        AnonymousUserGenerativeQnAEmbeddingConfiguration generativeQnAConfiguration = new AnonymousUserGenerativeQnAEmbeddingConfiguration();
        generativeQnAConfiguration.setInitialTopicId(initialTopicId);
        experienceConfiguration.setGenerativeQnA(generativeQnAConfiguration);

        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 result = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

        return result.getEmbedUrl();
    }

}
```

#### JavaScript
<a name="embedded-analytics-gen-bi-anonymous-users-js"></a>

**참고**  
임베드 URL 생성 API는 브라우저에서 직접 호출할 수 없습니다. 대신 Node.JS 예제를 참조하세요.

#### Python3
<a name="embedded-analytics-gen-bi-anonymous-users-py"></a>

```
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
# topicId: Topic ID to embed
# quicksightNamespace: VALID NAMESPACE WHERE YOU WANT TO DO NOAUTH EMBEDDING
# authorizedResourceArns: TOPIC ARN LIST TO EMBED
# allowedDomains: RUNTIME ALLOWED DOMAINS FOR EMBEDDING
# sessionTags: SESSION TAGS USED FOR ROW-LEVEL SECURITY
def generateEmbedUrlForAnonymousUser(accountId, quicksightNamespace, authorizedResourceArns, allowedDomains, sessionTags):
    try:
        response = quicksightClient.generate_embed_url_for_anonymous_user(
            AwsAccountId = accountId,
            Namespace = quicksightNamespace,
            AuthorizedResourceArns = authorizedResourceArns,
            AllowedDomains = allowedDomains,
            ExperienceConfiguration = {
                'GenerativeQnA': {
                        'InitialTopicId': topicId
                    }
            },
            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
<a name="embedded-analytics-gen-bi-anonymous-users-node"></a>

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

**Example**  

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

var quicksightClient = new AWS.Service({
    region: 'us-east-1',
});

quicksightClient.generateEmbedUrlForAnonymousUser({
    'AwsAccountId': '111122223333',
    'Namespace': 'DEFAULT'
    'AuthorizedResourceArns': '["topic-arn-topicId1","topic-arn-topicId2"]',
    'AllowedDomains': allowedDomains,
    'ExperienceConfiguration': { 
        'GenerativeQnA': {
            'InitialTopicId': 'U4zJMVZ2n2stZflc8Ou3iKySEb3BEV6f'
        }
    },
    'SessionTags': '["Key": tag-key-1,"Value": tag-value-1,{"Key": tag-key-1,"Value": tag-value-1}]',
    'SessionLifetimeInMinutes': 15
}, function(err, data) {
    console.log('Errors: ');
    console.log(err);
    console.log('Response: ');
    console.log(data);
});
```

#### .NET/C\$1
<a name="embedded-analytics-gen-bi-anonymous-users-cs"></a>

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

**Example**  

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

namespace GenerateGenerativeQnAEmbedUrlForAnonymousUser
{
    class Program
    {
        static void Main(string[] args)
        {
            var quicksightClient = new AmazonQuickSightClient(
                AccessKey,
                SecretAccessKey,
                SessionToken,
                Amazon.RegionEndpoint.USEast1);
            try
            {
                AnonymousUserGenerativeQnAEmbeddingConfiguration anonymousUserGenerativeQnAEmbeddingConfiguration
                    = new AnonymousUserGenerativeQnAEmbeddingConfiguration
                    {
                        InitialTopicId = "U4zJMVZ2n2stZflc8Ou3iKySEb3BEV6f"
                    };
                AnonymousUserEmbeddingExperienceConfiguration anonymousUserEmbeddingExperienceConfiguration
                    = new AnonymousUserEmbeddingExperienceConfiguration
                    {
                        GenerativeQnA = anonymousUserGenerativeQnAEmbeddingConfiguration
                    }; 
                
                Console.WriteLine(
                    quicksightClient.GenerateEmbedUrlForAnonymousUserAsync(new GenerateEmbedUrlForAnonymousUserRequest
                    {
                        AwsAccountId = "111122223333",
                        Namespace = "DEFAULT",
                        AuthorizedResourceArns '["topic-arn-topicId1","topic-arn-topicId2"]',
                        AllowedDomains = allowedDomains,
                        ExperienceConfiguration = anonymousUserEmbeddingExperienceConfiguration,
                        SessionTags = '["Key": tag-key-1,"Value": tag-value-1,{"Key": tag-key-1,"Value": tag-value-1}]',
                        SessionLifetimeInMinutes = 15,
                    }).Result.EmbedUrl
                );
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
        }
    }
}
```

#### AWS CLI
<a name="embedded-analytics-gen-bi-anonymous-users-cli"></a>

역할을 수임하려면 다음 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:GenerateEmbedUrlForAnonymousUser`에 대한 권한이 활성화되어 있어야 합니다.

```
aws sts assume-role \
     --role-arn "arn:aws:iam::111122223333:role/embedding_quicksight_generative_qna_role" \
     --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_q_search_bar_role/QuickSightEmbeddingAnonymousPolicy`으로 설정합니다. 역할 세션 ID는 `role-arn`의 역할 이름과 `role-session-name` 값으로 구성됩니다. 각 사용자에 대해 적절한 권한을 설정하려면 각 사용자에 대해 고유한 역할 세션 ID를 사용해야 합니다. 또한 사용자 액세스 조절을 방지할 수 있습니다. *조절*은 동일한 사용자가 여러 위치에서 Amazon Quick Sight에 액세스하지 못하도록 하는 보안 기능입니다. 또한 각 세션을 분리하고 구분할 수 있습니다. 로드 밸런싱 등을 위해 여러 웹 서버를 사용하는 경우, 세션이 다른 서버에 다시 연결되면 새 세션이 시작됩니다.

대시보드에 대해 서명된 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 \
--authorized-resource-arns '["topic-arn-topicId","topic-arn-topicId2"]' \
--allowed-domains '["domain1","domain2"]' \
--experience-configuration 'GenerativeQnA={InitialTopicId="topicId1"}' \
--session-tags '["Key": tag-key-1,"Value": tag-value-1,{"Key": tag-key-1,"Value": tag-value-1}]' \
--session-lifetime-in-minutes 15
```

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

### 3단계: 생성형 Q&A 환경 URL 임베드
<a name="embedded-analytics-gen-bi-anonymous-users-step-3"></a>

다음 섹션에서는 웹 사이트 또는 애플리케이션 페이지에 생성형 Q&A 환경 URL을 임베드하는 방법을 알아볼 수 있습니다. [Amazon Quick Sight 임베딩 SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)(JavaScript)를 사용하여이 작업을 수행할 수 있습니다. SDK를 사용하여 다음 작업을 수행할 수 있습니다.
+ 생성형 Q&A 환경을 HTML 페이지에 배치합니다.
+ 애플리케이션 요구 사항에 맞게 임베디드 환경의 레이아웃과 모양을 사용자 지정합니다.
+ 애플리케이션에 사용자 지정되는 메시지로 오류 상태 처리

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

다음은 `generate-embed-url-for-anonymous-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/embedding/12345/q/search...",
     "RequestId": "7bee030e-f191-45c4-97fe-d9faf0e03713"
}
```

[Amazon Quick Sight 임베딩 SDK를 사용하거나이 URL을 iframe에 추가하여 웹 페이지에 생성형 Q&A 환경을 임베딩](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)합니다. 고정 높이 및 너비 숫자(픽셀)를 설정하면 Amazon Quick Sight는 이를 사용하며 창의 크기가 조정될 때 시각적 객체를 변경하지 않습니다. 상대 백분율 높이와 너비를 설정하면 Amazon Quick Sight는 창 크기가 변경될 때 수정되는 응답형 레이아웃을 제공합니다.

생성형 Q&A 환경을 호스팅할 도메인이 Amazon Quick Sight 구독에 대해 승인된 도메인 *목록인 허용* 목록에 있는지 확인합니다. 이 요건은 미승인 도메인이 임베디드 생성형 Q&A 환경을 호스팅하지 못하도록 방지하여 데이터를 보호합니다. 임베디드 생성형 Q&A 환경의 도메인 추가에 대한 자세한 정보는 [도메인 관리](manage-domains.md) 섹션을 참조하세요.

Amazon Quick Sight 임베딩 SDK를 사용하여 애플리케이션에 맞게 임베디드 생성형 Q&A 환경의 레이아웃과 모양을 사용자 지정할 수 있습니다. `panelType` 속성을 사용하여 애플리케이션에서 렌더링할 때 생성형 Q&A 환경의 랜딩 상태를 구성합니다. `panelType` 속성을 `'FULL'`로 설정하여 전체 생성형 Q&A 환경 패널을 렌더링합니다. 이 패널은 Amazon Quick Sight 사용자가 Amazon Quick Sight 콘솔에서 겪는 경험과 유사합니다. 패널의 프레임 높이는 사용자 상호 작용에 따라 변경되지 않으며 `frameOptions.height` 속성에서 설정한 값을 존중합니다. 아래 이미지에서는 `panelType` 값을 `'FULL'`로 설정할 때 렌더링하는 생성형 Q&A 환경 패널을 보여줍니다.

`panelType` 속성을 `'SEARCH_BAR'`로 설정하여 생성형 Q&A 환경 패널을 검색 표시줄로 렌더링합니다. 이 검색 표시줄은 Q Search Bar가 애플리케이션에 임베드될 때 렌더링하는 방식과 유사합니다. 생성형 Q&A 검색 표시줄은 주제 선택 옵션, 질문 제안 목록, 응답 패널 또는 핀보드를 표시하는 더 큰 패널로 확장됩니다.

기본 생성형 Q&A 검색 표시줄의 기본 최소 높이는 임베디드 자산이 로드될 때 렌더링됩니다. 검색 표시줄 환경을 최적화하려면 `frameOptions.height` 값을 `"38px"`로 설정하는 것이 좋습니다. `focusedHeight` 속성을 사용하여 주제 선택 드롭다운 및 질문 제안 목록의 최적 크기를 설정합니다. `expandedHeight` 속성을 사용하여 답변 패널과 핀보드의 최적 크기를 설정합니다. `'SEARCH_BAR'` 옵션을 선택하는 경우 애플리케이션에서 원치 않는 콘텐츠 이동을 방지하기 위해 상위 컨테이너를 절대 위치로 스타일링하는 것이 좋습니다. 아래 이미지에서는 `panelType` 값을 `'SEARCH_BAR'`로 설정할 때 렌더링하는 생성형 Q&A 환경 검색 표시줄을 보여줍니다.

`panelType` 속성을 구성한 후 Amazon Quick Sight 임베딩 SDK를 사용하여 생성형 Q&A 경험의 다음 속성을 사용자 지정합니다.
+ 생성형 Q&A 패널의 제목(`panelType: FULL` 옵션에만 적용됨)입니다.
+ 검색 표시줄의 자리 표시자 텍스트입니다.
+ 주제 선택을 허용할지 여부입니다.
+ 주제 이름을 표시할지 숨길지 여부입니다.
+ Amazon Q 아이콘을 표시할지 숨길지 여부입니다(`panelType: FULL` 옵션에만 적용됨).
+ 핀보드를 숨길지 여부입니다.
+ 사용자가 생성형 Q&A 패널을 전체 화면으로 최대화할 수 있는지 여부입니다.
+ 생성형 Q&A 패널의 테마입니다. 사용자 지정 테마 ARN을 SDK에 전달하여 프레임 콘텐츠의 모양을 변경할 수 있습니다. Amazon Quick Sight 스타터 테마는 임베디드 생성형 BI 패널에서 지원되지 않습니다. Amazon Quick Sight 스타터 테마를 사용하려면 Amazon Quick Sight에 사용자 지정 테마로 저장합니다.

Amazon Quick Sight 임베딩 SDK를 사용하는 경우 페이지의 생성형 Q&A 환경은 상태에 따라 동적으로 크기가 조정됩니다. Amazon Quick Sight 임베딩 SDK를 사용하면 생성형 Q&A 환경 내에서 파라미터를 제어하고 페이지 로드 완료, 상태 변경 및 오류 측면에서 콜백을 수신할 수도 있습니다.

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

#### SDK 2.0
<a name="embedded-analytics-gen-bi-anonymous-users-sdkv2"></a>

```
<!DOCTYPE html>
<html>
    <head>
        <title>Generative Q&A Embedding Example</title>
        <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@2.7.0/dist/quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            const embedGenerativeQnA = 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>", // replace this value with the url generated via embedding API
                    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 = {
                    // Optional panel settings. Default behavior is equivalent to {panelType: 'FULL'}
                    panelOptions: {
                        panelType: 'FULL',
                        title: 'custom title', // Optional
                        showQIcon: false, // Optional, Default: true
                    },
                    // Use SEARCH_BAR panel type for the landing state to be similar to embedQSearchBar
                    // with generative capability enabled topics
                    /*
                    panelOptions: {
                        panelType: 'SEARCH_BAR',
                        focusedHeight: '250px',
                        expandedHeight: '500px',
                    },
                    */
                    showTopicName: false, // Optional, Default: true
                    showPinboard: false, // Optional, Default: true
                    allowTopicSelection: false, // Optional, Default: true
                    allowFullscreen: false, // Optional, Default: true
                    searchPlaceholderText: "custom search placeholder", // Optional
                    themeOptions: { // Optional
                        themeArn: 'arn:aws:quicksight:<Region>:<AWS-Account-ID>:theme/<Theme-ID>'
                    }
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                // called when pinboard is shown / visuals are rendered
                                console.log("Do something when SEARCH_BAR type panel is expanded");
                                break;
                            }
                            case 'Q_SEARCH_FOCUSED': {
                                // called when question suggestions or topic selection dropdown are shown
                                console.log("Do something when SEARCH_BAR type panel is focused");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                // called when shrinked to initial bar height
                                console.log("Do something when SEARCH_BAR type panel is collapsed");
                                break;
                            }
                            case 'Q_PANEL_ENTERED_FULLSCREEN': {
                                console.log("Do something when panel enters full screen mode");
                                break;
                            }
                            case 'Q_PANEL_EXITED_FULLSCREEN': {
                                console.log("Do something when panel exits full screen mode");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something after experience is loaded");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when experience fails to load");
                                break;
                            }
                        }
                    }
                };
                const embeddedGenerativeQnExperience = await embeddingContext.embedGenerativeQnA(frameOptions, contentOptions);
            };
        </script>
    </head>

    <body onload="embedGenerativeQnA()">
        <div id="experience-container"></div>
    </body>

</html>
```

이 예제가 작동하려면 Amazon Quick Sight 임베딩 SDK를 사용하여 JavaScript를 사용하여 웹 사이트에서 임베디드 생성형 Q&A 환경을 로드해야 합니다. 이 정보를 얻으려면 다음 중 하나를 수행합니다.
+ 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
  ```

### 임베디드 생성형 Q&A 환경 기능 옵션
<a name="embedded-analytics-gen-bi-anonymous-users-step-4"></a>

임베딩 SDK를 사용하여 임베디드 생성형 Q&A 환경에 기능 옵션을 사용할 수 있습니다.

#### 생성형 Q&A 검색 표시줄 작업 호출
<a name="w2aac35c27c21c43c29c13c25b5"></a>
+ 질문 설정 - 이 기능은 생성형 Q&A 환경에 질문을 전송하고 즉시 질문을 쿼리합니다.

  ```
  embeddedGenerativeQnExperience.setQuestion('show me monthly revenue');
  ```
+ 응답 패널 닫기(생성형 Q&A 검색 표시줄 옵션에 적용) - 이 기능은 응답 패널을 닫고 iframe을 원래 검색 표시줄 상태로 되돌립니다.

  ```
  embeddedGenerativeQnExperience.close();
  ```

자세한 내용은 [Amazon Quick Sight 임베딩 SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk)를 참조하세요.

# Amazon Quick Sight Q 검색 창 임베딩(클래식)
<a name="embedding-quicksight-q"></a>


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

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

다음 주제를 사용하여 Amazon Quick Sight APIs에 Amazon Quick Sight Q 검색 창을 포함하는 방법에 대해 알아봅니다.

**Topics**
+ [

# 등록된 사용자를 위한 Amazon Quick Sight Q 검색 창 임베딩
](embedded-analytics-q-search-bar-for-authenticated-users.md)
+ [

# 익명(미등록) 사용자를 위한 Amazon Quick Sight Q 검색 창 임베딩
](embedded-analytics-q-search-bar-for-anonymous-users.md)

# 등록된 사용자를 위한 Amazon Quick Sight Q 검색 창 임베딩
<a name="embedded-analytics-q-search-bar-for-authenticated-users"></a>


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


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

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) 참조하세요.

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

**Topics**
+ [

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

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

## 3단계: Q 검색 창 URL 포함
](#embedded-q-bar-for-authenticated-users-step-3)
+ [

## 선택적 Amazon Quick Sight Q 검색 창 임베딩 기능
](#embedded-q-bar-for-authenticated-users-step-4)

## 1단계: 권한 설정
<a name="embedded-q-bar-for-authenticated-users-step-1"></a>

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) 참조하세요.

다음 단원에서 임베디드 Q 검색 창에 백엔드 애플리케이션 또는 웹 서버의 권한을 설정하는 방법을 알아봅니다. 이 작업을 수행하려면 AWS Identity and Access Management (IAM)에 대한 관리 액세스 권한이 필요합니다.

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

와일드카드 문자 \$1를 사용하여, 특정 네임스페이스의 모든 사용자에 대해 URL을 생성할 권한을 부여할 수 있습니다. 또는 특정 네임스페이스에 있는 사용자 하위 집합에 대해 URL을 생성할 권한을 부여할 수 있습니다. 이를 위해 `quicksight:GenerateEmbedUrlForRegisteredUser`을(를) 추가합니다.

IAM 정책에 개발자가 `GenerateEmbedUrlForRegisteredUser` API 작업의 `AllowedDomains` 파라미터에 나열할 수 있는 도메인을 제한하는 조건을 만들 수 있습니다. `AllowedDomains` 파라미터는 선택 파라미터입니다. 개발자에게 **Amazon Quick Sight 관리** 메뉴에 구성된 정적 도메인을 재정의하고 생성된 URL에 액세스할 수 있는 최대 3개의 도메인 또는 하위 도메인을 나열할 수 있는 옵션을 부여합니다. 그러면 이 URL이 개발자 웹 사이트에 포함됩니다. 파라미터에 나열된 도메인만 임베디드 Q 검색 창에 액세스할 수 있습니다. 이 조건이 없으면, 개발자는 인터넷에 있는 모든 도메인을 `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 또는 Security Assertion Markup Language(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 생성
<a name="embedded-q-bar-for-authenticated-users-step-2"></a>

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) 참조하세요.

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

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

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

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

### Java
<a name="embedded-q-bar-for-embedded-q-bar-for-authenticated-users-java"></a>

```
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.RegisteredUserQSearchBarEmbeddingConfiguration;

        /**
 * Class to call QuickSight AWS SDK to get url for embedding the Q search bar.
        */
public class RegisteredUserQSearchBarEmbeddingConfiguration {

            private final AmazonQuickSight quickSightClient;

    public RegisteredUserQSearchBarEmbeddingConfiguration() {
        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 topicId, // Topic 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 how to get user arn for a QuickSight user.
            ) throws Exception {
        final RegisteredUserEmbeddingExperienceConfiguration experienceConfiguration = new RegisteredUserEmbeddingExperienceConfiguration()
                .withQSearchBar(new RegisteredUserQSearchBarEmbeddingConfiguration().withInitialTopicId(topicId));
        final GenerateEmbedUrlForRegisteredUserRequest generateEmbedUrlForRegisteredUserRequest = new GenerateEmbedUrlForRegisteredUserRequest();
        generateEmbedUrlForRegisteredUserRequest.setAwsAccountId(accountId);
        generateEmbedUrlForRegisteredUserRequest.setUserArn(userArn);
        generateEmbedUrlForRegisteredUserRequest.setAllowedDomains(allowedDomains);
        generateEmbedUrlForRegisteredUserRequest.setExperienceConfiguration(QSearchBar);

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

### JavaScript
<a name="embedded-q-bar-for-embedded-q-bar-for-authenticated-users-js"></a>

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

function generateEmbedUrlForRegisteredUser(
    accountId,
    topicId, // Topic ID to embed
    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 getQSearchBarParams = {
        "AwsAccountId": accountId,
                "ExperienceConfiguration": {
                    "QSearchBar": {
                        "InitialTopicId": topicId
                    }
                },
                "UserArn": userArn,
        "AllowedDomains": allowedDomains,
        "SessionLifetimeInMinutes": 600
    };

            const quicksightGetQSearchBar = 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
                }
    });

            quicksightGetQSearchBar.generateEmbedUrlForRegisteredUser(getQSearchBarParams, 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
<a name="embedded-q-bar-for-embedded-q-bar-for-authenticated-users-python"></a>

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

sts = boto3.client('sts')

# Function to generate embedded URL  
# accountId: AWS account ID
# topicId: Topic 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, topicId, 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 = {
                    "QSearchBar": {
                        "InitialTopicId": topicId
                    }
                },
                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
<a name="embedded-q-bar-for-embedded-q-bar-for-authenticated-users-node"></a>

다음 예제는 앱 서버에서 임베디드 대시보드에 대한 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': { 
        'QSearchBar': {
            'InitialTopicId': 'U4zJMVZ2n2stZflc8Ou3iKySEb3BEV6f'
        }
    },
    '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/sheets/12345/visuals/67890...",
        RequestId: '7bee030e-f191-45c4-97fe-d9faf0e03713' 
    }
```

### .NET/C\$1
<a name="embedded-q-bar-for-embedded-q-bar-for-authenticated-users-cs"></a>

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

**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
            {
                RegisteredUserQSearchBarEmbeddingConfiguration registeredUserQSearchBarEmbeddingConfiguration
                    = new RegisteredUserQSearchBarEmbeddingConfiguration
                    {
                        InitialTopicId = "U4zJMVZ2n2stZflc8Ou3iKySEb3BEV6f"
                    };
                RegisteredUserEmbeddingExperienceConfiguration registeredUserEmbeddingExperienceConfiguration
                    = new RegisteredUserEmbeddingExperienceConfiguration
                    {
                        QSearchBar = registeredUserQSearchBarEmbeddingConfiguration
                    }; 
                
                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
<a name="embedded-q-bar-for-embedded-q-bar-for-authenticated-users-cli"></a>

역할을 수임하려면 다음 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`에 대한 권한이 활성화되어 있어야 합니다. 사용자가 Q 검색 창의 주제를 사용할 때 사용자를 추가하는 적시 접근 방식을 취하려면, 역할에 `quicksight:RegisterUser`에 대한 사용 권한도 활성화해야 합니다.

```
aws sts assume-role \
     --role-arn "arn:aws:iam::111122223333:role/embedding_quicksight_q_search_bar_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_q_search_bar_role/john.doe@example.com`으로 설정합니다. 역할 세션 ID는 `role-arn`의 역할 이름과 `role-session-name` 값으로 구성됩니다. 각 사용자에 대해 적절한 권한을 설정하려면 각 사용자에 대해 고유한 역할 세션 ID를 사용해야 합니다. 또한 사용자 액세스 조절을 방지할 수 있습니다. *조절*은 동일한 사용자가 여러 위치에서 Amazon Quick Sight에 액세스하지 못하도록 하는 보안 기능입니다.

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

다음 예에서는 사용자를 프로비저닝하는 데 사용할 수 있는 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_q_search_bar_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 사용자의 경우 사용자 Amazon 리소스 이름(ARN)을 얻는 데 `DescribeUser`을(를) 사용할 수 있습니다.

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

```
aws quicksight create-group-membership \
    --aws-account-id=111122223333 \
    --namespace=default \
    --group-name=financeusers \
    --member-name="embedding_quicksight_q_search_bar_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_q_search_bar_role/embeddingsession
--allowed-domains '["domain1","domain2"]' \
--experience-configuration QSearchBar={InitialTopicId=U4zJMVZ2n2stZflc8Ou3iKySEb3BEV6f}
```

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

## 3단계: Q 검색 창 URL 포함
<a name="embedded-q-bar-for-authenticated-users-step-3"></a>

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

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

앱에 포함할 수 있는 URL을 생성하러면, `GenerateEmbedUrlForRegisteredUser` API 작업을 직접 호출하세요. 이 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/embedding/12345/q/search...",
     "RequestId": "7bee030e-f191-45c4-97fe-d9faf0e03713"
}
```

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

이렇게 하려면 임베디드 Q 검색 창을 호스팅할 도메인이 Amazon Quick Sight 구독에 대해 승인된 도메인 목록인 *허용 목록에* 있는지 확인합니다. 이 요건은 임베디드 대시보드에서 미승인 도메인을 제외함으로써 데이터를 보호합니다. 임베디드 Q 검색 창에 대한 도메인 추가에 대한 자세한 내용은 [도메인 관리 및 임베딩](https://docs.aws.amazon.com/quicksight/latest/user/manage-qs-domains-and-embedding.html)을 참조하세요.

Amazon Quick Sight 임베딩 SDK를 사용하는 경우 페이지의 Q 검색 창은 상태에 따라 동적으로 크기가 조정됩니다. Amazon Quick Sight 임베딩 SDK를 사용하면 Q 검색 창에서 파라미터를 제어하고 페이지 로드 완료 및 오류 측면에서 콜백을 수신할 수도 있습니다.

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

### SDK 2.0
<a name="embedded-q-bar-for-authenticated-users-sdkv2"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>Q Search Bar 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 embedQSearchBar = 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>", // replace this value with the url generated via embedding API
                    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 = {
                    hideTopicName: false, 
                    theme: '<YOUR_THEME_ID>',
                    allowTopicSelection: true,
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                console.log("Do something when Q Search content expanded");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                console.log("Do something when Q Search content collapsed");
                                break;
                            }
                            case 'Q_SEARCH_SIZE_CHANGED': {
                                console.log("Do something when Q Search size changed");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something when the Q Search is loaded.");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when the Q Search fails loading.");
                                break;
                            }
                        }
                    }
                };
                const embeddedDashboardExperience = await embeddingContext.embedQSearchBar(frameOptions, contentOptions);
            };
        </script>
    </head>

    <body onload="embedQSearchBar()">
        <div id="experience-container"></div>
    </body>

</html>
```

### SDK 1.0
<a name="embedded-q-bar-for-authenticated-users-sdkv1"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>QuickSight Q Search Bar Embedding</title>
        <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@1.18.0/dist/quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            var session

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

            function onOpen() {
                console.log("Do something when the Q search bar opens");
            }

            function onClose() {
                console.log("Do something when the Q search bar closes");
            }

            function embedQSearchBar() {
                var containerDiv = document.getElementById("embeddingContainer");
                var options = {
                    url: "https://us-east-1.quicksight.aws.amazon.com/sn/dashboards/dashboardId?isauthcode=true&identityprovider=quicksight&code=authcode", // replace this dummy url with the one generated via embedding API
                    container: containerDiv,
                    width: "1000px",
                    locale: "en-US",
                    qSearchBarOptions: {
                        expandCallback: onOpen,
                        collapseCallback: onClose,
                        iconDisabled: false,
                        topicNameDisabled: false, 
                        themeId: 'bdb844d0-0fe9-4d9d-b520-0fe602d93639',
                        allowTopicSelection: true
                    }
                };
                session = QuickSightEmbedding.embedQSearchBar(options);
                session.on("error", onError);
            }

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

    <body onload="embedQSearchBar()">
        <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 Q 검색 창 임베딩 기능
<a name="embedded-q-bar-for-authenticated-users-step-4"></a>

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) 참조하세요.

임베딩 SDK를 사용하여 내장된 Q 검색 창에 다음과 같은 선택적 기능을 사용할 수 있습니다.

### Q 검색 창 작업 간접 호출
<a name="w2aac35c27c21c43c31c15c21b7"></a>

다음 옵션은 Q 검색 창 임베딩에만 지원됩니다.
+ Q 검색 창 질문 설정 - 이 기능은 질문을 Q 검색 창으로 보내고 질문을 즉시 쿼리합니다. 또한 Q 팝오버도 자동으로 열립니다.

  ```
  qBar.setQBarQuestion('show me monthly revenue');
  ```
+ Q 팝오버 닫기 - 이 기능은 Q 팝오버를 닫고 iframe을 원래 Q 검색창 크기로 되돌립니다.

  ```
  qBar.closeQPopover();
  ```

자세한 내용은 [Amazon Quick Sight 임베딩 SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk)를 참조하세요.

# 익명(미등록) 사용자를 위한 Amazon Quick Sight Q 검색 창 임베딩
<a name="embedded-analytics-q-search-bar-for-anonymous-users"></a>


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

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) 참조하세요.

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

**Topics**
+ [

## 1단계: 권한 설정
](#embedded-q-bar-for-anonymous-users-step-1)
+ [

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

## 3단계: Q 검색 창 URL 포함
](#embedded-q-bar-for-anonymous-users-step-3)
+ [

## 선택적 Amazon Quick Sight Q 검색 창 임베딩 기능
](#embedded-q-bar-for-anonymous-users-step-4)

## 1단계: 권한 설정
<a name="embedded-q-bar-for-anonymous-users-step-1"></a>

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) 참조하세요.

다음 단원에서 임베디드 Q 검색 창에 백엔드 애플리케이션 또는 웹 서버의 권한을 설정하는 방법을 알아봅니다. 이 작업을 수행하려면 AWS Identity and Access Management (IAM)에 대한 관리 액세스 권한이 필요합니다.

Q 검색 창에 액세스하는 각 사용자는 Amazon Quick Sight에 Q 검색 창에 대한 액세스 및 권한을 부여하는 역할을 수임합니다. 이렇게 하려면에서 IAM 역할을 생성합니다 AWS 계정. IAM 정책을 역할과 연결하여 역할을 수행하는 사용자에게 권한을 제공합니다. IAM 역할은 특정 사용자 풀의 임베딩 URL을 검색할 수 있는 권한을 제공해야 합니다.

와일드카드 문자 \$1를 사용하여, 특정 네임스페이스의 모든 사용자에 대해 URL을 생성할 권한을 부여할 수 있습니다. 또는 특정 네임스페이스에 있는 사용자 하위 집합에 대해 URL을 생성할 권한을 부여할 수 있습니다. 이를 위해 `quicksight:GenerateEmbedUrlForAnonymousUser`을(를) 추가합니다.

IAM 정책에 개발자가 `GenerateEmbedUrlForAnonymousUser` API 작업의 `AllowedDomains` 파라미터에 나열할 수 있는 도메인을 제한하는 조건을 만들 수 있습니다. `AllowedDomains` 파라미터는 선택 파라미터입니다. 개발자에게 **Amazon Quick Sight 관리** 메뉴에 구성된 정적 도메인을 재정의하고 생성된 URL에 액세스할 수 있는 최대 3개의 도메인 또는 하위 도메인을 나열할 수 있는 옵션을 부여합니다. 그러면 이 URL이 개발자 웹 사이트에 포함됩니다. 파라미터에 나열된 도메인만 임베디드 Q 검색 창에 액세스할 수 있습니다. 이 조건이 없으면, 개발자는 인터넷에 있는 모든 도메인을 `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 정책이 적절한 조건 연산자를 사용하여 우회 취약성을 방지하고 의도한 도메인만 임베디드 리소스에 액세스할 수 있는지 확인해야 합니다.

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

------
#### [ 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 생성
<a name="embedded-q-bar-for-anonymous-users-step-2"></a>

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

다음 단원에서는 사용자를 인증하고 애플리케이션 서버에서 임베딩 가능한 Q 주제 URL을 가져오는 방법을 알아볼 수 있습니다.

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

자세한 내용은 [https://docs.aws.amazon.com/quicksight/latest/APIReference/AnonymousUserQSearchBarEmbeddingConfiguration.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/AnonymousUserQSearchBarEmbeddingConfiguration.html) 단원을 참조하십시오.

### Java
<a name="embedded-q-bar-for-anonymous-users-java"></a>

```
        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.AnonymousUserQSearchBarEmbeddingConfiguration;
        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 initialTopicId, // Q TOPIC ID TO WHICH THE CONSTRUCTED URL POINTS AND SEARCHBAR PREPOPULATES INITIALLY
                final String namespace, // ANONYMOUS EMBEDDING REQUIRES SPECIFYING A VALID NAMESPACE FOR WHICH YOU WANT THE EMBEDDING URL
                final List<String> authorizedResourceArns, // Q SEARCHBAR TOPIC 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();
                AnonymousUserQSearchBarEmbeddingConfiguration qSearchBarConfiguration = new AnonymousUserQSearchBarEmbeddingConfiguration();
                qSearchBarConfiguration.setInitialTopicId(initialTopicId);
                experienceConfiguration.setQSearchBar(qSearchBarConfiguration);

                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 qSearchBarEmbedUrl = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

                return qSearchBarEmbedUrl.getEmbedUrl();
            }

        }
```

### JavaScript
<a name="embedded-q-bar-for-anonymous-users-js"></a>

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

function generateEmbedUrlForAnonymousUser(
    accountId, // YOUR AWS ACCOUNT ID
    initialTopicId, // Q TOPIC ID TO WHICH THE CONSTRUCTED URL POINTS
    quicksightNamespace, // VALID NAMESPACE WHERE YOU WANT TO DO NOAUTH EMBEDDING
    authorizedResourceArns, // Q SEARCHBAR TOPIC ARN LIST TO EMBED
    allowedDomains, // RUNTIME ALLOWED DOMAINS FOR EMBEDDING
    sessionTags, // SESSION TAGS USED FOR ROW-LEVEL SECURITY
    generateEmbedUrlForAnonymousUserCallback, // SUCCESS CALLBACK METHOD
    errorCallback // ERROR CALLBACK METHOD
    ) {
    const experienceConfiguration = {
        "QSearchBar": {
            "InitialTopicId": initialTopicId // TOPIC ID CAN BE FOUND IN THE URL ON THE TOPIC AUTHOR PAGE
        }
    };
    
    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
<a name="embedded-q-bar-for-anonymous-users-py"></a>

```
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: TOPIC ARN LIST TO EMBED
# allowedDomains: RUNTIME ALLOWED DOMAINS FOR EMBEDDING
# experienceConfiguration: configuration which specifies the TOPIC ID to point URL to
# sessionTags: SESSION TAGS USED FOR ROW-LEVEL SECURITY
def generateEmbedUrlForAnonymousUser(accountId, quicksightNamespace, authorizedResourceArns, allowedDomains, experienceConfiguration, sessionTags):
    try:
        response = quicksightClient.generate_embed_url_for_anonymous_user(
            AwsAccountId = accountId,
            Namespace = quicksightNamespace,
            AuthorizedResourceArns = authorizedResourceArns,
            AllowedDomains = allowedDomains,
            ExperienceConfiguration = experienceConfiguration,
            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
<a name="embedded-q-bar-for-anonymous-users-nodejs"></a>

다음 예제는 앱 서버에서 임베디드 대시보드에 대한 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': '["topic-arn-topicId1","topic-arn-topicId2"]',
    'AllowedDomains': allowedDomains,
    'ExperienceConfiguration': { 
        'QSearchBar': {
            'InitialTopicId': 'U4zJMVZ2n2stZflc8Ou3iKySEb3BEV6f'
        }
    },
    'SessionTags': '["Key": tag-key-1,"Value": tag-value-1,{"Key": tag-key-1,"Value": tag-value-1}]',
    'SessionLifetimeInMinutes': 15
}, 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/sheets/12345/visuals/67890...',
        RequestId: '7bee030e-f191-45c4-97fe-d9faf0e03713' 
    }
```

### .NET/C\$1
<a name="embedded-q-bar-for-anonymous-users-cs"></a>

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

**Example**  

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

namespace GenerateQSearchBarEmbedUrlForAnonymousUser
{
    class Program
    {
        static void Main(string[] args)
        {
            var quicksightClient = new AmazonQuickSightClient(
                AccessKey,
                SecretAccessKey,
                SessionToken,
                Amazon.RegionEndpoint.USEast1);
            try
            {
                AnonymousUserQSearchBarEmbeddingConfiguration anonymousUserQSearchBarEmbeddingConfiguration
                    = new AnonymousUserQSearchBarEmbeddingConfiguration
                    {
                        InitialTopicId = "U4zJMVZ2n2stZflc8Ou3iKySEb3BEV6f"
                    };
                AnonymousUserEmbeddingExperienceConfiguration anonymousUserEmbeddingExperienceConfiguration
                    = new AnonymousUserEmbeddingExperienceConfiguration
                    {
                        QSearchBar = anonymousUserQSearchBarEmbeddingConfiguration
                    }; 
                
                Console.WriteLine(
                    quicksightClient.GenerateEmbedUrlForAnonymousUserAsync(new GenerateEmbedUrlForAnonymousUserRequest
                    {
                        AwsAccountId = "111122223333",
                        Namespace = "DEFAULT",
                        AuthorizedResourceArns '["topic-arn-topicId1","topic-arn-topicId2"]',
                        AllowedDomains = allowedDomains,
                        ExperienceConfiguration = anonymousUserEmbeddingExperienceConfiguration,
                        SessionTags = '["Key": tag-key-1,"Value": tag-value-1,{"Key": tag-key-1,"Value": tag-value-1}]',
                        SessionLifetimeInMinutes = 15,
                    }).Result.EmbedUrl
                );
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
        }
    }
}
```

### AWS CLI
<a name="embedded-q-bar-for-anonymous-users-cli"></a>

역할을 수임하려면 다음 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:GenerateEmbedUrlForAnonymousUser`에 대한 권한이 활성화되어 있어야 합니다.

```
aws sts assume-role \
     --role-arn "arn:aws:iam::111122223333:role/embedding_quicksight_q_search_bar_role" \
     --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_q_search_bar_role/QuickSightEmbeddingAnonymousPolicy`으로 설정합니다. 역할 세션 ID는 `role-arn`의 역할 이름과 `role-session-name` 값으로 구성됩니다. 각 사용자에 대해 적절한 권한을 설정하려면 각 사용자에 대해 고유한 역할 세션 ID를 사용해야 합니다. 또한 사용자 액세스 조절을 방지할 수 있습니다. *조절*은 동일한 사용자가 여러 위치에서 Amazon Quick Sight에 액세스하지 못하도록 하는 보안 기능입니다. 또한 각 세션을 분리하고 구분할 수 있습니다. 로드 밸런싱 등을 위해 여러 웹 서버를 사용하는 경우, 세션이 다른 서버에 다시 연결되면 새 세션이 시작됩니다.

대시보드에 대해 서명된 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 \
--authorized-resource-arns '["topic-arn-topicId1","topic-arn-topicId2"]' \
--allowed-domains '["domain1","domain2"]' \
--experience-configuration 'QSearchBar={InitialTopicId="topicId1"}' \
--session-tags '["Key": tag-key-1,"Value": tag-value-1,{"Key": tag-key-1,"Value": tag-value-1}]' \
--session-lifetime-in-minutes 15
```

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

## 3단계: Q 검색 창 URL 포함
<a name="embedded-q-bar-for-anonymous-users-step-3"></a>

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) 참조하세요.

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

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

다음은 `generate-embed-url-for-anonymous-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/embedding/12345/q/search...",
     "RequestId": "7bee030e-f191-45c4-97fe-d9faf0e03713"
}
```

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

이렇게 하려면 임베디드 Q 검색 창을 호스팅할 도메인이 Amazon Quick Sight 구독에 대해 승인된 도메인 목록인 *허용 목록에* 있는지 확인합니다. 이 요건은 임베디드 Q 검색 창에서 미승인 도메인을 제외함으로써 데이터를 보호합니다. 임베디드 Q 검색 창에 대한 도메인 추가에 대한 자세한 내용은 [도메인 관리 및 임베딩](https://docs.aws.amazon.com/quicksight/latest/user/manage-qs-domains-and-embedding.html)을 참조하세요.

Amazon Quick Sight 임베딩 SDK를 사용하는 경우 페이지의 Q 검색 창은 상태에 따라 동적으로 크기가 조정됩니다. Amazon Quick Sight 임베딩 SDK를 사용하면 Q 검색 창에서 파라미터를 제어하고 페이지 로드 완료 및 오류 측면에서 콜백을 수신할 수도 있습니다.

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

### SDK 2.0
<a name="embedded-q-bar-for-anonymous-users-sdkv2"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>Q Search Bar 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 embedQSearchBar = 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>", // replace this value with the url generated via embedding API
                    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 = {
                    hideTopicName: false, 
                    theme: '<YOUR_THEME_ID>',
                    allowTopicSelection: true,
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                console.log("Do something when Q Search content expanded");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                console.log("Do something when Q Search content collapsed");
                                break;
                            }
                            case 'Q_SEARCH_SIZE_CHANGED': {
                                console.log("Do something when Q Search size changed");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something when the Q Search is loaded.");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when the Q Search fails loading.");
                                break;
                            }
                        }
                    }
                };
                const embeddedDashboardExperience = await embeddingContext.embedQSearchBar(frameOptions, contentOptions);
            };
        </script>
    </head>

    <body onload="embedQSearchBar()">
        <div id="experience-container"></div>
    </body>

</html>
```

### SDK 1.0
<a name="embedded-q-bar-for-anonymous-users-sdkv1"></a>

```
<!DOCTYPE html>
<html>

    <head>
        <title>QuickSight Q Search Bar Embedding</title>
        <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@1.18.0/dist/quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            var session

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

            function onOpen() {
                console.log("Do something when the Q search bar opens");
            }

            function onClose() {
                console.log("Do something when the Q search bar closes");
            }

            function embedQSearchBar() {
                var containerDiv = document.getElementById("embeddingContainer");
                var options = {
                    url: "https://us-east-1.quicksight.aws.amazon.com/sn/dashboards/dashboardId?isauthcode=true&identityprovider=quicksight&code=authcode", // replace this dummy url with the one generated via embedding API
                    container: containerDiv,
                    width: "1000px",
                    locale: "en-US",
                    qSearchBarOptions: {
                        expandCallback: onOpen,
                        collapseCallback: onClose,
                        iconDisabled: false,
                        topicNameDisabled: false, 
                        themeId: 'bdb844d0-0fe9-4d9d-b520-0fe602d93639',
                        allowTopicSelection: true
                    }
                };
                session = QuickSightEmbedding.embedQSearchBar(options);
                session.on("error", onError);
            }

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

    <body onload="embedQSearchBar()">
        <div id="embeddingContainer"></div>
    </body>

</html>
```

이 예제가 작동하려면 Amazon Quick Sight 임베딩 SDK를 사용하여 JavaScript를 사용하여 웹 사이트에 임베디드 Q 검색 창을 로드해야 합니다. 이 정보를 얻으려면 다음 중 하나를 수행합니다.
+ 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 Q 검색 창 임베딩 기능
<a name="embedded-q-bar-for-anonymous-users-step-4"></a>

**참고**  
임베디드 Amazon Quick Sight Q 검색 창은 클래식 Amazon Quick Sight Q&A 환경을 제공합니다. Amazon Quick Sight는 Amazon Q Business와 통합되어 새로운 생성형 Q&A 환경을 시작합니다. 개발자는 새로운 생성형 Q&A 환경을 사용하는 것이 좋습니다. 임베디드 생성형 Q&A 환경에 대한 자세한 내용은 [Amazon Quick Sight 생성형 Q&A 환경에 Amazon Q 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

임베딩 SDK를 사용하여 내장된 Q 검색 창에 다음과 같은 선택적 기능을 사용할 수 있습니다.

### Q 검색 창 작업 간접 호출
<a name="w2aac35c27c21c43c31c17c21b7"></a>

다음 옵션은 Q 검색 창 임베딩에만 지원됩니다.
+ Q 검색 창 질문 설정 - 이 기능은 질문을 Q 검색 창으로 보내고 질문을 즉시 쿼리합니다. 또한 Q 팝오버도 자동으로 열립니다.

  ```
  qBar.setQBarQuestion('show me monthly revenue');
  ```
+ Q 팝오버 닫기 - 이 기능은 Q 팝오버를 닫고 iframe을 원래 Q 검색창 크기로 되돌립니다.

  ```
  qBar.closeQPopover();
  ```

자세한 내용은 [Amazon Quick Sight 임베딩 SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk)를 참조하세요.

# GetDashboardEmbedURL 및 GetSessionEmbedURL API 작업을 사용한 분석 기능 임베딩
<a name="embedded-analytics-deprecated"></a>


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


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

Amazon Quick Sight 대시보드 및 Amazon Quick Sight 콘솔을 임베딩하기 위한 다음 API 작업은 GenerateEmbedUrlForAnonymousUser 및 GenerateEmbedUrlForRegisteredUser API 작업으로 대체되었습니다. 여전히 이를 사용하여 애플리케이션에 분석을 임베드할 수는 있지만 더 이상 유지 관리되지 않으며 최신 임베딩 기능을 포함하지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).
+ [GetDashboardEmbedUrl](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html) API 작업에는 대화형 대시보드가 포함되어 있습니다.
+ [GetSessionEmbedUrl](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetSessionEmbedUrl.html) API 작업은 Amazon Quick Sight 콘솔을 포함합니다.

**Topics**
+ [

# (기존 API) GetDashboardEmbedURL을(를) 사용하는 모든 사용자를 위한 대시보드 임베딩
](embedded-analytics-dashboards-with-anonymous-users-get.md)
+ [

# GetDashboardEmbedUrl(이전 API)을 사용하는 등록된 사용자를 위한 대시보드 임베딩
](embedded-analytics-dashboards-for-authenticated-users-get.md)
+ [

# GetSessionEmbedUrl (이전 API)를 사용하여 Amazon Quick Sight 콘솔 임베딩
](embedded-analytics-full-console-for-authenticated-users-get.md)

# (기존 API) GetDashboardEmbedURL을(를) 사용하는 모든 사용자를 위한 대시보드 임베딩
<a name="embedded-analytics-dashboards-with-anonymous-users-get"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


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


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

다음 섹션에서는 GetDashboardEmbedURL을 사용하여 모든 사용자(인증되지 않은 사용자)를 위해 임베디드 Amazon Quick Sight 대시보드를 설정하는 방법에 대한 자세한 정보를 확인할 수 있습니다.

**Topics**
+ [

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

# 2단계: 인증 코드가 첨부된 URL 가져오기
](embedded-analytics-dashboards-with-anonymous-users-get-step-2.md)
+ [

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

# 1단계: 권한 설정
<a name="embedded-analytics-dashboards-with-anonymous-users-get-step-1"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


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


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

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

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

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

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
              "quicksight:GetDashboardEmbedUrl",
              "quickSight:GetAnonymousUserEmbedUrl"
            ],
            "Resource": "*"
        }
    ]
}
```

------

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

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

# 2단계: 인증 코드가 첨부된 URL 가져오기
<a name="embedded-analytics-dashboards-with-anonymous-users-get-step-2"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


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


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

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

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

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

------
#### [ 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.GetDashboardEmbedUrlRequest;
import com.amazonaws.services.quicksight.model.GetDashboardEmbedUrlResult;

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

    private static String ANONYMOUS = "ANONYMOUS";

    private final AmazonQuickSight quickSightClient;

    public GetQuicksightEmbedUrlNoAuth() {
        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, // YOUR AWS ACCOUNT ID
            final String dashboardId, // YOUR DASHBOARD ID TO EMBED
            final String addtionalDashboardIds, // ADDITIONAL DASHBOARD-1 ADDITIONAL DASHBOARD-2
            final boolean resetDisabled, // OPTIONAL PARAMETER TO ENABLE DISABLE RESET BUTTON IN EMBEDDED DASHBAORD
            final boolean undoRedoDisabled // OPTIONAL PARAMETER TO ENABLE DISABLE UNDO REDO BUTTONS IN EMBEDDED DASHBAORD
    ) throws Exception {
        GetDashboardEmbedUrlRequest getDashboardEmbedUrlRequest = new GetDashboardEmbedUrlRequest()
                .withDashboardId(dashboardId)
                .withAdditionalDashboardIds(addtionalDashboardIds)
                .withAwsAccountId(accountId)
                .withNamespace("default") // Anonymous embedding requires specifying a valid namespace for which you want the embedding url
                .withIdentityType(ANONYMOUS)
                .withResetDisabled(resetDisabled)
                .withUndoRedoDisabled(undoRedoDisabled);

        GetDashboardEmbedUrlResult dashboardEmbedUrl = quickSightClient.getDashboardEmbedUrl(getDashboardEmbedUrlRequest);

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

------
#### [ JavaScript ]

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

function getDashboardEmbedURL(
    accountId, // YOUR AWS ACCOUNT ID
    dashboardId, // YOUR DASHBOARD ID TO EMBED
    additionalDashboardIds, // ADDITIONAL DASHBOARD-1 ADDITIONAL DASHBOARD-2
    quicksightNamespace, // VALID NAMESPACE WHERE YOU WANT TO DO NOAUTH EMBEDDING
    resetDisabled, // OPTIONAL PARAMETER TO ENABLE DISABLE RESET BUTTON IN EMBEDDED DASHBAORD
    undoRedoDisabled, // OPTIONAL PARAMETER TO ENABLE DISABLE UNDO REDO BUTTONS IN EMBEDDED DASHBAORD
    getEmbedUrlCallback, // GETEMBEDURL SUCCESS CALLBACK METHOD
    errorCallback // GETEMBEDURL ERROR CALLBACK METHOD
    ) {
    const getDashboardParams = {
        AwsAccountId: accountId,
        DashboardId: dashboardId,
        AdditionalDashboardIds: additionalDashboardIds,
        Namespace: quicksightNamespace,
        IdentityType: 'ANONYMOUS',
        ResetDisabled: resetDisabled,
        SessionLifetimeInMinutes: 600,
        UndoRedoDisabled: undoRedoDisabled
    };

    const quicksightGetDashboard = new AWS.QuickSight({
        region: process.env.AWS_REGION,
    });

    quicksightGetDashboard.getDashboardEmbedUrl(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
import time

# Create QuickSight and STS clients
qs = boto3.client('quicksight',region_name='us-east-1')
sts = boto3.client('sts')

# Function to generate embedded URL
# accountId: YOUR AWS ACCOUNT ID
# dashboardId: YOUR DASHBOARD ID TO EMBED
# additionalDashboardIds: ADDITIONAL DASHBOARD-1 ADDITIONAL DASHBOARD-2 WITHOUT COMMAS
# quicksightNamespace: VALID NAMESPACE WHERE YOU WANT TO DO NOAUTH EMBEDDING
# resetDisabled: PARAMETER TO ENABLE DISABLE RESET BUTTON IN EMBEDDED DASHBAORD
# undoRedoDisabled: OPTIONAL PARAMETER TO ENABLE DISABLE UNDO REDO BUTTONS IN EMBEDDED DASHBAORD
def getDashboardURL(accountId, dashboardId, quicksightNamespace, resetDisabled, undoRedoDisabled):
    try:
        response = qs.get_dashboard_embed_url(
            AwsAccountId = accountId,
            DashboardId = dashboardId,
            AdditionalDashboardIds = additionalDashboardIds,
            Namespace = quicksightNamespace,
            IdentityType = 'ANONYMOUS',
            SessionLifetimeInMinutes = 600,
            UndoRedoDisabled = undoRedoDisabled,
            ResetDisabled = resetDisabled
        )
            
        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 quicksight = new AWS.Service({
                apiConfig: require('./quicksight-2018-04-01.min.json'),
                region: 'us-east-1',
            });
            
            quicksight.getDashboardEmbedUrl({
                'AwsAccountId': '111122223333',
                'DashboardId': 'dashboard-id',
                'AdditionalDashboardIds': 'added-dashboard-id-1 added-dashboard-id-2 added-dashboard-id-3'
                'Namespace' : 'default',
                'IdentityType': 'ANONYMOUS',
                'SessionLifetimeInMinutes': 100,
                'UndoRedoDisabled': false,
                'ResetDisabled': true
            
            }, 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://dashboards.example.com/embed/620bef10822743fab329fb3751187d2d…
              RequestId: '7bee030e-f191-45c4-97fe-d9faf0e03713' }
```

------
#### [ .NET/C\$1 ]

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

**Example**  

```
            var client = new AmazonQuickSightClient(
                AccessKey,
                SecretAccessKey,
                sessionToken,
                Amazon.RegionEndpoint.USEast1);
            try
            {
                Console.WriteLine(
                    client.GetDashboardEmbedUrlAsync(new GetDashboardEmbedUrlRequest
                    {
                        AwsAccountId = “111122223333”,
                        DashboardId = "dashboard-id",
                        AdditionalDashboardIds = "added-dashboard-id-1 added-dashboard-id-2 added-dashboard-id-3",
                        Namespace = default,
                        IdentityType = IdentityType.ANONYMOUS,
                        SessionLifetimeInMinutes = 600,
                        UndoRedoDisabled = false,
                        ResetDisabled = true
                    }).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:GetDashboardEmbedURL`에 대한 권한이 활성화되어 있어야 합니다.

```
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을 가져오려면, 앱 서버에서 `get-dashboard-embed-url`을(를) 호출합니다. 그러면 임베드 가능한 대시보드 URL이 반환됩니다. 다음 예제는 웹 포털 또는 앱을 익명으로 방문하는 사용자에 대해 서버 측 호출을 사용하여 임베디드 대시보드의 URL을 가져오는 방법을 보여줍니다.

```
aws quicksight get-dashboard-embed-url \
     --aws-account-id 111122223333 \
     --dashboard-id dashboard-id \
     --additional-dashboard-ids added-dashboard-id-1 added-dashboard-id-2 added-dashboard-id-3
     --namespace default-or-something-else \
     --identity-type ANONYMOUS \
     --session-lifetime-in-minutes 30 \
     --undo-redo-disabled true \
     --reset-disabled true \
     --user-arn arn:aws:quicksight:us-east-1:111122223333:user/default/QuickSightEmbeddingAnonymousPolicy/embeddingsession
```

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

------

# 3단계: 대시보드 URL 임베드
<a name="embedded-analytics-dashboards-with-anonymous-users-get-step-3"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


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


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

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

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

다음은 `get-dashboard-embed-url`의 응답 예입니다.

```
//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: //dashboards.example.com/embed/620bef10822743fab329fb3751187d2d...",
     "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를 사용하면 대시보드 내에서 파라미터를 제어하고 페이지 로드 완료 및 오류 측면에서 콜백을 수신할 수도 있습니다.

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

```
<!DOCTYPE html>
<html>

<head>
    <title>Basic Embed</title>
    <!-- You can download the latest QuickSight embedding SDK version from https://www.npmjs.com/package/amazon-quicksight-embedding-sdk -->
    <!-- Or you can do "npm install amazon-quicksight-embedding-sdk", if you use npm for javascript dependencies -->
    <script src="./quicksight-embedding-js-sdk.min.js"></script>
    <script type="text/javascript">
        var dashboard;

        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,
                scrolling: "no",
                height: "700px",
                width: "1000px",
                footerPaddingEnabled: true
            };
            dashboard = QuickSightEmbedding.embedDashboard(options);
        }
    </script>
</head>

<body onload="embedDashboard()">
    <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)에서 최신 QuickSight 임베딩 SDK 버전을 다운로드하세요.
+ JavaScript 종속성에 `npm`을(를) 사용하는 경우 다음 명령을 실행하여 다운로드하고 설치합니다.

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

# GetDashboardEmbedUrl(이전 API)을 사용하는 등록된 사용자를 위한 대시보드 임베딩
<a name="embedded-analytics-dashboards-for-authenticated-users-get"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

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

**Topics**
+ [

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

# 2단계: 인증 코드가 첨부된 URL 가져오기
](embedded-dashboards-for-authenticated-users-get-step-2.md)
+ [

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

# 1단계: 권한 설정
<a name="embedded-dashboards-for-authenticated-users-get-step-1"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

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

대시보드에 액세스하는 각 사용자는 Amazon Quick Sight에 대시보드에 대한 액세스 및 권한을 부여하는 역할을 수임합니다. 이렇게 하려면 AWS 계정에서 IAM 역할을 생성합니다. IAM 정책을 역할과 연결하여 역할을 수행하는 사용자에게 권한을 제공합니다. IAM 역할은 대시보드 URL을 검색할 수 있는 권한을 제공해야 합니다. 이를 위해 `quicksight:GetDashboardEmbedUrl`을(를) 추가합니다.

다음 샘플 정책은 `IdentityType=IAM`을(를) 사용할 수 있는 권한을 제공합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "quicksight:GetDashboardEmbedUrl"
            ],
            "Resource": "*"
        }
    ]
}
```

------

다음 샘플 정책은 대시보드 URL을 검색할 수 있는 권한을 제공합니다. Amazon Quick Sight 리더로 처음 사용자를 생성하는 `quicksight:RegisterUser` 경우 정책을와 함께 사용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": "quicksight:RegisterUser",
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": "quicksight:GetDashboardEmbedUrl",
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
```

------

`QUICKSIGHT`을(를) `identityType`(으)로 사용하고 사용자의 Amazon 리소스 이름(ARN)을 제공하는 경우, 정책에서 `quicksight:GetAuthCode` 작업을 허용해야 합니다. 다음 샘플 정책은 이러한 권한을 제공합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "quicksight:GetDashboardEmbedUrl",
        "quicksight:GetAuthCode"
      ],
      "Resource": "*"
    }
  ]
}
```

------

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

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 가져오기
<a name="embedded-dashboards-for-authenticated-users-get-step-2"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

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

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

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

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

------
#### [ Java ]

```
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
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.GetDashboardEmbedUrlRequest;
import com.amazonaws.services.quicksight.model.GetDashboardEmbedUrlResult;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;

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

    private static String IAM = "IAM";

    private final AmazonQuickSight quickSightClient;

    private final AWSSecurityTokenService awsSecurityTokenService;

    public GetQuicksightEmbedUrlIAMAuth(final AWSSecurityTokenService awsSecurityTokenService) {
        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();
        this.awsSecurityTokenService = awsSecurityTokenService;
    }

    public String getQuicksightEmbedUrl(
            final String accountId, // YOUR AWS ACCOUNT ID
            final String dashboardId, // YOUR DASHBOARD ID TO EMBED
            final String openIdToken, // TOKEN TO ASSUME ROLE WITH ROLEARN
            final String roleArn, // IAM USER ROLE TO USE FOR EMBEDDING
            final String sessionName, // SESSION NAME FOR THE ROLEARN ASSUME ROLE
            final boolean resetDisabled, // OPTIONAL PARAMETER TO ENABLE DISABLE RESET BUTTON IN EMBEDDED DASHBAORD
            final boolean undoRedoDisabled // OPTIONAL PARAMETER TO ENABLE DISABLE UNDO REDO BUTTONS IN EMBEDDED DASHBAORD
    ) throws Exception {
        AssumeRoleRequest request = new AssumeRoleRequest()
                .withRoleArn(roleArn)
                .withRoleSessionName(sessionName)
                .withTokenCode(openIdToken)
                .withDurationSeconds(3600);
        AssumeRoleResult assumeRoleResult = awsSecurityTokenService.assumeRole(request);

        AWSCredentials temporaryCredentials = new BasicSessionCredentials(
                assumeRoleResult.getCredentials().getAccessKeyId(),
                assumeRoleResult.getCredentials().getSecretAccessKey(),
                assumeRoleResult.getCredentials().getSessionToken());
        AWSStaticCredentialsProvider awsStaticCredentialsProvider = new AWSStaticCredentialsProvider(temporaryCredentials);

        GetDashboardEmbedUrlRequest getDashboardEmbedUrlRequest = new GetDashboardEmbedUrlRequest()
                .withDashboardId(dashboardId)
                .withAwsAccountId(accountId)
                .withIdentityType(IAM)
                .withResetDisabled(resetDisabled)
                .withUndoRedoDisabled(undoRedoDisabled)
                .withRequestCredentialsProvider(awsStaticCredentialsProvider);

        GetDashboardEmbedUrlResult dashboardEmbedUrl = quickSightClient.getDashboardEmbedUrl(getDashboardEmbedUrlRequest);

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

------
#### [ JavaScript ]

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

function getDashboardEmbedURL(
    accountId, // YOUR AWS ACCOUNT ID
    dashboardId, // YOUR DASHBOARD ID TO EMBED
    openIdToken, // TOKEN TO ASSUME ROLE WITH ROLEARN
    roleArn, // IAM USER ROLE TO USE FOR EMBEDDING
    sessionName, // SESSION NAME FOR THE ROLEARN ASSUME ROLE
    resetDisabled, // OPTIONAL PARAMETER TO ENABLE DISABLE RESET BUTTON IN EMBEDDED DASHBAORD
    undoRedoDisabled, // OPTIONAL PARAMETER TO ENABLE DISABLE UNDO REDO BUTTONS IN EMBEDDED DASHBAORD
    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,
                DashboardId: dashboardId,
                IdentityType: 'IAM',
                ResetDisabled: resetDisabled,
                SessionLifetimeInMinutes: 600,
                UndoRedoDisabled: undoRedoDisabled
            };

            const quicksightGetDashboard = 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
                }
            });

            quicksightGetDashboard.getDashboardEmbedUrl(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

# Create QuickSight and STS clients
qs = boto3.client('quicksight',region_name='us-east-1')
sts = boto3.client('sts')

# Function to generate embedded URL  
# accountId: YOUR AWS ACCOUNT ID
# dashboardId: YOUR DASHBOARD ID TO EMBED
# openIdToken: TOKEN TO ASSUME ROLE WITH ROLEARN
# roleArn: IAM USER ROLE TO USE FOR EMBEDDING
# sessionName: SESSION NAME FOR THE ROLEARN ASSUME ROLE
# resetDisabled: PARAMETER TO ENABLE DISABLE RESET BUTTON IN EMBEDDED DASHBAORD
# undoRedoDisabled: PARAMETER TO ENABLE DISABLE UNDO REDO BUTTONS IN EMBEDDED DASHBAORD
def getDashboardURL(accountId, dashboardId, openIdToken, roleArn, sessionName, resetDisabled, undoRedoDisabled):
    try:
        assumedRole = sts.assume_role(
            RoleArn = roleArn,
            RoleSessionName = sessionName,
            WebIdentityToken = openIdToken
        )
    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:
            quickSight = assumedRoleSession.client('quicksight',region_name='us-east-1')
            
            response = quickSight.get_dashboard_embed_url(
                 AwsAccountId = accountId,
                 DashboardId = dashboardId,
                 IdentityType = 'IAM',
                 SessionLifetimeInMinutes = 600,
                 UndoRedoDisabled = undoRedoDisabled,
                 ResetDisabled = resetDisabled
            )
            
            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 embeddedURL: " + str(e)
```

------
#### [ Node.js ]

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

**Example**  

```
const AWS = require('aws-sdk');
            const https = require('https');
            
            var quicksight = new AWS.Service({
                apiConfig: require('./quicksight-2018-04-01.min.json'),
                region: 'us-east-1',
            });
            
            quicksight.getDashboardEmbedUrl({
                'AwsAccountId': '111122223333',
                'DashboardId': '1c1fe111-e2d2-3b30-44ef-a0e111111cde',
                'IdentityType': 'IAM',
                'ResetDisabled': true,
                'SessionLifetimeInMinutes': 100,
                'UndoRedoDisabled': false,
                'StatePersistenceEnabled': true
            
            }, 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://dashboards.example.com/embed/620bef10822743fab329fb3751187d2d…
              RequestId: '7bee030e-f191-45c4-97fe-d9faf0e03713' }
```

------
#### [ .NET/C\$1 ]

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

**Example**  

```
            var client = new AmazonQuickSightClient(
                AccessKey,
                SecretAccessKey,
                sessionToken,
                Amazon.RegionEndpoint.USEast1);
            try
            {
                Console.WriteLine(
                    client.GetDashboardEmbedUrlAsync(new GetDashboardEmbedUrlRequest
                    {
                        AwsAccountId = “111122223333”,
                        DashboardId = "1c1fe111-e2d2-3b30-44ef-a0e111111cde",
                        IdentityType = EmbeddingIdentityType.IAM,
                        ResetDisabled = true,
                        SessionLifetimeInMinutes = 100,
                        UndoRedoDisabled = false,
                        StatePersistenceEnabled = true
                    }).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:GetDashboardEmbedURL`에 대한 권한이 활성화되어 있어야 합니다. 사용자가 대시보드를 처음 열 때 사용자를 추가하는 적시 접근 방식을 취하려면, 역할에 `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을 가져오려면 앱 서버에서 `get-dashboard-embed-url`을 호출합니다. 그러면 임베드 가능한 대시보드 URL이 반환됩니다. 다음 예제에서는 AWS Managed Microsoft AD 또는 IAM Identity Center를 통해 인증된 사용자에 대한 서버 측 호출을 사용하여 임베디드 대시보드의 URL을 가져오는 방법을 보여줍니다.

```
aws quicksight get-dashboard-embed-url \
     --aws-account-id 111122223333 \
     --dashboard-id 1a1ac2b2-3fc3-4b44-5e5d-c6db6778df89 \
     --identity-type IAM \
     --session-lifetime-in-minutes 30 \
     --undo-redo-disabled true \
     --reset-disabled true \
     --state-persistence-enabled true \
     --user-arn arn:aws:quicksight:us-east-1:111122223333:user/default/embedding_quicksight_dashboard_role/embeddingsession
```

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

------

# 3단계: 대시보드 URL 임베드
<a name="embedded-dashboards-for-authenticated-users-get-step-3"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

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

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

다음은 `get-dashboard-embed-url`의 응답 예입니다.

```
//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: //dashboards.example.com/embed/620bef10822743fab329fb3751187d2d...",
     "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를 사용하면 대시보드 내에서 파라미터를 제어하고 페이지 로드 완료 및 오류 측면에서 콜백을 수신할 수도 있습니다.

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

```
<!DOCTYPE html>
<html>

<head>
    <title>Basic Embed</title>

    <script src="./quicksight-embedding-js-sdk.min.js"></script>
    <script type="text/javascript">
        var dashboard;

        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,
                scrolling: "no",
                height: "700px",
                width: "1000px",
                footerPaddingEnabled: true
            };
            dashboard = QuickSightEmbedding.embedDashboard(options);
        }
    </script>
</head>

<body onload="embedDashboard()">
    <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
  ```

# GetSessionEmbedUrl (이전 API)를 사용하여 Amazon Quick Sight 콘솔 임베딩
<a name="embedded-analytics-full-console-for-authenticated-users-get"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


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


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

다음 섹션에서는 `GetSessionEmbedUrl` API를 사용하여 등록된 사용자에게 사용자 지정 브랜드 작성 포털에서 Amazon Quick Sight 콘솔 환경을 제공하는 방법에 대한 자세한 정보를 확인할 수 있습니다.

**Topics**
+ [

# 1단계: 권한 설정
](embedded-analytics-full-console-for-authenticated-users-get-step-1.md)
+ [

# 2단계: 인증 코드가 첨부된 URL 가져오기
](embedded-analytics-full-console-for-authenticated-users-get-step-2.md)
+ [

# 3단계: 콘솔 세션 URL 임베드
](embedded-analytics-full-console-for-authenticated-users-get-step-3.md)

# 1단계: 권한 설정
<a name="embedded-analytics-full-console-for-authenticated-users-get-step-1"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

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

Amazon Quick Sight에 액세스하는 각 사용자는 Amazon Quick Sight에 콘솔 세션에 대한 액세스 및 권한을 부여하는 역할을 수임합니다. 이렇게 하려면 AWS 계정에서 IAM 역할을 생성합니다. IAM 정책을 역할과 연결하여 역할을 수행하는 사용자에게 권한을 제공합니다. 독자가 읽기 전용 방식으로 Amazon Quick Sight에 액세스할 수 있고 다른 데이터 또는 생성 기능에 액세스할 수 없도록 `quicksight:RegisterUser` 권한을 추가합니다. 또한 IAM 역할은 콘솔 세션 URL을 검색할 수 있는 권한을 제공해야 합니다. 이를 위해 `quicksight:GetSessionEmbedUrl`을(를) 추가합니다.

다음 샘플 정책은 `IdentityType=IAM`을(를) 사용할 수 있는 권한을 제공합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": "quicksight:RegisterUser",
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": "quicksight:GetSessionEmbedUrl",
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
```

------

다음 샘플 정책은 콘솔 세션 URL을 검색할 수 있는 권한을 제공합니다. 임베디드 세션에 액세스하기 전에 사용자를 생성 중이면 `quicksight:RegisterUser` 없이 정책을 사용합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "quicksight:GetSessionEmbedUrl"
            ],
            "Resource": "*"
        }
    ]
}
```

------

`QUICKSIGHT`을(를) `identityType`(으)로 사용하고 사용자의 Amazon 리소스 이름(ARN)을 제공하는 경우, 정책에서 `quicksight:GetAuthCode` 작업을 허용해야 합니다. 다음 샘플 정책은 이러한 권한을 제공합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "quicksight:GetSessionEmbedUrl",
        "quicksight:GetAuthCode"
      ],
      "Resource": "*"
    }
  ]
}
```

------

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

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 가져오기
<a name="embedded-analytics-full-console-for-authenticated-users-get-step-2"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

다음 단원에서는 사용자를 인증하고 애플리케이션 서버에서 임베딩 가능한 콘솔 세션 URL을 가져오는 방법을 알아볼 수 있습니다.

사용자가 앱에 액세스할 때, 앱은 사용자를 대신하여 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.GetSessionEmbedUrlRequest;
import com.amazonaws.services.quicksight.model.GetSessionEmbedUrlResult;

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

    private final AmazonQuickSight quickSightClient;

    public GetSessionEmbedUrlQSAuth() {
        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, // YOUR AWS ACCOUNT ID
            final String userArn // REGISTERED USER ARN TO USE FOR EMBEDDING. REFER TO GETEMBEDURL SECTION IN DEV PORTAL TO FIND OUT HOW TO GET USER ARN FOR A QUICKSIGHT USER
    ) throws Exception {
        GetSessionEmbedUrlRequest getSessionEmbedUrlRequest = new GetSessionEmbedUrlRequest()
                .withAwsAccountId(accountId)
                .withEntryPoint("/start")
                .withUserArn(userArn);

        GetSessionEmbedUrlResult sessionEmbedUrl = quickSightClient.getSessionEmbedUrl(getSessionEmbedUrlRequest);

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

------
#### [ JavaScript ]

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

function getSessionEmbedURL(
    accountId, // YOUR AWS ACCOUNT ID
    userArn, // REGISTERED USER ARN TO USE FOR EMBEDDING. REFER TO GETEMBEDURL SECTION IN DEV PORTAL TO FIND OUT HOW TO GET USER ARN FOR A QUICKSIGHT USER
    getEmbedUrlCallback, // GETEMBEDURL SUCCESS CALLBACK METHOD
    errorCallback // GETEMBEDURL ERROR CALLBACK METHOD
    ) {
    const getSessionParams = {
        AwsAccountId: accountId,
        EntryPoint: "/start",
        UserArn: userArn,
        SessionLifetimeInMinutes: 600,
    };

    const quicksightGetSession = new AWS.QuickSight({
        region: process.env.AWS_REGION,
    });

    quicksightGetSession.getSessionEmbedUrl(getSessionParams, 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
import time

# Create QuickSight and STS clients
qs = boto3.client('quicksight',region_name='us-east-1')
sts = boto3.client('sts')

# Function to generate embedded URL
# accountId: YOUR AWS ACCOUNT ID
# userArn: REGISTERED USER ARN TO USE FOR EMBEDDING. REFER TO GETEMBEDURL SECTION IN DEV PORTAL TO FIND OUT HOW TO GET USER ARN FOR A QUICKSIGHT USER
def getSessionEmbedURL(accountId, userArn):
    try:
        response = qs.get_session_embed_url(
            AwsAccountId = accountId,
            EntryPoint = "/start",
            UserArn = userArn,
            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 quicksight = new AWS.Service({
                apiConfig: require('./quicksight-2018-04-01.min.json'),
                region: 'us-east-1',
            });
            
            quicksight.GetSessionEmbedUrl({
                'AwsAccountId': '111122223333',
                'EntryPoint': 'https://url-for-console-page-to-open',
                'SessionLifetimeInMinutes': 600,
                'UserArn': 'USER_ARN'
            
            }, 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://dashboards.example.com/embed/620bef10822743fab329fb3751187d2d…
              RequestId: '7bee030e-f191-45c4-97fe-d9faf0e03713' }
```

------
#### [ .NET/C\$1 ]

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

**Example**  

```
            var client = new AmazonQuickSightClient(
                AccessKey,
                SecretAccessKey,
                sessionToken,
                Amazon.RegionEndpoint.USEast1);
            try
            {
                Console.WriteLine(
                    client.GetSessionEmbedUrlAsync(new GetSessionEmbedUrlRequest
                    {
                'AwsAccountId': '111122223333',
                'EntryPoint': 'https://url-for-console-page-to-open',
                'SessionLifetimeInMinutes': 600,
                'UserArn': 'USER_ARN'
                        AwsAccountId = 111122223333,
                        EntryPoint = https://url-for-console-page-to-open,
                        SessionLifetimeInMinutes = 600,
                        UserArn = 'USER_ARN'
                    }).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:GetSessionEmbedUrl`에 대한 권한이 활성화되어 있어야 합니다. 사용자가 Amazon Quick Sight를 처음 열 때 사용자를 추가하기 위해 just-in-time 접근 방식을 취하는 경우 역할에는에 대한 권한도 활성화되어 있어야 합니다`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_console_session_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 사용자이기도 하고 Amazon Quick Sight 콘솔 세션에 액세스할 수 있는 앱 사용자가 생겼습니다.

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

```
aws quicksight get-dashboard-embed-url \
     --aws-account-id 111122223333 \
     --entry-point the-url-for--the-console-session \
     --session-lifetime-in-minutes 600 \
     --user-arn arn:aws:quicksight:us-east-1:111122223333:user/default/embedding_quicksight_dashboard_role/embeddingsession
```

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

------

# 3단계: 콘솔 세션 URL 임베드
<a name="embedded-analytics-full-console-for-authenticated-users-get-step-3"></a>

**중요**  
Amazon Quick Sight에는 임베딩 분석을 위한 새로운 APIs인 `GenerateEmbedUrlForAnonymousUser` 및가 있습니다`GenerateEmbedUrlForRegisteredUser`.  
`GetDashboardEmbedUrl` 및 `GetSessionEmbedUrl` APIs를 사용하여 대시보드와 Amazon Quick Sight 콘솔을 임베딩할 수 있지만 최신 임베딩 기능은 포함되어 있지 않습니다. up-to-date 임베딩 환경은 [애플리케이션에 Amazon Quick Sight 분석 임베딩을 참조하세요](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

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

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

다음은 `get-dashboard-embed-url`의 응답 예입니다.

```
//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: //dashboards.example.com/embed/620bef10822743fab329fb3751187d2d...",
     "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를 사용하면 콘솔 세션 내에서 파라미터를 제어하고 페이지 로드 완료 및 오류 측면에서 콜백을 수신할 수도 있습니다.

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

```
<!DOCTYPE html>
<html>

<head>
    <title>Basic Embed</title>

    <script src="./quicksight-embedding-js-sdk.min.js"></script>
    <script type="text/javascript">
        var dashboard;

        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,
                scrolling: "no",
                height: "700px",
                width: "1000px",
                footerPaddingEnabled: true
            };
            dashboard = QuickSightEmbedding.embedDashboard(options);
        }
    </script>
</head>

<body onload="embedDashboard()">
    <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
  ```