

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Quick Sight の埋め込み分析
埋め込み分析

**重要**  
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 マネジメントコンソール またはスタンドアロンウェブサイトのコンテキストではなく、アプリケーションの一部として 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 Edition を使用していることを確認してください。

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 分析をアプリケーションに埋め込む
アプリケーションへの分析の埋め込み


|  | 
| --- |
|  適用対象: Enterprise Edition  | 

分析を埋め込むには、Amazon Quick Sight 埋め込み API を実行して埋め込みコードを生成できます。ダッシュボードの場合は、Amazon Quick Sight でダッシュボードを共有するときに埋め込みコードをコピーすることもできます。以下は各オプションの説明です。

## 登録済みユーザー向けのワンクリック埋め込み


アカウント内の登録済みユーザーとダッシュボードを共有するときは、ダッシュボードの埋め込みコードをコピーして、内部アプリケーションの HTML に貼り付けることができます。

ワンクリックエンタープライズ埋め込みの使用は、ユーザーが認証する必要がある内部アプリケーションに Amazon Quick Sight ダッシュボードを埋め込む場合に最適です。埋め込みコードをコピーするときは、変更されない静的な埋め込みコードを取得します。

詳細については、「[ワンクリック埋め込みコードを使用して登録済みユーザーに Amazon Quick Sight ビジュアルとダッシュボードを埋め込む](embedded-analytics-1-click.md)」を参照してください。

## Amazon Quick Sight APIs を使用した埋め込み


Amazon Quick Sight API を埋め込むのは、ユーザーが認証する必要がある内部アプリケーション、または誰でもアクセスできる外部アプリケーションに Amazon Quick Sight エクスペリエンスを埋め込む場合に最適です。埋め込み API オペレーションを使用して埋め込みコードを生成するときは、1 回限りのコードを取得します。

詳細については、「[Amazon Quick Sight APIs を使用した埋め込み](embedded-analytics-api.md)」を参照してください。

# カスタム Amazon Quick Sight アセットをアプリケーションに埋め込む
カスタムアセットの埋め込み

Amazon Quick Sight 埋め込み分析を使用して、ビジネスニーズに合わせてカスタマイズされたカスタム Amazon Quick Sight アセットをアプリケーションに埋め込むことができます。埋め込みダッシュボードやビジュアルの場合、Amazon Quick Sight の作成者は、ダッシュボードやビジュアルをナビゲートする際に閲覧者がアクセスできるフィルターやドリルダウンを追加できます。Amazon Quick Sight 開発者は、Amazon Quick Sight SDKs を使用して、SaaS アプリケーションと Amazon Quick Sight 埋め込みアセットとのより緊密な統合を構築し、実行時にダッシュボード上のビジュアルにデータポイントコールバックアクションを追加することもできます。

Amazon Quick Sight SDKs「」を参照してください。 `amazon-quicksight-embedding-sdk` [GitHub](https://github.com/awslabs/amazon-quicksight-embedding-sdk) [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/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 Embedding SDK を使用して、埋め込みダッシュボードビューへの共有可能なリンクを有効にする
](embedded-view-sharing.md)

# Amazon Quick Sight で実行時に埋め込みコールバックアクションを追加する
埋め込みデータポイントコールバック

埋め込みデータポイントコールバックアクションを使用して、Software as a Service (SaaS) アプリケーションと Amazon Quick Sight 埋め込みダッシュボードおよびビジュアルとのより緊密な統合を構築します。開発者は、Amazon Quick Sight 埋め込み SDK で呼び出すデータポイントを登録できます。ビジュアルのコールバックアクションを登録すると、読者はビジュアル上のデータポイントを選択して、選択したデータポイントに固有のデータを提供するコールバックを受け取ることができます。この情報を使用して、キーレコードにフラグを付けたり、データポイント固有の未加工データをコンパイルしたり、レコードをキャプチャしたり、バックエンドプロセス用のデータをコンパイルしたりできます。

埋め込みコールバックは、カスタムビジュアルコンテンツ、テキストボックス、またはインサイトではサポートされていません。

コールバック用のデータポイントの登録を開始する前に、Embedding SDK をバージョン 2.3.0 に更新してください。Amazon Quick Sight Embedding SDK の使用の詳細については、GitHub の [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk) を参照してください。

データポイントコールバックは、Amazon Quick Sight SDK を介して実行時に 1 つ以上のビジュアルに登録できます。また、[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.DATA_POINT_MENU` に `actionTrigger` の値を設定します。

データポイントコールバックが登録されると、指定されたビジュアルまたはビジュアル上のほとんどのデータポイントに適用されます。コールバックはビジュアルの合計や小計には適用されません。リーダーがデータポイントとやり取りすると、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 埋め込みダッシュボードとビジュアルの実行時のデータのフィルタリング
実行時のフィルタリング

Amazon Quick Sight 埋め込み SDK のフィルターメソッドを使用して、実行時に Software as a Service (SaaS) アプリケーション内の Amazon Quick Sight フィルターの機能を活用できます。ランタイムフィルターを使用すると、ビジネスオーナーはアプリケーションを埋め込み Amazon Quick Sight ダッシュボードやビジュアルと統合できます。これを実現するには、アプリケーションでカスタマイズされたフィルターコントロールを作成し、アプリケーションからのデータに基づいてフィルタープリセットを適用します。その後、デベロッパーは実行時に、エンドユーザーのためにフィルター設定をパーソナライズできます。

開発者は、Amazon Quick Sight Embedding SDK を使用して、アプリケーションから埋め込みダッシュボードまたはビジュアルの Amazon Quick Sight フィルターを作成、クエリ、更新、削除できます。[FilterGroup](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterGroup.html) データモデルを使用してアプリケーションに Amazon Quick Sight フィルターオブジェクトを作成し、フィルターメソッドを使用して埋め込みダッシュボードとビジュアルに適用します。Amazon Quick Sight Embedding SDK の使用の詳細については、GitHub の [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk) を参照してください。

**前提条件**

開始する前に、Amazon Quick Sight Embedding SDK バージョン 2.5.0 以降を使用していることを確認してください。

## 用語と概念


次の用語は、実行時の組み込みフィルタリングを使用する場合に役立ちます。
+ フィルターグループ – 個々のフィルターのグループ。`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)」を参照してください。

## 設定


開始する前に、次のアセットと情報が準備されていることを確認してください。
+ `FilterGroup` の範囲を設定するシートのシート ID。これは、Embedding 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 (該当する場合)。これは、Embedding SDK の `getSheetVisuals` メソッドを使用して取得できます。

  `getSheetVisuals` メソッドに加えて、追加する `FilterGroup` の範囲は、現在選択されているシートにのみ設定できます。

この機能を使用するには、Amazon Quick Sight Embedding SDK を使用してアプリケーションにダッシュボードまたはビジュアルが埋め込まれている必要があります。Amazon Quick Sight Embedding SDK の使用の詳細については、GitHub の [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk) を参照してください。

## SDK メソッドインターフェイス


**ダッシュボード埋め込みゲッターメソッド**

次の表には、デベロッパーが使用できるさまざまなダッシュボード埋め込みゲッターメソッドの説明が記載されています。


| Method | 説明 | 
| --- | --- | 
|  `getFilterGroupsForSheet(sheetId: string) `  |  パラメータで指定されたシートに現在範囲設定されているすべての FilterGroup を返します。  | 
|  `getFilterGroupsForVisual(sheetId: string, visualId: string)`  |  パラメータで指定されたビジュアルに範囲設定されているすべての `FilterGroups` を返します。  | 

パラメータで指定されたシートが、埋め込みダッシュボードの現在選択されているシートではない場合、上記のメソッドはエラーを返します。

**ビジュアル埋め込みゲッターメソッド**

次の表には、デベロッパーが使用できるさまざまなビジュアル埋め込みゲッターメソッドの説明が記載されています。


| Method | 説明 | 
| --- | --- | 
|  `getFilterGroups()`  |  埋め込みビジュアルに現在範囲設定されているすべての `FilterGroups` を返します。  | 

**設定メソッド**

次の表には、デベロッパーがダッシュボードまたはビジュアル埋め込みに使用できるさまざまなセッターメソッドの説明が記載されています。


| Method | 説明 | 
| --- | --- | 
|  `addFilterGroups(filterGroups: FilterGroup[])`  |  指定された **FilterGroups** を埋め込みダッシュボードまたはビジュアルに追加して適用します。追加が成功したかどうかを示す `ResponseMessage` が返されます。  | 
|  `updateFilterGroups(filterGroups: FilterGroup[])`  |  パラメータで指定された `FilterGroup` と同じ `FilterGroupId` を含む、埋め込みエクスペリエンスの `FilterGroups` を更新します。更新が成功したかどうかを示す `ResponseMessage` が返されます。  | 
|  `removeFilterGroups(filterGroupsOrIds: FilterGroup[] \| string[])`  |  指定された FilterGroups をダッシュボードから削除し、削除の試行が成功したかどうかを示す `ResponseMessage` を返します。  | 

指定される `FilterGroup` は、現在選択されている埋め込みシートまたはビジュアルに範囲設定される必要があります。

# Amazon Quick Sight 埋め込みダッシュボードとビジュアルのルックアンドフィールをカスタマイズする
実行時のテーマ設定

Amazon Quick Sight Embedding SDK (バージョン 2.5.0 以降) を使用して、実行時に埋め込み Amazon Quick Sight ダッシュボードとビジュアルのテーマを変更できます。ランタイムテーマを使用すると、Software as a Service (SaaS) アプリケーションを Amazon Quick Sight 埋め込みアセットと簡単に統合できます。ランタイムテーマを使用すると、埋め込みコンテンツのテーマを、Amazon Quick Sight アセットが埋め込まれている親アプリケーションのテーマと同期できます。実行時のテーマ設定を使用して、閲覧者のためにカスタマイズオプションを追加することもできます。テーマ設定の変更は、初期化時、または埋め込みダッシュボードやビジュアルの存続期間を通じて、埋め込みアセットに適用できます。

テーマの詳細については、「[Amazon Quick Sight でのテーマの使用](themes-in-quicksight.md)」を参照してください。Amazon Quick Sight Embedding SDK の使用の詳細については、GitHub の [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk) を参照してください。

**前提条件**

開始する前に、次の前提条件を満たしていることを確認してください。
+ Amazon Quick Sight Embedding SDK バージョン 2.5.0 以降を使用している。
+ 使用するテーマにアクセスするための許可。Amazon Quick Sight のテーマにアクセス許可を付与するには、`UpdateThemePermissions`API コールを行うか、Amazon Quick Sight コンソールの分析エディタのテーマの横にある**共有**アイコンを使用します。

## 用語と概念


次の用語は、埋め込みの実行時のテーマ設定を使用する場合に役立ちます。
+ テーマ – コンテンツの表示方法を変更する複数の分析とダッシュボードに適用できる設定を集めたもの。
+ 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`

## 設定


実行時のテーマ設定の使用を開始するには、次の情報を準備してください。
+ 使用するテーマのテーマ 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 メソッドインターフェイス


**設定メソッド**

次の表には、デベロッパーが実行時のテーマ設定に使用できるさまざまなセッターメソッドの説明が記載されています。


| Method | 説明 | 
| --- | --- | 
|  `setTheme(themeArn: string)`  |  ダッシュボードまたはビジュアルのアクティブなテーマを別のテーマに置き換えます。適用すると、テーマのオーバーライドが削除されます。 テーマにアクセスできない場合、またはテーマが存在しない場合は、エラーが返されます。  | 
|  `setThemeOverride(themeOverride: ThemeConfiguration)`  |  現在アクティブなテーマをオーバーライドするために動的な `ThemeConfiguration` を設定します。これは、以前に設定されたテーマのオーバーライドを置き換えます。新しい `ThemeConfiguration` で指定されていない値は、現在アクティブなテーマの値にデフォルトで設定されます。 指定した `ThemeConfiguration` が無効な場合は、エラーが返されます。  | 

## テーマを使用した埋め込みコンテンツの初期化


埋め込みダッシュボードまたはビジュアルをデフォルト以外のテーマを使用して初期化するには、`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);
```

## テーマオーバーライドを使用した埋め込みコンテンツの初期化


デベロッパーは、テーマオーバーライドを使用して、実行時に埋め込みダッシュボードまたはビジュアルのテーマを定義できます。これにより、ダッシュボードまたはビジュアルは、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);
```

## プリロードされたテーマを使用した埋め込みコンテンツの初期化


デベロッパーは、初期化時にプリロードされる一連のダッシュボードテーマを設定できます。これは、ダークモードやライトモードなど、さまざまなビューをすばやく切り替えるのに最も役立ちます。埋め込みダッシュボードまたはビジュアルは、最大 5 つのプリロードされたテーマで初期化できます。プリロードされたテーマを使用するには、最大 5 つの `themeArns` で配列内の `DashboardContentOptions` または `VisualContentOptions` の `preloadThemes` プロパティを設定します。次の例では、 `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 Embedding SDK を使用して、埋め込みダッシュボードビューへの共有可能なリンクを有効にする
埋め込みビューの共有

Amazon Quick Sight デベロッパーは、Amazon Quick Sight Embedding SDK (バージョン 2.8.0 以降) を使用して、埋め込みダッシュボードのリーダーが埋め込みダッシュボードのビューへの共有可能なリンクを受信および配信できるようにします。開発者は、ダッシュボードまたはコンソール埋め込みを使用して、Amazon Quick Sight Embedding SDK を使用してカプセル化された Amazon Quick Sight のリファレンスを使用して、アプリケーションページへの共有可能なリンクを生成できます。Amazon Quick Sight リーダーは、この共有可能なリンクをピアに送信できます。ピアが共有リンクにアクセスすると、埋め込み Amazon Quick Sight ダッシュボードを含むアプリケーションのページに移動します。開発者は、匿名埋め込みを使用する場合に Amazon Quick Sight の匿名リーダーのブックマークとして使用できるダッシュボードビューの共有可能なリンクを生成して保存することもできます。

**前提条件**

開始する前に、Amazon Quick Sight Embedding 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`の機能設定の有効化
共有ビューの有効化

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 を使用した共有ビューの作成
共有ビューの作成

Embedding 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 ビューの使用


新しい共有ビューを作成したら、Embedding SDK を使用して、他のユーザーが共有ビューを使用できるようにします。以下の例では、Amazon Quick Sight の埋め込みダッシュボードの使用可能な共有ビューを設定します。

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

` /views/{viewId}` の下で `sharedViewId` を埋め込み URL に追加し、この 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 のビジュアルとダッシュボードの埋め込み
ワンクリックの埋め込み

この埋め込みコードをにより、ビジュアルまたはダッシュボードをアプリケーションに埋め込むことができます。このコードは、ダッシュボードを共有するか、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 ビジュアルとダッシュボードを埋め込む
ワンクリック登録済み埋め込み


|  | 
| --- |
|  適用対象: Enterprise Edition  | 

Amazon Quick Sight アカウントの登録済みユーザー向けに、ビジュアルまたはダッシュボードを内部アプリケーションに埋め込むことができます。そのためには、ダッシュボードを共有するときに取得する埋め込みコードを使用するか、Amazon Quick Sight の**埋め込みビジュアル**メニューから取得します。埋め込みコードを生成するために Amazon Quick Sight 埋め込み API を実行する必要はありません。Amazon Quick Sight から埋め込みコードをコピーし、内部アプリケーションの HTML コードに貼り付けることができます。

埋め込むダッシュボードにアクセスできるユーザーとグループ (または Amazon Quick Sight アカウントのすべてのユーザー）、または内部アプリケーションへのアクセスを埋め込むビジュアルを保持するユーザーとグループは、認証情報を使用して Amazon Quick Sight アカウントにサインインするように求められます。ユーザーは認証後に、内部ページから、ビジュアルやダッシュボードにアクセスできるようになります。シングルサインオンが有効になっている場合は、ユーザーにサインインが再度求められることはありません。

以下で、ビジュアルまたはダッシュボードの埋め込みコードを使用して、登録済みユーザー向けに。ビジュアルまたはダッシュボードを埋め込む方法を説明します。

## 開始する前に


作業を始める前に、以下を確認してください。
+ ポップアップと iframe 間の通信を許可するため、インターネットブラウザの設定に以下のいずれかが含まれている。
  + Mozilla Broadcast Channel API のネイティブサポート。詳細については、Mozilla ドキュメントで [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API) を参照してください。
  + IndexedDB のサポート。
  + LocalStorage のサポート。
+ インターネットブラウザの「すべての cookie をブロック」設定がオフになっている。

## ステップ 1: ダッシュボードへのアクセス権を付与する


ユーザーが埋め込みダッシュボードにアクセスできるように、ダッシュボードを表示するためのアクセス権をユーザーに付与します。個々のユーザーやグループにダッシュボードへのアクセス権を付与する、またはアカウント内の全ユーザーにアクセス権を付与することができます。ビジュアルのアクセス許可はダッシュボードレベルで決定されます。埋め込みビジュアルに対するアクセス許可を付与するには、そのビジュアルが属するダッシュボードへのアクセスを許可します。詳しくは、「[ダッシュボードに対するアクセス権の付与](share-a-dashboard.md)」を参照してください。

## ステップ 2: ビジュアルもしくはダッシュボードを埋め込むドメインを許可リストに入れる


ビジュアルとダッシュボードを内部アプリケーションに埋め込むには、埋め込むドメインが Amazon Quick Sight アカウントに許可リストに登録されていることを確認します。詳細については、「[静的ドメインを許可リストに追加する](manage-domains.md#embedding-static)」を参照してください。

## ステップ 3: 埋め込みコードを取得する


以下の手順を使用して、ビジュアルもしくはダッシュボードの埋め込み用コードを取得します。

**ダッシュボードの埋め込み用コードを取得する**

1. Amazon Quick Sight で公開されたダッシュボードを開き、右上**の共有**を選択します。次に、**[Share dashboard]** (ダッシュボードの共有) をクリックします。

1. 開いた **[Share dashboard]** (ダッシュボードの共有) ページで、左上の **[Copy embed code]** (埋め込みコードをコピー) をクリックします。

   以下のような埋め込みコードがクリップボードにコピーされます。この例`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 で公開されたダッシュボードを開き、埋め込むビジュアルを選択します。次に、ビジュアルの右上にあるビジュアルのメニューを展開した後、**[Embed visual]** (埋め込みビジュアル) を選択します。

1. **[Embed visual]** (埋め込みビジュアル) ペインが開くので、**[Copy code]** (コードをコピー) を選択します。

   以下のような埋め込みコードがクリップボードにコピーされます。この例`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 ページにコードを貼り付ける


以下の手順を使用して、埋め込みコードを内部アプリケーションの 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 サイトのページに埋め込みたいとしましょう。Google サイトのページを開いて、埋め込みウィジェットに埋め込みコードを貼り付けることができます。

ビジュアルかダッシュボードを、内部の Microsoft SharePoint サイトに埋め込みたい場合には、新しいページを作成してから、ウェブの埋め込み部分に埋め込みコードを貼り付けます。

# ワンクリック埋め込みコードを使用して匿名ユーザー向けに Amazon Quick Sight ビジュアルとダッシュボードを埋め込む
ワンクリック匿名埋め込み


|  | 
| --- |
|  適用対象: Enterprise Edition  | 

Amazon Quick Sight でビジュアルまたはダッシュボードを共有するときに取得する埋め込みコードを使用して、パブリックサイトにビジュアルまたはダッシュボードを埋め込むことができます。Amazon Quick Sight コンソールを使用してパブリック共有を有効にし、インターネット上のすべてのユーザーに共有ビジュアルまたはダッシュボードへのアクセスを自動的に許可することもできます。

以下では、ビジュアルあるいはダッシュボードのパブリック共有を有効にし、それらを、インターネット上の全員が閲覧できるように埋め込む方法について説明します。どちらの場合も、ワンクリック埋め込みコードを使用してこれを行います。

## 開始する前に


作業を始める前に、以下を確認してください。
+ ポップアップと共有で使用する iframe との通信を許可するため、インターネットブラウザの設定に以下のいずれかが含まれている。
  + Mozilla Broadcast Channel API のネイティブサポート。詳細については、Mozilla ドキュメントで [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API) を参照してください。
  + IndexedDB のサポート。
  + LocalStorage のサポート。
+ インターネットブラウザの「すべての cookie をブロック」設定がオフになっている。

## ステップ 1: ダッシュボードのパブリックアクセスを有効にする


インターネット上の全員が、埋め込みのビジュアルやダッシュボードにアクセスできるようにするには、まずダッシュボードのパブリックアクセスを有効にします。ビジュアルのアクセス許可はダッシュボードレベルで決定されます。埋め込みビジュアルに対するアクセス許可を付与するには、そのビジュアルが属するダッシュボードへのアクセスを許可します。詳しくは、「[インターネット上のすべてのユーザーに Amazon Quick Sight ダッシュボードへのアクセスを許可する](share-a-dashboard-grant-access-anyone.md)」を参照してください。

## ステップ 2: ビジュアルもしくはダッシュボードを埋め込むドメインを許可リストに入れる


ビジュアルとダッシュボードをパブリックアプリケーション、Wiki、またはポータルに埋め込むには、埋め込むドメインが Amazon Quick Sight アカウントの許可リストに含まれていることを確認します。

## ステップ 3: 埋め込みコードを取得する


以下の手順を使用して、ビジュアルもしくはダッシュボードの埋め込み用コードを取得します。

**ダッシュボードの埋め込み用コードを取得する**

1. Amazon Quick Sight で公開されたダッシュボードを開き、右上**の共有**を選択します。次に、**[Share dashboard]** (ダッシュボードの共有) をクリックします。

1. 開いた **[Share dashboard]** (ダッシュボードの共有) ページで、左上の **[Copy embed code]** (埋め込みコードをコピー) をクリックします。

   以下のような埋め込みコードがクリップボードにコピーされます。この例`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 で公開されたダッシュボードを開き、埋め込むビジュアルを選択します。次に、ビジュアルの右上隅にあるビジュアルのメニューを開き、**[Embed visual]** (埋め込みビジュアル) を選択します。

1. **[Embed visual]** (埋め込みビジュアル) ペインが開くので、**[Copy code]** (コードをコピー) を選択します。

   以下のような埋め込みコードがクリップボードにコピーされます。この例`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 ページ、またはポータルに貼り付ける


以下の手順を使用して、埋め込みコードを 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 サイト上に構築している場合は、Google サイトのページを開いて、埋め込みウィジェットを使用して埋め込みコードを貼り付けます。

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 を使用した埋め込み
Amazon Quick Sight APIs を使用した埋め込み


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

Amazon Quick Sight APIs を使用して分析を埋め込む実際のプロセスには、いくつかのステップしかありません。

作業を開始する前に、以下の準備が整っていることを確認します。
+  AWS SDK を使用して API コールを行うアプリケーションで使用される発信者 ID に必要な IAM アクセス許可を設定します。たとえば、`quicksight:GenerateEmbedUrlForAnonymousUser` または `quicksight:GenerateEmbedUrlForRegisteredUser` アクションを許可するアクセス許可を付与します。
+ 登録済みユーザーに を埋め込むには、事前に Amazon Quick Sight アセットを共有します。新規認証ユーザーの場合、アセットへのアクセスを許可する方法を理解する必要があります。これを行う 1 つの方法は、すべてのアセットを 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 Embedding 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 Generative 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 ダッシュボードの埋め込み
ダッシュボードの埋め込み

Amazon Quick Sight API を使用したダッシュボードの埋め込みについては、以下のトピックを参照してください。

**Topics**
+ [

# 登録済みユーザー向けの Amazon Quick Sight ダッシュボードの埋め込み
](embedded-analytics-dashboards-for-authenticated-users.md)
+ [

# 匿名 (未登録) ユーザー向けの Amazon Quick Sight ダッシュボードの埋め込み
](embedded-analytics-dashboards-for-everyone.md)
+ [

# 埋め込みダッシュボードでエグゼクティブサマリーを有効にする
](embedded-analytics-genbi-executive-summaries-dashboard.md)

# 登録済みユーザー向けの Amazon Quick Sight ダッシュボードの埋め込み
登録済みユーザー向けのダッシュボードの埋め込み

**重要**  
Amazon Quick Sight には、分析を埋め込むための新しい API オペレーション `GenerateEmbedUrlForAnonymousUser`と があります`GenerateEmbedUrlForRegisteredUser`。  
`GetDashboardEmbedUrl` および `GetSessionEmbedUrl` API オペレーションを使用してダッシュボードと Amazon Quick Sight コンソールを埋め込むことはできますが、最新の埋め込み機能は含まれていません。古い API オペレーションを使用した埋め込みの詳細については、「 [GetDashboardEmbedURLおよび GetSessionEmbedURL API オペレーションを使用した分析の埋め込み](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html)」を参照してください。


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

以下のセクションでは、Amazon Quick Sight の登録済みユーザー用に埋め込み Amazon Quick Sight ダッシュボードを設定する方法について詳しく説明します。

**Topics**
+ [

## ステップ 1: 許可をセットアップする
](#embedded-dashboards-for-authenticated-users-step-1)
+ [

## ステップ 2: 認証コードがアタッチされた URL を生成する
](#embedded-dashboards-for-authenticated-users-step-2)
+ [

## ステップ 3: ダッシュボード URL を埋め込む
](#embedded-dashboards-for-authenticated-users-step-3)

## ステップ 1: 許可をセットアップする
ステップ 1: 許可をセットアップする

次のセクションでは、バックエンドアプリケーションまたはウェブサーバーのアクセス許可を設定する方法について説明します。このタスクには IAM への管理者アクセス権が必要です。

ダッシュボードにアクセスする各ユーザーは、Amazon Quick Sight にダッシュボードへのアクセスとアクセス許可を付与するロールを引き受けます。これを可能にするには、 で IAM ロールを作成します AWS アカウント。IAM ポリシーをロールに関連付けて、それを引き受けるすべてのユーザーにアクセス許可を付与します。IAM ロールでは、特定のユーザープールに埋め込み URL を取得するアクセス許可を提供する必要があります。ワイルドカード文字 *\$1* を使用すると、特定の名前空間のすべてのユーザー、または特定の名前空間のユーザーのサブセットに対して、URL を生成する許可を付与できます。このためには、`quicksight:GenerateEmbedUrlForRegisteredUser` を追加します。

IAM ポリシーで条件を作成し、デベロッパーが `GenerateEmbedUrlForRegisteredUser` API オペレーションの `AllowedDomains` パラメータにリストできるドメインを制限できます。`AllowedDomains` パラメータはオプションのパラメータです。これにより、**Amazon Quick Sight の管理**メニューで設定された静的ドメインを上書きするオプションが開発者として付与されます。代わりに、生成された URL にアクセスできるドメインもしくはサブドメインを、3 つまでリストアップできます。この URL は、作成した Web サイトに埋め込むことが可能です。パラメータにリストされているドメインのみが、埋め込みビジュアルにアクセスすることが可能です。この状態にしていない場合、インターネット上の任意のドメインを `AllowedDomains` パラメータにリストできてしまいます。

デベロッパーがこのパラメータで使用できるドメインを制限するには、`AllowedEmbeddingDomains` 条件を IAM ポリシーに追加します。`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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってロールを引き受け、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 ユーザーガイド*」の以下のセクションを参照してください。
+ [ウェブ ID または OpenID Connect フェデレーション用のロールを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [SAML 2.0 フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## ステップ 2: 認証コードがアタッチされた URL を生成する
ステップ 2: URL を生成する

次のセクションでは、ユーザーの認証方法とアプリケーションサーバー上の埋め込みダッシュボード URL の取得方法について説明します。IAM または Amazon Quick Sight ID タイプのダッシュボードを埋め込む場合は、ダッシュボードをユーザーと共有します。

ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わって IAM ロールを引き受けます。次に、そのユーザーがまだ存在しない場合、そのユーザーを Amazon Quick Sight に追加します。次に、アプリケーションが一意のロールセッション ID として識別子を渡します。

これらのステップを実行すると、ダッシュボードの各ビューワーが Amazon Quick Sight で一意にプロビジョニングされます。行レベルのセキュリティやパラメータの動的デフォルトなど、ユーザーごとの設定も強制されます。

次の例では、ユーザーに代わって IAM 認証を実行します。このコードはアプリケーションサーバー上で実行されます。

### Java


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

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

        private final AmazonQuickSight quickSightClient;

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

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

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

            final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

### JavaScript


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

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

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

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

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

### Python3


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

sts = boto3.client('sts')

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

### Node.js


次の例は、埋め込みダッシュボードの URL を生成するためにアプリケーションサーバーで使用できる JavaScript (Node.js) を示しています。ダッシュボードを表示するには、ウェブサイトまたはアプリでこの URL を使用します。

**Example**  

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

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

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

**Example**  

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

### .NET/C\$1


次の例は、埋め込みダッシュボードの URL を生成するためにアプリケーションサーバーで使用できる .NET/C\$1 コードを示しています。ダッシュボードを表示するには、ウェブサイトまたはアプリでこの URL を使用します。

**Example**  

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

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

### AWS CLI


ロールを引き受けるには、次のいずれかの AWS Security Token Service (AWS STS) API オペレーションを選択します。
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) – ロールを引き受けるために IAM ID を使用している場合は、このオペレーションを使用します。
+ [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` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 ユーザーの場合、 `DescribeUser` を使用してユーザー ARN を取得できます。

ユーザーが 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 またはシングルサインオン (IAM アイデンティティセンター) で認証されたユーザーのサーバー側の呼び出しを使用して、埋め込みダッシュボードの URL を生成する方法を示しています。

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

このオペレーションの使用に関する詳細については、[https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html) を参照してください。これと他の API オペレーションは、独自のコードで使用できます。

## ステップ 3: ダッシュボード URL を埋め込む
ステップ 3: URL を埋め込む

次のセクションでは、[Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) を使用して、ステップ 3 のダッシュボード URL をウェブサイトまたはアプリケーションページに埋め込む方法について説明します。SDK を使用すると、次のことを実行できます。
+ ダッシュボードを HTML ページに配置します。
+ ダッシュボードにパラメータを渡します。
+ アプリケーションに合わせてカスタマイズされたメッセージでエラー状態を処理します。

`GenerateEmbedUrlForRegisteredUser` API オペレーションを呼び出して URL を生成し、アプリケーションに埋め込みます。この URL は 5 分間有効で、得られたセッションは最大 10 時間有効です。API オペレーションは、シングルサインオンセッションを有効にする `auth_code` の URL を提供します。

以下に、`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 Embedding SDK を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、このダッシュボードをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。Amazon Quick Sight Embedding SDK を使用すると、ダッシュボード内のパラメータを制御し、ページロードの完了とエラーの観点からコールバックを受信することもできます。

埋め込みダッシュボードをホストするドメインは、許可リスト ( Quick サブスクリプションで承認されたドメインのリスト) に登録されている必要があります。この要件は、未承認のドメインが埋め込みダッシュボードをホストしないようにすることでデータを保護します。埋め込みダッシュボードのドメインの追加の詳細については、[「Amazon Quick Sight API を使用して実行時にドメインを一覧表示するのを許可する](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html)」を参照してください。

次の例は生成された URL の使用方法を示しています。このコードはアプリケーションサーバー上で生成されます。

### SDK 2.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

この例では、Amazon Quick Sight Embedding SDK を使用して、JavaScript を使用してウェブサイトに埋め込みダッシュボードをロードします。コピーを取得するには、次のいずれかを実行します。
+ GitHub [から Amazon Quick Sight Embedding SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) をダウンロードします。このリポジトリは、Amazon Quick Sight 開発者のグループによって管理されます。
+ [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) から、最新の埋め込み SDK バージョンをダウンロードします。
+ JavaScript の依存関係の `npm` を使用する場合、次のコマンドを実行してダウンロードおよびインストールします。

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

# 匿名 (未登録) ユーザー向けの Amazon Quick Sight ダッシュボードの埋め込み
匿名ユーザー向けのダッシュボードの埋め込み

**重要**  
Amazon Quick Sight には、分析を埋め込むための新しい API オペレーション `GenerateEmbedUrlForAnonymousUser`と があります`GenerateEmbedUrlForRegisteredUser`。  
`GetDashboardEmbedUrl` および `GetSessionEmbedUrl` API オペレーションを使用してダッシュボードと Amazon Quick Sight コンソールを埋め込むことはできますが、最新の埋め込み機能は含まれていません。古い API オペレーションを使用した埋め込みの詳細については、「 [GetDashboardEmbedURLおよび GetSessionEmbedURL API オペレーションを使用した分析の埋め込み](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html)」を参照してください。


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

以下のセクションでは、匿名 (未登録) ユーザーの埋め込み Amazon Quick Sight ダッシュボードを設定する方法について詳しく説明します。

**Topics**
+ [

## ステップ 1: 許可をセットアップする
](#embedded-analytics-dashboards-with-anonymous-users-step-1)
+ [

## ステップ 2: 認証コードがアタッチされた URL を生成する
](#embedded-analytics-dashboards-with-anonymous-users-step-2)
+ [

## ステップ 3: ダッシュボード URL を埋め込む
](#embedded-analytics-dashboards-with-anonymous-users-step-3)

## ステップ 1: 許可をセットアップする
ステップ 1: 許可をセットアップする


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

次のセクションでは、バックエンドアプリケーションまたはウェブサーバーのアクセス許可を設定する方法について説明します。このタスクには IAM への管理者アクセス権が必要です。

ダッシュボードにアクセスする各ユーザーは、Amazon Quick Sight にダッシュボードへのアクセスとアクセス許可を付与するロールを引き受けます。これを可能にするには、 で IAM ロールを作成します AWS アカウント。IAM ポリシーをロールに関連付けて、それを引き受けるすべてのユーザーにアクセス許可を付与します。

IAM ポリシーで条件を作成し、デベロッパーが `GenerateEmbedUrlForAnonymousUser` API オペレーションの `AllowedDomains` パラメータにリストできるドメインを制限できます。`AllowedDomains` パラメータはオプションのパラメータです。これにより、**Amazon Quick Sight の管理**メニューで設定された静的ドメインを上書きするオプションが開発者として付与されます。代わりに、生成された URL へのアクセスが可能な、ドメインもしくはサブドメインを、最大 3 つまでリストアップすることもできます。この URL は、作成した Web サイトに埋め込むことが可能です。パラメータにリストされているドメインのみが、埋め込みダッシュボードにアクセスできます。この状態にしていない場合、インターネット上の任意のドメインを `AllowedDomains` パラメータにリストできてしまいます。

デベロッパーがこのパラメータで使用できるドメインを制限するには、`AllowedEmbeddingDomains` 条件を IAM ポリシーに追加します。`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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってロールを引き受け、ダッシュボードを開きます。次の例は、サンプルの信頼ポリシーを示しています。

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

****  

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

------

信頼ポリシーの詳細については、「IAM ユーザーガイド」の「[IAM の一時的な認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」を参照してください。

## ステップ 2: 認証コードがアタッチされた URL を生成する
ステップ 2: URL を生成する


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

次のセクションでは、匿名の訪問者に代わって認証を取得する方法とアプリケーションサーバー上の埋め込みダッシュボードの URL の取得方法について説明します。

ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わって IAM ロールを引き受けます。次に、そのユーザーがまだ存在しない場合、Amazon Quick Sight にユーザーを追加します。次に、一意のロールセッション ID として識別子を渡します。

次の例では、ユーザーに代わって IAM 認証を実行します。一意のロールセッション ID として識別子を渡します。このコードはアプリケーションサーバー上で実行されます。

### Java


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


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

        private final AmazonQuickSight quickSightClient;

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

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

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

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

            GenerateEmbedUrlForAnonymousUserResult dashboardEmbedUrl = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

            return dashboardEmbedUrl.getEmbedUrl();
        }

    }
```

### JavaScript


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

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

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

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

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

### Python3


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

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

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

### Node.js


次の例は、埋め込みダッシュボードの URL を生成するためにアプリケーションサーバーで使用できる JavaScript (Node.js) を示しています。ダッシュボードを表示するには、ウェブサイトまたはアプリでこの URL を使用します。

**Example**  

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

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

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

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

**Example**  

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

### .NET/C\$1


次の例は、埋め込みダッシュボードの URL を生成するためにアプリケーションサーバーで使用できる .NET/C\$1 コードを示しています。ダッシュボードを表示するには、ウェブサイトまたはアプリでこの URL を使用します。

**Example**  

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

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

### AWS CLI


ロールを引き受けるには、次のいずれかの AWS Security Token Service (AWS STS) API オペレーションを選択します。
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) – ロールを引き受けるために IAM ID を使用している場合は、このオペレーションを使用します。
+ [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 Language (SAML) を使用している場合は、このオペレーションを使用します。

次の例は、IAM ロールを設定するための CLI コマンドを示しています。ロールは、`quicksight:GenerateEmbedUrlForAnonymousUser` を有効にする許可を取得する必要があります。

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

`assume-role` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。Microsoft Windows マシンを使用している場合は、`export` の代わりに `set` を使用します。

```
export AWS_ACCESS_KEY_ID     = "access_key_from_assume_role"
    export AWS_SECRET_ACCESS_KEY = "secret_key_from_assume_role"
    export AWS_SESSION_TOKEN     = "session_token_from_assume_role"
```

これらのコマンドを実行すると、ウェブサイトにアクセスしているユーザーのロールセッション ID が `embedding_quicksight_dashboard_role/QuickSightEmbeddingAnonymousPolicy` に設定されます。ロールセッション ID は、`role-arn` の役割名と `role-session-name` 値で構成されています。各ユーザーに一意のロールセッション ID を使用すると、各訪問ユーザーに適切なアクセス許可が設定されます。また、各セッションを別個に保ちます。ロードバランシングなどのウェブサーバーの配列を使用していて、セッションが別のサーバーに再接続されると、新しいセッションが開始されます。

ダッシュボードの署名付き URL を取得するには、アプリケーションサーバーから `generate-embed-url-for-anynymous-user` を呼び出します。これは埋め込み可能なダッシュボードの URL を返します。次の例は、ウェブポータルまたはアプリケーションに匿名で訪問するユーザーのサーバーサイド呼び出しを使用して、埋め込みダッシュボードの URL を生成する方法を説明しています。

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

このオペレーションの使用に関する詳細については、[https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html) を参照してください。これと他の API オペレーションは、独自のコードで使用できます。

## ステップ 3: ダッシュボード URL を埋め込む
ステップ 3: URL を埋め込む


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

次のセクションでは、[Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) を使用して、ステップ 2 のダッシュボード URL をウェブサイトまたはアプリケーションページに埋め込む方法について説明します。SDK を使用すると、次のことを実行できます。
+ ダッシュボードを HTML ページに配置します。
+ ダッシュボードにパラメータを渡します。
+ アプリケーションに合わせてカスタマイズされたメッセージでエラー状態を処理します。

`GenerateEmbedUrlForAnynymousUser` API オペレーションを呼び出して URL を生成し、アプリケーションに埋め込みます。この URL は 5 分間有効で、得られたセッションは 10 時間有効です。API オペレーションは、シングルサインオンセッションを有効にする `auth_code` の URL を提供します。

以下に、`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 Embedding SDK を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、このダッシュボードをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。Amazon Quick Sight Embedding SDK を使用すると、ダッシュボード内のパラメータを制御し、ページロードの完了とエラーの観点からコールバックを受信することもできます。

埋め込みダッシュボードをホストするドメインは、許可リスト ( Quick サブスクリプションで承認されたドメインのリスト) に登録されている必要があります。この要件は、未承認のドメインが埋め込みダッシュボードをホストしないようにすることでデータを保護します。埋め込みダッシュボードのドメインの追加の詳細については、[「Amazon Quick Sight API を使用して実行時にドメインを一覧表示するの](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html)を許可する」を参照してください。

次の例は生成された URL の使用方法を示しています。このコードはアプリケーションサーバーにあります。

### SDK 2.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

この例では、Amazon Quick Sight Embedding SDK を使用して、JavaScript を使用してウェブサイトに埋め込みダッシュボードをロードします。コピーを取得するには、次のいずれかを実行します。
+ GitHub [から Amazon Quick Sight Embedding 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 Embedding SDK バージョンをダウンロードします。
+ JavaScript の依存関係の `npm` を使用する場合、次のコマンドを実行してダウンロードおよびインストールします。

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

# 埋め込みダッシュボードでエグゼクティブサマリーを有効にする
エグゼクティブサマリーを有効にする


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

埋め込みダッシュボードでエグゼクティブサマリーを有効にすることができます。有効にすると、登録されたユーザーは、Amazon Quick Sight がダッシュボードに対して生成したすべてのインサイトの概要を提供するエグゼクティブサマリーを生成できます。エグゼクティブサマリーを使用すると、ユーザーはダッシュボードに関する重要なインサイトや情報を簡単に見つけることができます。ユーザーがダッシュボードのエグゼクティブサマリーを生成する方法の詳細については、[「Amazon Quick Sight ダッシュボードのエグゼクティブサマリーを生成する](https://docs.aws.amazon.com/quicksight/latest/user/use-executive-summaries.html)」を参照してください。

**注記**  
エグゼクティブサマリーは、登録済みユーザーの埋め込みダッシュボードでのみ使用でき、匿名ユーザーまたは未登録ユーザーの埋め込みダッシュボードで有効にすることはできません。

**登録済みユーザーの埋め込みダッシュボードでエグゼクティブサマリーを有効にするには**
+ [登録済みユーザーが以下の変更を加えてダッシュボードを埋め込むには、「Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-dashboards-for-authenticated-users.html) ダッシュボードを埋め込む」のステップに従います。

  1. ステップ 2 で URL を生成するときに、次の例に示すように [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html) または [GenerateEmbedUrlForRegisteredUserWithIdentity](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUserWithIdentity.html) の `ExecutiveSummary` パラメータに `Enabled: true` を設定します。

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

  1. ステップ 3 で Amazon Quick Sight Embedding SDK を使用してダッシュボード URL を埋め込む場合は、次の例に示すように`contentOptions`、 `executiveSummary: true`で を設定します。

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

# Amazon Quick Sight APIs を使用した Amazon Quick Sight ビジュアルの埋め込み
ビジュアルの埋め込み

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 ビジュアルの埋め込み
登録済みユーザー向けのビジュアルの埋め込み


|  | 
| --- |
|  適用対象: 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: 許可をセットアップする
ステップ 1: 許可をセットアップする

次のセクションでは、バックエンドアプリケーションまたはウェブサーバーのアクセス許可を設定する方法について説明します。このタスクには IAM への管理者アクセス権が必要です。

ビジュアルにアクセスする各ユーザーは、Amazon Quick Sight にビジュアルへのアクセスとアクセス許可を付与するロールを引き受けます。これを可能にするには、 で IAM ロールを作成します AWS アカウント。IAM ポリシーをロールに関連付けて、それを引き受けるすべてのユーザーにアクセス許可を付与します。IAM ロールでは、特定のユーザープールに埋め込み URL を取得するアクセス許可を提供する必要があります。ワイルドカード文字 *\$1* を使用すると、特定の名前空間のすべてのユーザー、または特定の名前空間のユーザーのサブセットに対して、URL を生成する許可を付与できます。このためには、`quicksight:GenerateEmbedUrlForRegisteredUser` を追加します。

IAM ポリシーで条件を作成し、デベロッパーが `GenerateEmbedUrlForAnonymousUser` API オペレーションの `AllowedDomains` パラメータにリストできるドメインを制限できます。`AllowedDomains` パラメータはオプションのパラメータです。これにより、**Amazon Quick Sight の管理**メニューで設定された静的ドメインを上書きするオプションが開発者として付与されます。代わりに、生成された URL へのアクセスが可能な、ドメインもしくはサブドメインを、最大 3 つまでリストアップすることもできます。この URL は、作成した Web サイトに埋め込むことが可能です。パラメータにリストされているドメインのみが、埋め込みダッシュボードにアクセスできます。この状態にしていない場合、インターネット上の任意のドメインを `AllowedDomains` パラメータにリストできてしまいます。

デベロッパーがこのパラメータで使用できるドメインを制限するには、`AllowedEmbeddingDomains` 条件を IAM ポリシーに追加します。`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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってロールを引き受け、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 ユーザーガイド*」の以下のセクションを参照してください。
+ [ウェブ ID または OpenID Connect フェデレーション用のロールを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [SAML 2.0 フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## ステップ 2: 認証コードがアタッチされた URL を生成する
ステップ 2: URL を生成する

次のセクションでは、Amazon Quick Sight ユーザーを認証し、アプリケーションサーバーに埋め込み可能なビジュアル URL を取得する方法について説明します。IAM または Amazon Quick Sight ID タイプのビジュアルを埋め込む場合は、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


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


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


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


次の例は、埋め込みダッシュボードの 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


次の例は、埋め込みダッシュボードの 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


ロールを引き受けるには、次のいずれかの AWS Security Token Service (AWS STS) API オペレーションを選択します。
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) – ロールを引き受けるために IAM ID を使用している場合は、このオペレーションを使用します。
+ [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` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 ユーザーの場合、 `DescribeUser` を使用してユーザー ARN を取得できます。

ユーザーが 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 またはシングルサインオン (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 を埋め込む
ステップ 3: URL を埋め込む

次のセクションでは、[Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) を使用して、ステップ 3 のビジュアル URL をウェブサイトまたはアプリケーションページに埋め込む方法について説明します。この SDK を使用することで、以下を実行できます。
+ HTML ページにビジュアルを配置します。
+ このビジュアルにパラメータを渡します。
+ アプリケーションに合わせてカスタマイズされたメッセージでエラー状態を処理します。

`GenerateEmbedUrlForRegisteredUser` API オペレーションを呼び出して URL を生成し、アプリケーションに埋め込みます。この URL は 5 分間有効で、得られたセッションは最大 10 時間有効です。API オペレーションは、シングルサインオンセッションを有効にする `auth_code` の URL を提供します。

以下に、`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 Embedding SDK を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、このビジュアルをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。Amazon Quick Sight Embedding SDK を使用すると、ビジュアル内のパラメータを制御し、ページロードの完了とエラーの観点からコールバックを受信することもできます。

埋め込みビジュアルとダッシュボードをホストするドメインは、 Quick サブスクリプション用に承認されたドメインのリストである*許可*リストに含まれている必要があります。この要件は、未承認のドメインが埋め込みのビジュアルおよびダッシュボードをホストしないようにすることで、データを保護します。埋め込みビジュアルとダッシュボードのドメインの追加の詳細については、[「Amazon Quick Sight API を使用して実行時にドメインを一覧表示するの](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html)を許可する」を参照してください。

次の例は生成された URL の使用方法を示しています。このコードはアプリケーションサーバー上で生成されます。

### SDK 2.0


```
<!DOCTYPE html>
<html>

    <head>
        <title>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


```
<!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 Embedding SDK を使用して、JavaScript を使用してウェブサイトに埋め込みビジュアルをロードします。コピーを取得するには、次のいずれかを実行します。
+ GitHub [から Amazon Quick Sight Embedding 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 ビジュアルの埋め込み
匿名ユーザー向けのビジュアルの埋め込み


|  | 
| --- |
|  適用対象: 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: 許可をセットアップする
ステップ 1: 許可をセットアップする


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

次のセクションでは、バックエンドアプリケーションまたはウェブサーバーのアクセス許可を設定する方法について説明します。このタスクには IAM への管理者アクセス権が必要です。

ビジュアルにアクセスする各ユーザーは、Amazon Quick Sight にビジュアルへのアクセスとアクセス許可を付与するロールを引き受けます。これを可能にするには、 で IAM ロールを作成します AWS アカウント。IAM ポリシーをロールに関連付けて、それを引き受けるすべてのユーザーにアクセス許可を付与します。

IAM ポリシーで条件を作成し、デベロッパーが `GenerateEmbedUrlForAnonymousUser` API オペレーションの `AllowedDomains` パラメータにリストできるドメインを制限できます。`AllowedDomains` パラメータはオプションのパラメータです。これにより、**Amazon Quick Sight の管理**メニューで設定された静的ドメインを上書きするオプションが開発者として付与されます。代わりに、生成された URL へのアクセスが可能な、ドメインもしくはサブドメインを、最大 3 つまでリストアップすることもできます。この URL は、作成した Web サイトに埋め込むことが可能です。パラメータにリストされているドメインのみが、埋め込みダッシュボードにアクセスできます。この状態にしていない場合、インターネット上の任意のドメインを `AllowedDomains` パラメータにリストできてしまいます。

デベロッパーがこのパラメータで使用できるドメインを制限するには、`AllowedEmbeddingDomains` 条件を IAM ポリシーに追加します。`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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってビジュアルを開くためのロールを引き受けます。次の例は、サンプルの信頼ポリシーを示しています。

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

****  

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

------

信頼ポリシーの詳細については、「IAM ユーザーガイド」の「[IAM の一時的な認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」を参照してください。

## ステップ 2: 認証コードがアタッチされた URL を生成する
ステップ 2: URL を生成する


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

以下のセクションで、匿名の訪問者に代わって認証を行う方法と、アプリケーションサーバーから埋め込みビジュアルの URL を取得する方法について説明します。

ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わって IAM ロールを引き受けます。次に、そのユーザーがまだ存在しない場合、Amazon Quick Sight にユーザーを追加します。次に、一意のロールセッション ID として識別子を渡します。

次の例では、ユーザーに代わって IAM 認証を実行します。一意のロールセッション ID として識別子を渡します。このコードはアプリケーションサーバー上で実行されます。

### Java


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


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


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


次の例は、埋め込みダッシュボードの 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


次の例は、埋め込みダッシュボードの 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


ロールを引き受けるには、次のいずれかの AWS Security Token Service (AWS STS) API オペレーションを選択します。
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) – ロールを引き受けるために IAM ID を使用している場合は、このオペレーションを使用します。
+ [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 Language (SAML) を使用している場合は、このオペレーションを使用します。

次の例は、IAM ロールを設定するための CLI コマンドを示しています。ロールは、`quicksight:GenerateEmbedUrlForAnonymousUser` を有効にする許可を取得する必要があります。

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

`assume-role` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 を埋め込む
ステップ 3: URL を埋め込む


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

次のセクションでは、[Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) を使用して、ステップ 2 のビジュアル URL をウェブサイトまたはアプリケーションページに埋め込む方法について説明します。この SDK を使用することで、以下を実行できます。
+ HTML ページにビジュアルを配置します。
+ このビジュアルにパラメータを渡します。
+ アプリケーションに合わせてカスタマイズされたメッセージでエラー状態を処理します。

`GenerateEmbedUrlForAnonymousUser` API オペレーションを呼び出して URL を生成し、アプリケーションに埋め込みます。この URL は 5 分間有効で、得られたセッションは 10 時間有効です。API オペレーションは、シングルサインオンセッションを有効にする、認可 (auth) コード付きの URL を提供します。

以下に、`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 [Embedding SDK を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、このビジュアルをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。Amazon Quick Sight Embedding SDK を使用すると、ビジュアル内のパラメータを制御し、ビジュアルロードの完了とエラーの観点からコールバックを受信することもできます。

埋め込みビジュアルをホストするドメインは、許可リスト ( Quick サブスクリプションで承認されたドメインのリスト) に登録されている必要があります。この要件は、未承認のドメインが埋め込みのビジュアルおよびダッシュボードをホストしないようにすることで、データを保護します。埋め込みビジュアルとダッシュボードのドメインの追加の詳細については、[「Amazon Quick Sight API を使用して実行時にドメインを一覧表示するの](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html)を許可する」を参照してください。

次の例は生成された URL の使用方法を示しています。このコードはアプリケーションサーバーにあります。

### SDK 2.0


```
<!DOCTYPE html>
<html>

    <head>
        <title>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


```
<!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 Embedding SDK を使用して、JavaScript を使用してウェブサイトに埋め込みビジュアルをロードします。コピーを取得するには、次のいずれかを実行します。
+ GitHub [から Amazon Quick Sight Embedding 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 Embedding SDK バージョンをダウンロードします。
+ JavaScript の依存関係の `npm` を使用する場合、次のコマンドを実行してダウンロードおよびインストールします。

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

# 登録済みユーザー向けの Amazon Quick Sight コンソールの全機能の埋め込み
Amazon Quick Sight コンソールの埋め込み

**重要**  
Amazon Quick Sight には、分析を埋め込むための新しい API オペレーション `GenerateEmbedUrlForAnonymousUser`と があります`GenerateEmbedUrlForRegisteredUser`。  
`GetDashboardEmbedUrl` および `GetSessionEmbedUrl` API オペレーションを使用してダッシュボードと Amazon Quick Sight コンソールを埋め込むことはできますが、最新の埋め込み機能は含まれていません。古い API オペレーションを使用した埋め込みの詳細については、「 [GetDashboardEmbedURLおよび GetSessionEmbedURL API オペレーションを使用した分析の埋め込み](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html)」を参照してください。


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

Enterprise Edition では、読み取り専用ダッシュボードを提供するだけでなく、カスタムブランドのオーサリングポータルで Amazon Quick Sight コンソールエクスペリエンスを提供することもできます。この方法を使用すると、ユーザーはデータソース、データセット、分析を作成できます。ユーザーは同じインターフェイスで、ダッシュボードを作成、公開、表示できます。これらの許可の一部を制限することもできます。

埋め込みコンソールから Amazon Quick Sight にアクセスするユーザーは、作成者または管理者のセキュリティコホートに属している必要があります。リーダーは、埋め込みか の一部かにかかわらず、Amazon Quick Sight コンソールを使用して作成するための十分なアクセス権がありません AWS マネジメントコンソール。ただし、作成者と管理者は埋め込みダッシュボードにアクセスできます。アクセス許可を一部の作成機能に制限する場合は、[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)
+ [

# 登録済みユーザーの埋め込みコンソールで Generative BI 機能を有効にする
](embedding-consoles-genbi.md)

## ステップ 1: 許可をセットアップする
ステップ 1: 許可をセットアップする

次のセクションでは、バックエンドアプリケーションまたはウェブサーバーのアクセス許可を設定する方法について説明します。このタスクには IAM への管理者アクセス権が必要です。

Amazon Quick Sight にアクセスする各ユーザーは、コンソールセッションへのアクセスとアクセス許可を Amazon Quick Sight に付与するロールを引き受けます。これを可能にするには、 AWS アカウントに IAM ロールを作成します。IAM ポリシーをロールに関連付けて、それを引き受けるすべてのユーザーにアクセス許可を付与します。アクセス`quicksight:RegisterUser`許可を追加して、閲覧者が Amazon Quick Sight に読み取り専用でアクセスでき、他のデータや作成機能にアクセスできないようにします。IAM ロールは、コンソールセッションの URL を取得する許可も付与する必要があります。このためには、`quicksight:GenerateEmbedUrlForRegisteredUser` を追加します。

IAM ポリシーで条件を作成し、デベロッパーが `GenerateEmbedUrlForAnonymousUser` API オペレーションの `AllowedDomains` パラメータにリストできるドメインを制限できます。`AllowedDomains` パラメータはオプションのパラメータです。これにより、**Amazon Quick Sight の管理**メニューで設定された静的ドメインを上書きするオプションが開発者として付与されます。代わりに、生成された URL へのアクセスが可能な、ドメインもしくはサブドメインを、最大 3 つまでリストアップすることもできます。この URL は、作成した Web サイトに埋め込むことが可能です。パラメータにリストされているドメインのみが、埋め込みダッシュボードにアクセスできます。この状態にしていない場合、インターネット上の任意のドメインを `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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってロールを引き受け、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 ユーザーガイド*」の以下のセクションを参照してください。
+ [ウェブ ID または OpenID Connect フェデレーション用のロールを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [SAML 2.0 フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## ステップ 2: 認証コードがアタッチされた URL を生成する
ステップ 2: URL を生成する

次のセクションでは、ユーザーの認証方法とアプリケーションサーバー上の埋め込みコンソールセッションの URL の取得方法について説明します。

ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わって IAM ロールを引き受けます。次に、そのユーザーがまだ存在しない場合、そのユーザーを Amazon Quick Sight に追加します。次に、アプリケーションが一意のロールセッション ID として識別子を渡します。

前述のステップを実行すると、コンソールセッションの各ビューワーが Amazon Quick Sight で一意にプロビジョニングされます。行レベルのセキュリティやパラメータの動的デフォルトなど、ユーザーごとの設定も強制されます。

次の例では、ユーザーに代わって IAM 認証を実行します。このコードはアプリケーションサーバー上で実行されます。

### Java


```
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.quicksight.AmazonQuickSight;
import com.amazonaws.services.quicksight.AmazonQuickSightClientBuilder;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserRequest;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserResult;
import com.amazonaws.services.quicksight.model.RegisteredUserEmbeddingExperienceConfiguration;
import com.amazonaws.services.quicksight.model.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


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


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


次の例は、埋め込みコンソールセッションの 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


次の例は、埋め込みコンソールセッションの 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


ロールを引き受けるには、次のいずれかの AWS Security Token Service (AWS STS) API オペレーションを選択します。
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) – ロールを引き受けるために IAM ID を使用している場合は、このオペレーションを使用します。
+ [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` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 ユーザーの場合、 `DescribeUser` を使用してユーザー ARN を取得できます。

ユーザーが 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 またはシングルサインオン (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 を埋め込む
ステップ 3: URL の埋め込み

次のセクションでは、[Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) を使用して、ステップ 3 のコンソールセッション URL をウェブサイトまたはアプリケーションページに埋め込む方法について説明します。この SDK を使用することで、以下を実行できます。
+ コンソールセッションを HTML ページに配置します。
+ コンソールセッションにパラメータを渡します。
+ アプリケーションに合わせてカスタマイズされたメッセージでエラー状態を処理します。

`GenerateEmbedUrlForRegisteredUser` API オペレーションを呼び出して URL を生成し、アプリケーションに埋め込みます。この URL は 5 分間有効で、得られたセッションは最大 10 時間有効です。API オペレーションは、シングルサインオンセッションを有効にする `auth_code` の URL を提供します。

以下に、`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 [Embedding SDK を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、このコンソールセッションをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。Amazon Quick Sight Embedding SDK を使用すると、コンソールセッション内のパラメータを制御し、ページロードの完了とエラーの観点からコールバックを受信することもできます。

埋め込みダッシュボードをホストするドメインは、 Quick サブスクリプション用に承認されたドメインのリストである*許可*リストに含まれている必要があります。この要件は、未承認のドメインが埋め込みダッシュボードをホストしないようにすることでデータを保護します。埋め込みコンソールのドメインの追加の詳細については、[「Amazon Quick Sight API を使用して実行時にドメインを一覧表示するの](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html)を許可する」を参照してください。

次の例は生成された URL の使用方法を示しています。このコードはアプリケーションサーバー上で生成されます。

### SDK 2.0


```
<!DOCTYPE html>
<html>

    <head>
        <title>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


```
<!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 Embedding SDK を使用して、JavaScript を使用してウェブサイトに埋め込みコンソールセッションをロードします。コピーを取得するには、次のいずれかを実行します。
+ GitHub [から Amazon Quick Sight Embedding 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
  ```

# 登録済みユーザーの埋め込みコンソールで Generative BI 機能を有効にする
Generative BI 機能を有効にする


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

埋め込みコンソールで次の Generative BI 機能を有効にすることができます。
+ エグゼクティブサマリー: 有効にすると、登録済みの Author Pro および Reader Pro ユーザーは、ダッシュボードで主要なインサイトを簡単に検出するために Amazon Quick Sight が生成したすべてのインサイトの概要を提供するエグゼクティブサマリーを生成できます。
+ オーサリング: 有効にすると、Author Pro ユーザーは Generative BI を使用して計算フィールドを構築し、ビジュアルを構築と改良を行うことができます。
+ Q&A: 有効にすると、Author Pro および Reader Pro ユーザーは AI を活用した Q&A を使用して、データに関連する質問の提案と回答の両方を行うことができます。
+ データストーリー: 有効にすると、Author Pro および Reader Pro ユーザーは詳細を提供して、データストーリーの最初のドラフトをすばやく生成できます。

**登録済みユーザーの埋め込みコンソールで Generative 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 Embedding 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 Generative Q&A エクスペリエンスに Amazon Q を埋め込む
Generative Q&A エクスペリエンスを埋め込む


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

以下のセクションでは、LLM を搭載した拡張 NLQ 機能を使用する組み込みの Generative Q&A エクスペリエンスをセットアップする方法について説明します。Generative Q&A エクスペリエンスは、埋め込み Q 検索バーの推奨置き換えであり、ユーザーに更新された BI エクスペリエンスを提供します。

**Topics**
+ [

## 登録済みユーザー向けの Amazon Quick Sight Generative Q&A エクスペリエンスへの Amazon Q の埋め込み
](#embedded-analytics-gen-bi-authenticated-users)
+ [

## 匿名 (未登録) ユーザー向けのクイック生成 Q&A エクスペリエンスに Amazon Q を埋め込む
](#embedded-analytics-gen-bi-anonymous-users)

## 登録済みユーザー向けの Amazon Quick Sight Generative Q&A エクスペリエンスへの Amazon Q の埋め込み
登録ユーザー向けの Generative Q&A エクスペリエンスの埋め込み

以下のセクションでは、Amazon Quick Sight の登録ユーザー向けに埋め込み Generative Q&A エクスペリエンスを設定する方法について詳しく説明します。

**Topics**
+ [

### ステップ 1: 許可をセットアップする
](#embedded-analytics-gen-bi-authenticated-users-step-1)
+ [

### ステップ 2: 認証コードがアタッチされた URL を生成する
](#embedded-analytics-gen-bi-authenticated-users-step-2)
+ [

### ステップ 3: Generative Q&A エクスペリエンス URL を埋め込む
](#embedded-analytics-gen-bi-authenticated-users-step-3)
+ [

### オプションの組み込み Generative Q&A エクスペリエンス機能
](#embedded-analytics-gen-bi-authenticated-users-step-4)

### ステップ 1: 許可をセットアップする
ステップ 1: 許可をセットアップする

以下のセクションでは、Generative Q&A エクスペリエンスを埋め込むために、バックエンドアプリケーションまたはウェブサーバーのアクセス許可をセットアップする方法を説明します。このタスクには AWS Identity and Access Management 、 (IAM) への管理アクセスが必要です。

Generative 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 はデベロッパーのウェブサイトに埋め込むことができます。パラメータにリストされているドメインのみが、埋め込み Generative Q&A エクスペリエンスにアクセスすることが可能です。すなわち、この条件を設定していない場合、デベロッパーはインターネット上の任意のドメインを `AllowedDomains` パラメータにリストできてしまいます。

デベロッパーがこのパラメータで使用できるドメインを制限するには、`AllowedEmbeddingDomains` 条件を IAM ポリシーに追加します。`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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってロールを引き受け、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 ユーザーガイド*の以下のセクションを参照してください。
+ [ウェブ ID または OpenID Connect フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [SAML 2.0 フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

### ステップ 2: 認証コードがアタッチされた URL を生成する
ステップ 2: URL を生成する

以下のセクションでは、ユーザーの認証方法と、アプリケーションサーバー上に埋め込むことができる Q トピック URL の取得方法を説明します。IAM または Amazon Quick Sight アイデンティティタイプの生成 Q&A エクスペリエンスを埋め込む場合は、Q トピックをユーザーと共有します。

ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わって IAM ロールを引き受けます。次に、そのユーザーがまだ存在しない場合、アプリはユーザーを Amazon Quick Sight に追加します。次に、アプリケーションが一意のロールセッション ID として識別子を渡します。

説明されているステップを実行すると、Q トピックの各ビューワーが Amazon Quick Sight で一意にプロビジョニングされます。行レベルのセキュリティやパラメータの動的デフォルトなど、ユーザーごとの設定も強制されます。タグベースの行レベルセキュリティは、Q バーの匿名ユーザー埋め込みに使用できます。

次の例では、ユーザーに代わって IAM 認証を実行します。このコードはアプリケーションサーバー上で実行されます。

#### Java


```
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.quicksight.AmazonQuickSight;
import com.amazonaws.services.quicksight.AmazonQuickSightClientBuilder;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserRequest;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserResult;
import com.amazonaws.services.quicksight.model.RegisteredUserEmbeddingExperienceConfiguration;
import com.amazonaws.services.quicksight.model.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


**注記**  
埋め込み URL 生成 API は、ブラウザから直接呼び出すことはできません。代わりに Node.JS の例を参照してください。

#### Python3


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


次の例は、埋め込みダッシュボードの 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


以下は、埋め込まれた 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


ロールを引き受けるには、次のいずれかの AWS Security Token Service (AWS STS) API オペレーションを選択します。
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) – ロールを引き受けるために IAM ID を使用している場合は、このオペレーションを使用します。
+ [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` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 でユーザーを事前にプロビジョニングしたり、Generative 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 ユーザーの場合は、`DescribeUser` を使用してユーザーの Amazon リソースネーム (ARN) を取得できます。

ユーザーが 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 またはシングルサインオン (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: Generative Q&A エクスペリエンス URL を埋め込む
ステップ 3: URL を埋め込む

以下のセクションでは、Generative Q&A エクスペリエンス URL をウェブサイトまたはアプリケーションページに埋め込む方法を説明します。これは、[Amazon Quick Sight 埋め込み SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) で行います。この SDK を使用することで、以下を実行できます。
+ Generative Q&A エクスペリエンスを HTML ページに配置します。
+ アプリケーションのニーズに合わせて組み込みエクスペリエンスのレイアウトと外観をカスタマイズします。
+ アプリケーションに合わせてカスタマイズされたメッセージでエラー状態を処理します。

アプリケーションに埋め込むことができる URL を生成するには、`GenerateEmbedUrlForRegisteredUser` API オペレーションを呼び出します。この URL は 5 分間有効で、得られたセッションは最大 10 時間有効です。API オペレーションは、シングルサインオンセッションを有効にする `auth_code` 値を伴う URL を提供します。

以下に、`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 を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、生成 Q&A エクスペリエンスをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。

埋め込み Generative Q&A エクスペリエンスをホストするドメインが、Amazon Quick Sight サブスクリプションで承認されたドメインのリストである*許可*リストに含まれていることを確認します。この要件は、未承認のドメインが埋め込みダッシュボードをホストしないようにすることでデータを保護します。埋め込み Generative Q&A エクスペリエンス向けのドメインの追加に関する詳細については、「[ドメインの管理](manage-domains.md)」を参照してください。

Amazon Quick Sight Embedding SDK を使用して、埋め込み Generative Q&A エクスペリエンスのレイアウトと外観をアプリケーションに合わせてカスタマイズできます。`panelType` プロパティを使用して、アプリケーションでレンダリングするときに Generative Q&A エクスペリエンスのランディング状態を設定します。`panelType` プロパティを `'FULL'` に設定して、完全な Generative Q&A エクスペリエンスパネルをレンダリングします。このパネルは、Amazon Quick Sight コンソールでの Amazon Quick Sight ユーザーのエクスペリエンスに似ています。パネルのフレーム高さはユーザーインタラクションに基づいて変更さることはなく、 `frameOptions.height` プロパティで設定した値が尊重されます。以下の図は、`panelType` 値を `'FULL'` に設定するとレンダリングされる Generative Q&A エクスペリエンスパネルを示しています。

`panelType` プロパティを `'SEARCH_BAR'` に設定して、Generative Q&A エクスペリエンスを検索バーとしてレンダリングします。この検索バーは、アプリケーションに埋め込まれたときに Q 検索バーがレンダリングする方法に似ています。Generative Q&A 検索バーは、トピック選択オプション、質問提案リスト、回答パネル、またはピンボードを表示する大きなパネルに展開されます。

埋め込みアセットがロードされると、Generative Q&A 検索バーのデフォルトの最小高さが表示されます。`frameOptions.height` 値を `"38px"` に設定して検索バーエクスペリエンスを最適化することをお勧めします。`focusedHeight` プロパティを使用して、トピック選択ドロップダウンと質問提案リストの最適なサイズを設定します。`expandedHeight` プロパティを使用して、回答パネルとピンボードの最適なサイズを設定します。`'SEARCH_BAR'` オプションを選択した場合は、親コンテナのスタイルを位置で設定することをお勧めします。アプリケーション内の不要なコンテンツシフトを避けるには、[絶対] を選択します。以下の図は、`panelType` 値を `'SEARCH_BAR'` に設定したときにレンダリングされる生成 Q&A エクスペリエンス検索バーを示しています。

`panelType` プロパティを設定したら、Amazon Quick Sight 埋め込み SDK を使用して、生成 Q&A エクスペリエンスの次のプロパティをカスタマイズします。
+ Generative Q&A パネルのタイトル (`panelType: FULL` オプションにのみ適用されます)。
+ 検索バーのプレースホルダーテキスト。
+ トピックの選択を許可するかどうか。
+ トピック名を表示するか非表示にするか。
+ Amazon Q アイコンを表示するか非表示にするか (`panelType: FULL` オプションにのみ適用されます)。
+ ピンボードを表示するか非表示にするか。
+ ユーザーが Genertaive Q&A パネルをフルスクリーンに最大化できるかどうか。
+ Generative Q&A パネルのテーマ。カスタムテーマ ARN を SDK に渡して、フレームのコンテンツの外観を変更できます。Amazon Quick Sight スターターテーマは、埋め込み Generative BI パネルではサポートされていません。Amazon Quick Sight スターターテーマを使用するには、Amazon Quick Sight でカスタムテーマとして保存します。

Amazon Quick Sight Embedding SDK を使用すると、ページの生成 Q&A エクスペリエンスは 状態に基づいて動的にサイズ変更されます。Amazon Quick Sight Embedding SDK を使用すると、生成 Q&A エクスペリエンス内のパラメータを制御し、ページロードの完了、状態の変更、エラーに関してコールバックを受信することもできます。

次の例は生成された URL の使用方法を示しています。このコードはアプリケーションサーバー上で生成されます。

#### SDK 2.0


```
<!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 Embedding SDK を使用して、JavaScript を使用してウェブサイトに埋め込み Generative 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
  ```

### オプションの組み込み Generative Q&A エクスペリエンス機能
オプション機能

Embedding SDK を使用すると、埋め込み Generative Q&A エクスペリエンスで次のオプション機能を使用できます。

#### Generative Q&A 検索バーアクションを呼び出す

+ 質問を設定する — この機能は、Generative Q&A エクスペリエンスに質問を送信し、すぐに質問をクエリします。

  ```
  embeddedGenerativeQnExperience.setQuestion('show me monthly revenue');
  ```
+ 回答パネルを閉じる (Generative Q&A 検索バーオプションに適用) — この機能は回答パネルを閉じ、iframe を元の検索バーの状態に戻します。

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

詳細については、[「Amazon Quick Sight 埋め込み SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk)」を参照してください。

## 匿名 (未登録) ユーザー向けのクイック生成 Q&A エクスペリエンスに Amazon Q を埋め込む
匿名ユーザー向けの Generative Q&A エクスペリエンスの埋め込み


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

以下のセクションでは、匿名 (未登録) ユーザー向けの埋め込み Generative Q&A エクスペリエンスをセットアップする方法について詳しく説明します。

**Topics**
+ [

### ステップ 1: 許可をセットアップする
](#embedded-analytics-gen-bi-anonymous-users-step-1)
+ [

### ステップ 2: 認証コードがアタッチされた URL を生成する
](#embedded-analytics-gen-bi-anonymous-users-step-2)
+ [

### ステップ 3: Generative Q&A エクスペリエンス URL を埋め込む
](#embedded-analytics-gen-bi-anonymous-users-step-3)
+ [

### オプションの組み込み Generative Q&A エクスペリエンス機能
](#embedded-analytics-gen-bi-anonymous-users-step-4)

### ステップ 1: 許可をセットアップする
ステップ 1: 許可をセットアップする

以下のセクションでは、Generative Q&A エクスペリエンスを埋め込むために、バックエンドアプリケーションまたはウェブサーバーのアクセス許可をセットアップする方法を説明します。このタスクには AWS Identity and Access Management 、 (IAM) への管理アクセスが必要です。

Generative 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` パラメータにリストできてしまいます。

デベロッパーがこのパラメータで使用できるドメインを制限するには、`AllowedEmbeddingDomains` 条件を IAM ポリシーに追加します。`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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わって Generative 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 ユーザーガイドの「[Temporary security credentials in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」(IAM の一時的な認証情報) を参照してください

### ステップ 2: 認証コードがアタッチされた URL を生成する
ステップ 2: URL を生成する

以下のセクションでは、ユーザーの認証方法と、アプリケーションサーバー上に埋め込むことができる Q トピック URL の取得方法を説明します。

ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わって IAM ロールを引き受けます。次に、そのユーザーがまだ存在しない場合、アプリはユーザーを Amazon Quick Sight に追加します。次に、アプリケーションが一意のロールセッション ID として識別子を渡します。

#### Java


```
import java.util.List;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.quicksight.AmazonQuickSight;
import com.amazonaws.services.quicksight.AmazonQuickSightClientBuilder;
import com.amazonaws.services.quicksight.model.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


**注記**  
埋め込み URL 生成 API は、ブラウザから直接呼び出すことはできません。代わりに Node.JS の例を参照してください。

#### Python3


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

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

# Function to generate embedded URL for anonymous user
# accountId: YOUR AWS ACCOUNT ID
# 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


次の例は、埋め込みダッシュボードの 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


以下は、埋め込まれた 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


ロールを引き受けるには、次のいずれかの AWS Security Token Service (AWS STS) API オペレーションを選択します。
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) – ロールを引き受けるために IAM ID を使用している場合は、このオペレーションを使用します。
+ [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` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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: Generative Q&A エクスペリエンス URL を埋め込む
ステップ 3: URL を埋め込む

以下のセクションでは、Generative Q&A エクスペリエンス URL をウェブサイトまたはアプリケーションページに埋め込む方法を説明します。これは、[Amazon Quick Sight 埋め込み SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) で行います。この SDK を使用することで、以下を実行できます。
+ Generative Q&A エクスペリエンスを HTML ページに配置します。
+ アプリケーションのニーズに合わせて組み込みエクスペリエンスのレイアウトと外観をカスタマイズします。
+ アプリケーションに合わせてカスタマイズされたメッセージでエラー状態を処理します。

アプリケーションに埋め込むことができる URL を生成するには、`GenerateEmbedUrlForAnonymousUser` API オペレーションを呼び出します。この URL は 5 分間有効で、得られたセッションは最大 10 時間有効です。API オペレーションは、シングルサインオンセッションを有効にする `auth_code` 値を伴う URL を提供します。

以下に、`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 を使用して、](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)またはこの URL を iframe に追加して、Generative Q&A エクスペリエンスをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。

Generative Q&A エクスペリエンスをホストするドメインが、Amazon Quick Sight サブスクリプションで承認されたドメインのリストである*許可*リストに含まれていることを確認します。この要件は、未承認のドメインが埋め込み Generative Q&A エクスペリエンスをホストしないようにすることでデータを保護します。埋め込み Generative Q&A エクスペリエンス向けのドメインの追加に関する詳細については、「[ドメインの管理](manage-domains.md)」を参照してください。

Amazon Quick Sight Embedding SDK を使用して、埋め込み Generative Q&A エクスペリエンスのレイアウトと外観をアプリケーションに合わせてカスタマイズできます。`panelType` プロパティを使用して、アプリケーションでレンダリングするときに Generative Q&A エクスペリエンスのランディング状態を設定します。`panelType` プロパティを `'FULL'` に設定して、完全な Generative Q&A エクスペリエンスパネルをレンダリングします。このパネルは、Amazon Quick Sight コンソールでの Amazon Quick Sight ユーザーのエクスペリエンスに似ています。パネルのフレーム高さはユーザーインタラクションに基づいて変更さることはなく、 `frameOptions.height` プロパティで設定した値が尊重されます。以下の図は、`panelType` 値を `'FULL'` に設定するとレンダリングされる Generative Q&A エクスペリエンスパネルを示しています。

`panelType` プロパティを `'SEARCH_BAR'` に設定して、Generative Q&A エクスペリエンスを検索バーとしてレンダリングします。この検索バーは、アプリケーションに埋め込まれたときに Q 検索バーがレンダリングする方法に似ています。Generative Q&A 検索バーは、トピック選択オプション、質問提案リスト、回答パネル、またはピンボードを表示する大きなパネルに展開されます。

埋め込みアセットがロードされると、Generative Q&A 検索バーのデフォルトの最小高さが表示されます。`frameOptions.height` 値を `"38px"` に設定して検索バーエクスペリエンスを最適化することをお勧めします。`focusedHeight` プロパティを使用して、トピック選択ドロップダウンと質問提案リストの最適なサイズを設定します。`expandedHeight` プロパティを使用して、回答パネルとピンボードの最適なサイズを設定します。`'SEARCH_BAR'` オプションを選択した場合は、親コンテナのスタイルを位置で設定することをお勧めします。アプリケーション内の不要なコンテンツシフトを避けるには、[絶対] を選択します。以下の図は、`panelType` 値を `'SEARCH_BAR'` に設定したときにレンダリングされる生成 Q&A エクスペリエンス検索バーを示しています。

`panelType` プロパティを設定したら、Amazon Quick Sight 埋め込み SDK を使用して、生成 Q&A エクスペリエンスの次のプロパティをカスタマイズします。
+ Generative Q&A パネルのタイトル (`panelType: FULL` オプションにのみ適用されます)。
+ 検索バーのプレースホルダーテキスト。
+ トピックの選択を許可するかどうか。
+ トピック名を表示するか非表示にするか。
+ Amazon Q アイコンを表示するか非表示にするか (`panelType: FULL` オプションにのみ適用されます)。
+ ピンボードを表示するか非表示にするか。
+ ユーザーが Genertaive Q&A パネルをフルスクリーンに最大化できるかどうか。
+ Generative Q&A パネルのテーマ。カスタムテーマ ARN を SDK に渡して、フレームのコンテンツの外観を変更できます。Amazon Quick Sight スターターテーマは、埋め込み Generative BI パネルではサポートされていません。Amazon Quick Sight スターターテーマを使用するには、Amazon Quick Sight でカスタムテーマとして保存します。

Amazon Quick Sight Embedding SDK を使用すると、ページの生成 Q&A エクスペリエンスは 状態に基づいて動的にサイズ変更されます。Amazon Quick Sight Embedding SDK を使用すると、生成 Q&A エクスペリエンス内のパラメータを制御し、ページロードの完了、状態の変更、エラーに関してコールバックを受信することもできます。

次の例は生成された URL の使用方法を示しています。このコードはアプリケーションサーバー上で生成されます。

#### SDK 2.0


```
<!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 Embedding SDK を使用して、JavaScript を使用してウェブサイトに埋め込み Generative 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
  ```

### オプションの組み込み Generative Q&A エクスペリエンス機能
オプション機能

Embedding SDK を使用すると、埋め込み Generative Q&A エクスペリエンスで次のオプション機能を使用できます。

#### Generative Q&A 検索バーアクションを呼び出す

+ 質問を設定する — この機能は、Generative Q&A エクスペリエンスに質問を送信し、すぐに質問をクエリします。

  ```
  embeddedGenerativeQnExperience.setQuestion('show me monthly revenue');
  ```
+ 回答パネルを閉じる (Generative Q&A 検索バーオプションに適用) — この機能は回答パネルを閉じ、iframe を元の検索バーの状態に戻します。

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

詳細については、[「Amazon Quick Sight 埋め込み SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk)」を参照してください。

# Amazon Quick Sight Q 検索バーの埋め込み (クラシック)
Amazon Quick Sight Q 検索バーの埋め込み (クラシック)


|  | 
| --- |
|    対象者:  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 検索バーの埋め込み
登録済みユーザー向けの Q 検索バーの埋め込み


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

**注記**  
埋め込み Amazon Quick Sight Q 検索バーは、従来の Amazon Quick Sight Q&A エクスペリエンスを提供します。Amazon Quick Sight は Amazon Q Business と統合して、新しい生成 Q&A エクスペリエンスを起動します。デベロッパーは、新しい生成 Q&A エクスペリエンスを使用することをお勧めします。埋め込み Generative Q&A エクスペリエンスの詳細については、[「Amazon Quick Sight Generative 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: 許可をセットアップする
ステップ 1: 許可をセットアップする

**注記**  
埋め込み Amazon Quick Sight Q 検索バーは、従来の Amazon Quick Sight Q&A エクスペリエンスを提供します。Amazon Quick Sight は Amazon Q Business と統合して、新しい生成 Q&A エクスペリエンスを起動します。デベロッパーは、新しい生成 Q&A エクスペリエンスを使用することをお勧めします。埋め込み Generative Q&A エクスペリエンスの詳細については、[「Amazon Quick Sight Generative 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` パラメータにリストできてしまいます。

デベロッパーがこのパラメータで使用できるドメインを制限するには、`AllowedEmbeddingDomains` 条件を IAM ポリシーに追加します。`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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってロールを引き受け、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 ユーザーガイド*の以下のセクションを参照してください。
+ [ウェブ ID または OpenID Connect フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [SAML 2.0 フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## ステップ 2: 認証コードがアタッチされた URL を生成する
ステップ 2: URL を生成する

**注記**  
埋め込み Amazon Quick Sight Q 検索バーは、従来の Amazon Quick Sight Q&A エクスペリエンスを提供します。Amazon Quick Sight は Amazon Q Business と統合して、新しい生成 Q&A エクスペリエンスを起動します。デベロッパーは、新しい生成 Q&A エクスペリエンスを使用することをお勧めします。埋め込み Generative Q&A エクスペリエンスの詳細については、[「Amazon Quick Sight Generative Q&A エクスペリエンスに Amazon Q を埋め込む](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html)」を参照してください。

以下のセクションでは、ユーザーの認証方法と、アプリケーションサーバー上に埋め込むことができる Q トピック URL の取得方法を説明します。IAM または Amazon Quick Sight ID タイプの Q バーを埋め込む場合は、Q トピックをユーザーと共有します。

ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わって IAM ロールを引き受けます。次に、そのユーザーがまだ存在しない場合、アプリはユーザーを Amazon Quick Sight に追加します。次に、アプリケーションが一意のロールセッション ID として識別子を渡します。

説明されているステップを実行すると、Q トピックの各ビューワーが Amazon Quick Sight で一意にプロビジョニングされます。行レベルのセキュリティやパラメータの動的デフォルトなど、ユーザーごとの設定も強制されます。

次の例では、ユーザーに代わって IAM 認証を実行します。このコードはアプリケーションサーバー上で実行されます。

### Java


```
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
        import com.amazonaws.auth.AWSCredentialsProvider;
        import com.amazonaws.regions.Regions;
        import com.amazonaws.services.quicksight.AmazonQuickSight;
        import com.amazonaws.services.quicksight.AmazonQuickSightClientBuilder;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserRequest;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForRegisteredUserResult;
import com.amazonaws.services.quicksight.model.RegisteredUserEmbeddingExperienceConfiguration;
import com.amazonaws.services.quicksight.model.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


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


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


次の例は、埋め込みダッシュボードの 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


以下は、埋め込まれた 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


ロールを引き受けるには、次のいずれかの AWS Security Token Service (AWS STS) API オペレーションを選択します。
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) – ロールを引き受けるために IAM ID を使用している場合は、このオペレーションを使用します。
+ [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` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 ユーザーの場合は、`DescribeUser` を使用してユーザーの Amazon リソースネーム (ARN) を取得できます。

ユーザーが 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 またはシングルサインオン (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 を埋め込む
ステップ 3: URL を埋め込む

**注記**  
埋め込み Amazon Quick Sight Q 検索バーは、従来の Amazon Quick Sight Q&A エクスペリエンスを提供します。Amazon Quick Sight は Amazon Q Business と統合して、新しい生成 Q&A エクスペリエンスを起動します。デベロッパーは、新しい生成 Q&A エクスペリエンスを使用することをお勧めします。埋め込み Generative Q&A エクスペリエンスの詳細については、[「Amazon Quick Sight Generative 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 オペレーションは、シングルサインオンセッションを有効にする `auth_code` 値を伴う URL を提供します。

以下に、`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 を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、ウェブページに Q 検索バーを埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、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 Embedding SDK を使用すると、ページの Q 検索バーは 状態に基づいて動的にサイズ変更されます。Amazon Quick Sight Embedding SDK を使用すると、Q 検索バー内のパラメータを制御し、ページロードの完了とエラーの観点からコールバックを受信することもできます。

次の例は生成された URL の使用方法を示しています。このコードはアプリケーションサーバー上で生成されます。

### SDK 2.0


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


```
<!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 Embedding 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 検索バー埋め込み機能
オプション機能

**注記**  
埋め込み Amazon Quick Sight Q 検索バーは、従来の Amazon Quick Sight Q&A エクスペリエンスを提供します。Amazon Quick Sight は Amazon Q Business と統合して、新しい生成 Q&A エクスペリエンスを起動します。デベロッパーは、新しい生成 Q&A エクスペリエンスを使用することをお勧めします。埋め込み Generative Q&A エクスペリエンスの詳細については、[「Amazon Quick Sight Generative Q&A エクスペリエンスに Amazon Q を埋め込む](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html)」を参照してください。

埋め込み SDK を使用して、埋め込み Q 検索バーで次のオプション機能を使用できます。

### Q 検索バーのアクションを呼び出す


次のオプションは、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 検索バーの埋め込み
匿名ユーザーの Amazon Quick Sight Q 検索バーの埋め込み


|  | 
| --- |
|    対象者:  Amazon Quick デベロッパー  | 

**注記**  
埋め込み Amazon Quick Sight Q 検索バーは、従来の Amazon Quick Sight Q&A エクスペリエンスを提供します。Amazon Quick Sight は Amazon Q Business と統合して、新しい生成 Q&A エクスペリエンスを起動します。デベロッパーは、新しい生成 Q&A エクスペリエンスを使用することをお勧めします。埋め込み Generative Q&A エクスペリエンスの詳細については、[「Amazon Quick Sight Generative 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: 許可をセットアップする
ステップ 1: 許可をセットアップする

**注記**  
埋め込み Amazon Quick Sight Q 検索バーは、従来の Amazon Quick Sight Q&A エクスペリエンスを提供します。Amazon Quick Sight は Amazon Q Business と統合して、新しい生成 Q&A エクスペリエンスを起動します。デベロッパーは、新しい生成 Q&A エクスペリエンスを使用することをお勧めします。埋め込み Generative Q&A エクスペリエンスの詳細については、[「Amazon Quick Sight Generative 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` パラメータにリストできてしまいます。

デベロッパーがこのパラメータで使用できるドメインを制限するには、`AllowedEmbeddingDomains` 条件を IAM ポリシーに追加します。`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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わって 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 ユーザーガイドの「[Temporary security credentials in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」(IAM の一時的な認証情報) を参照してください

## ステップ 2: 認証コードがアタッチされた URL を生成する
ステップ 2: URL を生成する

**注記**  
埋め込み Amazon Quick Sight Q 検索バーは、従来の Amazon Quick Sight Q&A エクスペリエンスを提供します。Amazon Quick Sight は Amazon Q Business と統合して、新しい生成 Q&A エクスペリエンスを起動します。デベロッパーは、新しい生成 Q&A エクスペリエンスを使用することをお勧めします。埋め込み Generative Q&A エクスペリエンスの詳細については、[「Amazon Quick Sight Generative 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


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


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


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


次の例は、埋め込みダッシュボードの 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


以下は、埋め込まれた 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


ロールを引き受けるには、次のいずれかの AWS Security Token Service (AWS STS) API オペレーションを選択します。
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) – ロールを引き受けるために IAM ID を使用している場合は、このオペレーションを使用します。
+ [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` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 を埋め込む
ステップ 3: URL を埋め込む

**注記**  
埋め込み 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 オペレーションは、シングルサインオンセッションを有効にする `auth_code` 値を伴う URL を提供します。

以下に、`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 を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、ウェブページに Q 検索バーを埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、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 Embedding SDK を使用すると、ページの Q 検索バーは状態に基づいて動的にサイズ変更されます。Amazon Quick Sight Embedding SDK を使用すると、Q 検索バー内のパラメータを制御し、ページロードの完了とエラーの観点からコールバックを受信することもできます。

次の例は生成された URL の使用方法を示しています。このコードはアプリケーションサーバー上で生成されます。

### SDK 2.0


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


```
<!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 Embedding 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 検索バー埋め込み機能
オプション機能

**注記**  
埋め込み Amazon Quick Sight Q 検索バーは、従来の Amazon Quick Sight Q&A エクスペリエンスを提供します。Amazon Quick Sight は Amazon Q Business と統合して、新しい生成 Q&A エクスペリエンスを起動します。デベロッパーは、新しい生成 Q&A エクスペリエンスを使用することをお勧めします。埋め込み Generative Q&A エクスペリエンスの詳細については、[「Amazon Quick Sight Generative Q&A エクスペリエンスに Amazon Q を埋め込む](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html)」を参照してください。

埋め込み SDK を使用して、埋め込み Q 検索バーで次のオプション機能を使用できます。

### Q 検索バーのアクションを呼び出す


次のオプションは、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 操作を使用した分析の埋め込み
その他の埋め込み API 操作


|  | 
| --- |
|  適用対象: 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**
+ [

# GetDashboardEmbedURL (古い API) を使用した全ユーザー向けのダッシュボードの埋め込み
](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)

# GetDashboardEmbedURL (古い API) を使用した全ユーザー向けのダッシュボードの埋め込み


**重要**  
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: 許可をセットアップする
ステップ 1: 許可をセットアップする

**重要**  
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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってロールを引き受け、ダッシュボードを開きます。次の例は、`QuickSightEmbeddingAnonymousPolicy` というロールを示しています。このロールには、リソースとしてサンプルポリシーが先行しています。

信頼ポリシーの詳細については、「IAM ユーザーガイド」の「[IAM の一時的な認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」を参照してください。

# ステップ 2: 認証コードがアタッチされた URL を取得する
ステップ 2: URL を取得する

**重要**  
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 ID を使用している場合は、このオペレーションを使用します。
+ [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 Language (SAML) を使用している場合は、このオペレーションを使用します。

次の例は、IAM ロールを設定するための CLI コマンドを示しています。ロールは、`quicksight:GetDashboardEmbedURL` を有効にする許可を取得する必要があります。

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

`assume-role` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 を埋め込む
ステップ 3: URL を埋め込む

**重要**  
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 オペレーションは、シングルサインオンセッションを有効にする `auth_code` の URL を提供します。

以下に、`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 [Embedding SDK を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、このダッシュボードをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。Amazon Quick Sight Embedding 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 Embedding 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 Embedding SDK バージョンをダウンロードします。
+ JavaScript の依存関係の `npm` を使用する場合、次のコマンドを実行してダウンロードおよびインストールします。

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

# GetDashboardEmbedUrl (古い API) を使用した登録済みユーザー向けのダッシュボードの埋め込み


**重要**  
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: 許可をセットアップする
ステップ 1: 許可をセットアップする

**重要**  
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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってロールを引き受け、Amazon Quick Sight でユーザーをプロビジョニングできます。次の例は、`embedding_quicksight_dashboard_role` というロールを示しています。このロールには、リソースとしてサンプルポリシーが先行しています。

OpenId Connect または SAML 認証の信頼ポリシーに関する詳細については、「*IAM ユーザーガイド*」の以下のセクションを参照してください。
+ [ウェブ ID または OpenID Connect フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [SAML 2.0 フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

# ステップ 2: 認証コードがアタッチされた URL を取得する
ステップ 2: URL を取得する

**重要**  
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 ID を使用している場合は、このオペレーションを使用します。
+ [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` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 ユーザーの場合、 `DescribeUser` を使用してユーザー ARN を取得できます。

ユーザーが 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 を埋め込む
ステップ 3: URL を埋め込む

**重要**  
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 オペレーションは、シングルサインオンセッションを有効にする `auth_code` の URL を提供します。

以下に、`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 を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、このダッシュボードをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。Amazon Quick Sight Embedding 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 Embedding 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 コンソールの埋め込み


**重要**  
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: 許可をセットアップする
ステップ 1: 許可をセットアップする

**重要**  
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 ポリシーをロールに関連付けて、それを引き受けるすべてのユーザーにアクセス許可を付与します。アクセス`quicksight:RegisterUser`許可を追加して、閲覧者が Amazon Quick Sight に読み取り専用でアクセスでき、他のデータや作成機能にアクセスできないようにします。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 ID に関連付けられた信頼ポリシーが必要です。つまり、ユーザーがアプリケーションにアクセスすると、アプリケーションはユーザーに代わってロールを引き受け、Amazon Quick Sight でユーザーをプロビジョニングできます。次の例は、`embedding_quicksight_console_session_role` というロールを示しています。このロールには、リソースとしてサンプルポリシーが先行しています。

OpenId Connect または SAML 認証の信頼ポリシーに関する詳細については、「*IAM ユーザーガイド*」の以下のセクションを参照してください。
+ [ウェブ ID または OpenID Connect フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [SAML 2.0 フェデレーション用のロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

# ステップ 2: 認証コードがアタッチされた URL を取得する
ステップ 2: URL を取得する

**重要**  
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 ID を使用している場合は、このオペレーションを使用します。
+ [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` オペレーションは、アクセスキー、シークレットキー、およびセッショントークンの 3 つの出力パラメータを返します。

**注記**  
`AssumeRole` オペレーションを呼び出すときに `ExpiredToken` エラーが発生した場合は、以前の `SESSION TOKEN` がまだ環境変数に残っている可能性があります。以下の変数を設定することで、これをオフにします。  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

次の例は、CLI でこれら 3 つのパラメータを設定する方法を示しています。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 ユーザーの場合、 `DescribeUser` を使用してユーザー ARN を取得できます。

ユーザーが 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 を埋め込む
ステップ 3: URL の埋め込み

**重要**  
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 オペレーションは、シングルサインオンセッションを有効にする `auth_code` の URL を提供します。

以下に、`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 [Embedding SDK を使用する](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)か、この URL を iframe に追加して、このコンソールセッションをウェブページに埋め込みます。固定の高さと幅の数値 (ピクセル単位) を設定した場合、Amazon Quick Sight はそれらを使用し、ウィンドウのサイズ変更に伴ってビジュアルを変更しません。相対的な高さと幅の割合を設定すると、Amazon Quick Sight はウィンドウサイズの変化に応じて変化するレスポンシブレイアウトを提供します。Amazon Quick Sight Embedding 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 Embedding 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
  ```