

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Analisis tertanam untuk Amazon Quick Sight
<a name="embedded-analytics"></a>

**penting**  
Amazon Quick Sight memiliki operasi API baru untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan operasi `GetSessionEmbedUrl` API `GetDashboardEmbedUrl` dan untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi tidak berisi kemampuan penyematan terbaru. Untuk informasi selengkapnya tentang penyematan menggunakan operasi API lama, lihat[Menyematkan analitik menggunakan operasi GetDashboardEmbedURL dan GetSessionEmbedURL API](embedded-analytics-deprecated.md).


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Dengan analitik tertanam Amazon Quick Sight, Anda dapat mengintegrasikan pengalaman berbasis data dengan mulus ke dalam aplikasi perangkat lunak Anda. Anda dapat menata komponen yang disematkan agar sesuai dengan merek Anda. Kemampuan ini membawa kekuatan Amazon Quick Sight kepada pengguna akhir Anda, di mana mereka dapat menganalisis dan berinteraksi dengan data tanpa harus meninggalkan aplikasi. Meningkatkan pengalaman pengguna dengan mengurangi kompleksitas kognitif memberi pengguna kesempatan yang lebih baik untuk pemahaman dan efektivitas yang lebih dalam. 

Amazon Quick Sight mendukung penyematan untuk elemen-elemen ini: 
+ Konsol Amazon Quick Sight (pengalaman penulisan penuh untuk pengguna terdaftar)
+ Dasbor dan visual Amazon Quick Sight (untuk pengguna terdaftar, pengguna anonim, pengguna akhir publik)
+ Bilah pencarian Amazon Quick Sight Q (untuk pengguna terdaftar dan pengguna anonim)

Dengan konsol Amazon Quick Sight yang disematkan, Anda menyematkan pengalaman Amazon Quick Sight secara lengkap. Melakukan hal ini memungkinkan untuk menggunakan alat penulisan Amazon Quick Sight sebagai bagian dari aplikasi Anda, bukan dalam konteks Konsol Manajemen AWS atau situs web mandiri. Pengguna konsol Amazon Quick Sight yang disematkan harus terdaftar sebagai penulis atau admin Amazon Quick Sight di situs Anda. Akun AWS Mereka juga perlu diautentikasi menjadi sama Akun AWS, menggunakan salah satu metode otentikasi yang didukung Amazon Quick Sight. 

Dengan dasbor atau visual Amazon Quick Sight yang disematkan, pembaca mendapatkan fungsionalitas dan interaktivitas yang sama seperti yang mereka lakukan di dasbor atau visual yang diterbitkan. Untuk menggunakan dasbor atau visual yang disematkan, pembaca (pemirsa) dapat menyertakan salah satu dari yang berikut:
+ Pengguna Amazon Quick Sight diautentikasi di Anda Akun AWS dengan metode apa pun yang didukung oleh Amazon Quick Sight.
+ Pengunjung yang tidak diautentikasi ke situs web atau aplikasi — Opsi ini memerlukan paket sesi dengan harga kapasitas. Untuk informasi tentang jenis langganan, lihat [Memahami langganan dan peran Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/user-types.html#subscription-role-mapping).
+ Beberapa pengguna akhir melihat tampilan pada monitor atau layar besar dengan akses terprogram.

Jika aplikasi Anda juga berada di dalam AWS, aplikasi tidak perlu berada di tempat yang Akun AWS sama dengan langganan Amazon Quick Sight. Namun, aplikasi harus dapat mengasumsikan peran AWS Identity and Access Management (IAM) yang Anda gunakan untuk panggilan API. 

Sebelum Anda dapat menyematkan konten, pastikan bahwa Anda menggunakan Amazon Quick Sight Enterprise edisi di Akun AWS mana Anda berencana untuk menggunakan embedding. 

Penyematan Amazon Quick Sight tersedia di semua yang didukung Wilayah AWS. 

**Topics**
+ [

# Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda
](embedding-overview.md)
+ [

# Menyematkan aset Amazon Quick Sight khusus ke dalam aplikasi Anda
](customize-and-personalize-embedded-analytics.md)
+ [

# Menyematkan visual dan dasbor Amazon Quick Sight dengan kode sematan 1-klik
](1-click-embedding.md)
+ [

# Menyematkan dengan Amazon Quick Sight APIs
](embedded-analytics-api.md)

# Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda
<a name="embedding-overview"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 

Untuk menyematkan analitik, Anda dapat menjalankan API penyematan Amazon Quick Sight untuk menghasilkan kode sematan. Atau untuk dasbor, Anda dapat menyalin kode sematan saat membagikan dasbor di Amazon Quick Sight. Setiap opsi dijelaskan di bawah ini.

## Penyematan 1-klik untuk pengguna terdaftar
<a name="embedding-overview-1-click"></a>

Ketika Anda berbagi dasbor dengan pengguna terdaftar di akun Anda, Anda dapat menyalin kode embed untuk dasbor dan menempelkannya ke HTML aplikasi internal Anda. 

Menggunakan penyematan perusahaan 1-klik paling baik untuk saat Anda ingin menyematkan dasbor Amazon Quick Sight di aplikasi internal yang harus diautentikasi oleh pengguna. Ketika Anda menyalin kode embed, Anda mendapatkan kode embed statis yang tidak berubah.

Untuk informasi selengkapnya, lihat [Menyematkan visual dan dasbor Amazon Quick Sight untuk pengguna terdaftar dengan kode sematan 1-klik](embedded-analytics-1-click.md).

## Menyematkan dengan Amazon Quick Sight APIs
<a name="embedding-overview-api"></a>

Menyematkan dengan Amazon Quick Sight API adalah yang terbaik untuk saat Anda ingin menyematkan pengalaman Amazon Quick Sight dalam aplikasi internal yang harus diautentikasi oleh pengguna, atau aplikasi eksternal yang dapat diakses siapa pun. Saat Anda menggunakan operasi penyematan API untuk menghasilkan kode sematan, Anda mendapatkan kode satu kali.

Lihat informasi yang lebih lengkap di [Menyematkan dengan Amazon Quick Sight APIs](embedded-analytics-api.md).

# Menyematkan aset Amazon Quick Sight khusus ke dalam aplikasi Anda
<a name="customize-and-personalize-embedded-analytics"></a>

Anda dapat menggunakan analitik tertanam Amazon Quick Sight untuk menyematkan aset Amazon Quick Sight khusus ke dalam aplikasi Anda yang disesuaikan untuk memenuhi kebutuhan bisnis Anda. Untuk dasbor dan visual yang disematkan, penulis Amazon Quick Sight dapat menambahkan filter dan menelusuri yang dapat diakses pembaca saat mereka menavigasi dasbor atau visual. Pengembang Amazon Quick Sight juga dapat menggunakan Amazon Quick Sight SDKs untuk membangun integrasi yang lebih ketat antara aplikasi SaaS mereka dan aset tertanam Amazon Quick Sight mereka untuk menambahkan tindakan callback titik data ke visual di dasbor saat runtime.

Untuk informasi selengkapnya tentang Amazon Quick Sight SDKs, lihat `amazon-quicksight-embedding-sdk` di [GitHub](https://github.com/awslabs/amazon-quicksight-embedding-sdk)atau [NPM](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).

Berikut ini, Anda dapat menemukan deskripsi tentang cara menggunakan Amazon Quick Sight SDKs untuk menyesuaikan analitik tertanam Amazon Quick Sight Anda.

**Topics**
+ [

# Menambahkan tindakan panggilan balik yang disematkan saat runtime di Amazon Quick Sight
](embedding-custom-actions-callback.md)
+ [

# Memfilter data saat runtime untuk dasbor dan visual tertanam Amazon Quick Sight
](embedding-runtime-filtering.md)
+ [

# Sesuaikan tampilan dan nuansa dasbor dan visual tertanam Amazon Quick Sight
](embedding-runtime-theming.md)
+ [

# Menggunakan Amazon Quick Sight Embedding SDK untuk mengaktifkan tautan yang dapat dibagikan ke tampilan dasbor yang disematkan
](embedded-view-sharing.md)

# Menambahkan tindakan panggilan balik yang disematkan saat runtime di Amazon Quick Sight
<a name="embedding-custom-actions-callback"></a>

Gunakan tindakan callback titik data tertanam untuk membangun integrasi yang lebih erat antara aplikasi perangkat lunak sebagai layanan (SaaS) dan dasbor dan visual tertanam Amazon Quick Sight. Pengembang dapat mendaftarkan titik data untuk dipanggil kembali dengan SDK penyematan Amazon Quick Sight. Saat Anda mendaftarkan tindakan callback untuk visual, pembaca dapat memilih titik data pada visual untuk menerima panggilan balik yang menyediakan data spesifik ke titik data yang dipilih. Informasi ini dapat digunakan untuk menandai catatan kunci, mengkompilasi data mentah khusus untuk titik data, menangkap catatan, dan mengkompilasi data untuk proses backend.

Panggilan balik yang disematkan tidak didukung untuk konten visual kustom, kotak teks, atau wawasan.

Sebelum Anda mulai mendaftarkan titik data untuk callback, perbarui Embedding SDK ke versi 2.3.0. Untuk informasi selengkapnya tentang menggunakan Amazon Quick Sight Embedding SDK, lihat di. [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk) GitHub

Callback titik data dapat didaftarkan ke satu atau beberapa visual saat runtime melalui Amazon Quick Sight SDK. Anda juga dapat mendaftarkan callback titik data ke interaksi apa pun yang didukung oleh struktur API. [VisualCustomAction](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualCustomAction.html) Hal ini memungkinkan callback titik data untuk memulai ketika pengguna memilih titik data pada visual atau ketika titik data dipilih dari menu konteks titik data. Contoh berikut mendaftarkan callback titik data yang dimulai pembaca ketika mereka memilih titik data pada visual.

```
/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);
```

Anda juga dapat mengonfigurasi contoh sebelumnya untuk memulai callback titik data saat pengguna membuka menu konteks. Untuk melakukan ini dengan contoh sebelumnya, tetapkan nilai to. `actionTrigger` `ActionTrigger.DATA_POINT_MENU`

Setelah callback titik data terdaftar, itu diterapkan ke sebagian besar titik data pada visual atau visual yang ditentukan. Callback tidak berlaku untuk total atau subtotal pada visual. Saat pembaca berinteraksi dengan titik data, `CALLBACK_OPERATION_INVOKED` pesan akan dipancarkan ke SDK penyematan Amazon Quick Sight. Pesan ini ditangkap oleh `onMessage` handler. Pesan berisi nilai mentah dan tampilan untuk baris penuh data yang terkait dengan titik data yang dipilih. Ini juga berisi metadata kolom untuk semua kolom dalam visual tempat titik data terkandung di dalamnya. Berikut ini adalah contoh `CALLBACK_OPERATION_INVOKED` pesan.

```
{
   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"
                                }
                            }
                        }
                    }
            ]
        }
   ]
}
```

# Memfilter data saat runtime untuk dasbor dan visual tertanam Amazon Quick Sight
<a name="embedding-runtime-filtering"></a>

Anda dapat menggunakan metode filter di Amazon Quick Sight embedding SDK untuk memanfaatkan kekuatan filter Amazon Quick Sight dalam aplikasi perangkat lunak Anda sebagai layanan (SaaS) saat runtime. Filter runtime memungkinkan pemilik bisnis untuk mengintegrasikan aplikasi mereka dengan dasbor dan visual Amazon Quick Sight yang disematkan. Untuk mencapai hal ini, buat kontrol filter khusus dalam aplikasi Anda dan terapkan preset filter berdasarkan data dari aplikasi Anda. Kemudian, pengembang dapat mempersonalisasi konfigurasi filter untuk pengguna akhir saat runtime.

Pengembang dapat membuat, menanyakan, memperbarui, dan menghapus filter Amazon Quick Sight pada dasbor atau visual yang disematkan dari aplikasi mereka dengan Amazon Quick Sight Embedding SDK. Buat objek filter Amazon Quick Sight di aplikasi Anda dengan model [FilterGroup](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterGroup.html)data dan terapkan ke dasbor dan visual yang disematkan menggunakan metode filter. Untuk informasi selengkapnya tentang menggunakan Amazon Quick Sight Embedding SDK, lihat di. [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk) GitHub

**Prasyarat**

Sebelum Anda dapat memulai, pastikan bahwa Anda menggunakan Amazon Quick Sight Embedding SDK versi 2.5.0 atau lebih tinggi.

## Terminologi dan konsep
<a name="runtime-filtering-terminology"></a>

Terminologi berikut dapat berguna saat bekerja dengan penyaringan runtime tertanam.
+ *Grup filter* — Sekelompok filter individual. Filter yang terletak di dalam a `FilterGroup` adalah OR-ed satu sama lain. Filter dalam a [FilterGroup](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterGroup.html)diterapkan pada lembar atau visual yang sama.
+ *Filter* — Filter tunggal. Filter dapat berupa jenis filter kategori, numerik, atau datetime. Untuk informasi selengkapnya tentang filter, lihat [Menyaring](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html).

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

Sebelum Anda mulai, pastikan Anda memiliki aset dan informasi berikut yang disiapkan.
+ ID lembar lembar yang ingin Anda cakup `FilterGroup` ke. Ini dapat diperoleh dengan `getSheets` metode di Embedding SDK.
+ Dataset dan pengidentifikasi kolom dari kumpulan data yang ingin Anda filter. Ini dapat diperoleh melalui operasi [DescribeDashboardDefinition](https://docs.aws.amazon.com/APIReference/API_DescribeDashboardDefinition.html)API.

  Bergantung pada jenis kolom yang Anda gunakan, mungkin ada batasan pada jenis filter yang dapat ditambahkan ke aset yang disematkan. Untuk informasi selengkapnya tentang pembatasan filter, lihat [Memfilter](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html).
+ ID visual visual yang ingin Anda lingkup `FilterGroup` ke, jika berlaku. Ini dapat diperoleh dengan menggunakan `getSheetVisuals` metode di Embedding SDK.

  Selain `getSheetVisuals` metode, `FilterGroup` yang Anda tambahkan hanya dapat dicakup ke lembar yang saat ini dipilih.

Untuk menggunakan fitur ini, Anda harus sudah memiliki dasbor atau visual yang disematkan ke dalam aplikasi Anda melalui Amazon Quick Sight Embedding SDK. Untuk informasi selengkapnya tentang menggunakan Amazon Quick Sight Embedding SDK, lihat di. [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk) GitHub

## Antarmuka metode SDK
<a name="runtime-filtering-sdk-interface"></a>

**Metode pengambil penyematan dasbor**

Tabel berikut menjelaskan metode pengambil penyematan dasbor yang berbeda yang dapat digunakan pengembang.


| Metode | Deskripsi | 
| --- | --- | 
|  `getFilterGroupsForSheet(sheetId: string) `  |  Mengembalikan semua FilterGroups yang saat ini dicakup ke lembar yang disediakan dalam parameter.  | 
|  `getFilterGroupsForVisual(sheetId: string, visualId: string)`  |  Mengembalikan semua `FilterGroups` yang dicakup ke visual yang disediakan dalam parameter.  | 

Jika lembar yang disediakan dalam parameter bukan lembar yang saat ini dipilih dari dasbor tertanam, metode di atas mengembalikan kesalahan.

**Metode pengambil penyematan visual**

Tabel berikut menjelaskan berbagai metode pengambil penyematan visual yang dapat digunakan pengembang.


| Metode | Deskripsi | 
| --- | --- | 
|  `getFilterGroups()`  |  Mengembalikan semua `FilterGroups` yang saat ini dicakup ke visual tertanam.  | 

**Metode setter**

Tabel berikut menjelaskan metode setter berbeda yang dapat digunakan pengembang untuk dashboard atau penyematan visual.


| Metode | Deskripsi | 
| --- | --- | 
|  `addFilterGroups(filterGroups: FilterGroup[])`  |  Menambahkan dan menerapkan yang disediakan **FilterGroups**ke dasbor atau visual yang disematkan. A `ResponseMessage` yang menunjukkan apakah penambahan berhasil dikembalikan.  | 
|  `updateFilterGroups(filterGroups: FilterGroup[])`  |  Memperbarui pengalaman tertanam yang berisi `FilterGroupId` sama dengan `FilterGroup` yang disediakan dalam parameter. `FilterGroups` A `ResponseMessage` yang menunjukkan apakah pembaruan berhasil dikembalikan.  | 
|  `removeFilterGroups(filterGroupsOrIds: FilterGroup[] \| string[])`  |  Menghapus yang disediakan FilterGroups dari dasbor dan mengembalikan a `ResponseMessage` yang menunjukkan apakah upaya penghapusan berhasil.  | 

`FilterGroup`Yang disediakan harus dicakup ke lembar tertanam atau visual yang saat ini dipilih.

# Sesuaikan tampilan dan nuansa dasbor dan visual tertanam Amazon Quick Sight
<a name="embedding-runtime-theming"></a>

Anda dapat menggunakan Amazon Quick Sight Embedding SDK (versi 2.5.0 dan yang lebih tinggi) untuk membuat perubahan pada tema dasbor dan visual Amazon Quick Sight yang disematkan saat runtime. Tema runtime memudahkan untuk mengintegrasikan aplikasi Perangkat Lunak sebagai layanan (SaaS) Anda dengan aset tertanam Amazon Quick Sight Anda. Tema runtime memungkinkan Anda untuk menyinkronkan tema konten yang disematkan dengan tema aplikasi induk tempat aset Amazon Quick Sight Anda disematkan. Anda juga dapat menggunakan tema runtime untuk menambahkan opsi penyesuaian bagi pembaca. Perubahan tema dapat diterapkan pada aset yang disematkan saat inisialisasi atau sepanjang masa pakai dasbor atau visual Anda yang disematkan.

Untuk informasi lebih lanjut tentang tema, lihat[Menggunakan tema di Amazon Quick Sight](themes-in-quicksight.md). Untuk informasi selengkapnya tentang menggunakan Amazon Quick Sight Embedding SDK, lihat di. [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk) GitHub

**Prasyarat**

Sebelum Anda dapat memulai, pastikan Anda memiliki prasyarat berikut.
+ Anda menggunakan Amazon Quick Sight Embedding SDK versi 2.5.0 atau lebih tinggi.
+ Izin untuk mengakses tema yang ingin Anda kerjakan. Untuk memberikan izin ke tema di Amazon Quick Sight, lakukan panggilan `UpdateThemePermissions` API atau gunakan ikon **Bagikan** di sebelah tema di editor analisis konsol Amazon Quick Sight.

## Terminologi dan konsep
<a name="runtime-theming-terminology"></a>

Terminologi berikut dapat berguna saat bekerja dengan tema runtime tertanam.
+ *Tema* - Kumpulan pengaturan yang dapat Anda terapkan ke beberapa analisis dan dasbor yang mengubah cara konten ditampilkan.
+ *ThemeConfiguration*- Objek konfigurasi yang berisi semua properti tampilan untuk tema.
+ *Theme Override* - `ThemeConfiguration` Objek yang diterapkan pada tema aktif untuk mengesampingkan beberapa atau semua aspek bagaimana konten ditampilkan.
+ *Tema ARN* - Nama Sumber Daya Amazon (ARN) yang mengidentifikasi tema Amazon Quick Sight. Berikut ini adalah contoh dari tema khusus ARN.

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

  Amazon Quick Sight menyediakan tema pemula tidak memiliki wilayah dalam tema ARN mereka. Berikut ini adalah contoh dari tema starter ARN.

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

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

Pastikan Anda memiliki informasi berikut yang siap untuk mulai bekerja dengan tema runtime.
+ Tema ARNs tema yang ingin Anda gunakan. Anda dapat memilih tema yang ada, atau Anda dapat membuat yang baru. Untuk mendapatkan daftar semua tema dan tema ARNs di akun Amazon Quick Sight Anda, lakukan panggilan ke operasi [ListThemes](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListThemes.html)API. Untuk informasi tentang tema Amazon Quick Sight yang telah ditetapkan sebelumnya, lihat[Menyetel tema default untuk analisis Amazon Quick dengan Amazon Quick APIs](customizing-quicksight-default-theme.md).
+ Jika Anda menggunakan penyematan pengguna terdaftar, pastikan pengguna memiliki akses ke tema yang ingin Anda gunakan.

  Jika Anda menggunakan penyematan pengguna anonim, berikan daftar tema ARNs ke `AuthorizedResourceArns` parameter `GenerateEmbedUrlForAnonymousUser` API. Pengguna anonim diberikan akses ke tema apa pun yang tercantum dalam `AuthorizedResourceArns` parameter.

## Antarmuka metode SDK
<a name="runtime-theming-sdk-interface"></a>

**Metode setter**

Tabel berikut menjelaskan metode setter berbeda yang dapat digunakan pengembang untuk tema runtime.


| Metode | Deskripsi | 
| --- | --- | 
|  `setTheme(themeArn: string)`  |  Mengganti tema aktif dasbor atau visual dengan tema lain. Jika diterapkan, penggantian tema akan dihapus. Kesalahan dikembalikan jika Anda tidak memiliki akses ke tema atau jika tema tidak ada.  | 
|  `setThemeOverride(themeOverride: ThemeConfiguration)`  |  Menetapkan dinamika `ThemeConfiguration` untuk mengganti tema aktif saat ini. Ini menggantikan penggantian tema yang telah ditetapkan sebelumnya. Nilai apa pun yang tidak diberikan dalam `ThemeConfiguration` yang baru akan default ke nilai dalam tema yang sedang aktif. Kesalahan dikembalikan jika `ThemeConfiguration` yang Anda berikan tidak valid.  | 

## Menginisialisasi konten tertanam dengan tema
<a name="runtime-theming-sdk-initialize"></a>

Untuk menginisialisasi dasbor tertanam atau visual dengan tema non-default, tentukan `themeOptions` objek pada `DashboardContentOptions` atau `VisualContentOptions` parameter, dan atur `themeArn` properti di dalam `themeOptions` ke tema ARN yang diinginkan.

Contoh berikut menginisialisasi dashboard tertanam dengan `MIDNIGHT` tema.

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

## Menginisialisasi konten yang disematkan dengan penggantian tema
<a name="runtime-theming-runtime-initialize-override"></a>

Pengembang dapat menggunakan penggantian tema untuk menentukan tema dasbor atau visual yang disematkan saat runtime. Ini memungkinkan dasbor atau visual untuk mewarisi tema dari aplikasi pihak ketiga tanpa perlu melakukan pra-konfigurasi tema dalam Amazon Quick Sight. Untuk menginisialisasi dasbor atau visual yang disematkan dengan penggantian tema, atur `themeOverride` properti `themeOptions` di dalam `DashboardContentOptions` atau `VisualContentOptions` parameter. Contoh berikut mengesampingkan font tema dasbor dari font default ke. `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);
```

## Menginisialisasi konten yang disematkan dengan tema yang dimuat sebelumnya
<a name="runtime-theming-runtime-initialize-preloaded"></a>

Pengembang dapat mengonfigurasi satu set tema dasbor yang akan dimuat sebelumnya pada inisialisasi. Ini paling bermanfaat untuk beralih cepat di antara tampilan yang berbeda, misalnya mode gelap dan terang. Dasbor atau visual yang disematkan dapat diinisialisasi dengan hingga 5 tema yang dimuat sebelumnya. Untuk menggunakan tema yang dimuat sebelumnya, atur `preloadThemes` properti di salah satu `DashboardContentOptions` atau `VisualContentOptions` dengan array hingga 5`themeArns`. Contoh berikut memuat tema `Midnight` dan `Rainier` starter ke dasbor.

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

# Menggunakan Amazon Quick Sight Embedding SDK untuk mengaktifkan tautan yang dapat dibagikan ke tampilan dasbor yang disematkan
<a name="embedded-view-sharing"></a>

Pengembang Amazon Quick Sight dapat menggunakan Amazon Quick Sight Embedding SDK (versi 2.8.0 dan lebih tinggi) untuk memungkinkan pembaca dasbor tertanam menerima dan mendistribusikan tautan yang dapat dibagikan ke tampilan dasbor yang disematkan. Pengembang dapat menggunakan penyematan dasbor atau konsol untuk menghasilkan tautan yang dapat dibagikan ke halaman aplikasi mereka dengan referensi Amazon Quick Sight yang dienkapsulasi menggunakan Amazon Quick Sight Embedding SDK. Amazon Quick Sight Readers kemudian dapat mengirim tautan yang dapat dibagikan ini ke rekan-rekan mereka. Ketika rekan mereka mengakses tautan bersama, mereka dibawa ke halaman pada aplikasi yang berisi dasbor Amazon Quick Sight yang disematkan. Pengembang juga dapat membuat dan menyimpan tautan tampilan dasbor yang dapat dibagikan yang dapat digunakan sebagai bookmark untuk pembaca anonim Amazon Quick Sight saat menggunakan penyematan anonim.

**Prasyarat**

Sebelum memulai, pastikan Anda menggunakan Amazon Quick Sight Embedding SDK versi 2.8.0 atau yang lebih tinggi

**Topics**
+ [

# Mengaktifkan konfigurasi `SharedView` fitur untuk analitik tertanam Amazon Quick Sight
](embedded-view-sharing-set-up.md)
+ [

# Membuat tampilan bersama dengan Amazon Quick Sight `createSharedView` API
](embedded-view-sharing-sdk-create.md)
+ [

# Mengkonsumsi tampilan Quick Sight Amazon bersama
](embedded-view-sharing-sdk-consume.md)

# Mengaktifkan konfigurasi `SharedView` fitur untuk analitik tertanam Amazon Quick Sight
<a name="embedded-view-sharing-set-up"></a>

Saat Anda membuat instance yang disematkan dengan Amazon Quick Sight API, tetapkan nilai `SharedView` `FeatureConfigurations` payload ke`true`, seperti yang ditunjukkan pada contoh di bawah ini. `SharedView`mengganti `StatePersistence` konfigurasi untuk pengguna terdaftar yang mengakses dasbor tertanam. Jika pengguna dasbor telah `StatePersistence` dinonaktifkan dan `SharedView` diaktifkan, statusnya akan tetap ada.

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

# Membuat tampilan bersama dengan Amazon Quick Sight `createSharedView` API
<a name="embedded-view-sharing-sdk-create"></a>

Setelah memperbarui Embedding SDK ke versi 2.8.0 atau yang lebih tinggi, gunakan `createSharedView` API untuk membuat tampilan bersama baru. Catat `sharedViewId` dan `dashboardId` bahwa operasi kembali. Contoh di bawah ini membuat tampilan bersama baru.

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

`createSharedView`hanya dapat dipanggil ketika pengguna melihat dasbor. Untuk pembuatan tampilan bersama khusus konsol, pastikan pengguna berada di halaman dasbor sebelum Anda mengaktifkan tindakan. `createSharedView` Anda dapat melakukan ini dengan `PAGE_NAVIGATION` acara tersebut, yang ditunjukkan pada contoh di bawah ini.

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

# Mengkonsumsi tampilan Quick Sight Amazon bersama
<a name="embedded-view-sharing-sdk-consume"></a>

Setelah Anda membuat tampilan bersama baru, gunakan Embedding SDK untuk membuat tampilan bersama dapat digunakan untuk pengguna lain. Contoh di bawah ini menyiapkan tampilan bersama yang dapat dikonsumsi untuk dasbor tertanam di Amazon Quick Sight.

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

Tambahkan `sharedViewId` ke URL embed, di bawah` /views/{viewId}`, dan paparkan URL ini ke pengguna Anda. Pengguna dapat menggunakan URL ini untuk menavigasi ke tampilan bersama itu.

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

Berikan a `viewId` ke `contentOptions` untuk membuka pengalaman dengan yang diberikan`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;
};
```

------

# Menyematkan visual dan dasbor Amazon Quick Sight dengan kode sematan 1-klik
<a name="1-click-embedding"></a>

Anda dapat menyematkan visual atau dasbor di aplikasi Anda menggunakan kode embed. Anda mendapatkan kode ini saat membagikan dasbor atau dari menu **visual Sematkan** di Amazon Quick Sight. 

Anda dapat menyematkan visual atau dasbor di aplikasi internal Anda untuk pengguna terdaftar Anda. Atau Anda dapat mengaktifkan berbagi publik di konsol Amazon Quick Sight. Melakukan hal ini memberi siapa pun di internet akses ke visual atau dasbor bersama yang disematkan dalam aplikasi publik, wiki, atau portal.

Berikut ini, Anda dapat menemukan deskripsi tentang cara menyematkan visual dan dasbor menggunakan kode embed visual atau dasbor 1-klik.

**Topics**
+ [

# Menyematkan visual dan dasbor Amazon Quick Sight untuk pengguna terdaftar dengan kode sematan 1-klik
](embedded-analytics-1-click.md)
+ [

# Menyematkan visual dan dasbor Amazon Quick Sight untuk pengguna anonim dengan kode sematan 1 klik
](embedded-analytics-1-click-public.md)

# Menyematkan visual dan dasbor Amazon Quick Sight untuk pengguna terdaftar dengan kode sematan 1-klik
<a name="embedded-analytics-1-click"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 

Anda dapat menyematkan visual atau dasbor di aplikasi internal Anda untuk pengguna terdaftar akun Amazon Quick Sight Anda. Anda melakukannya dengan menggunakan kode sematan yang Anda dapatkan saat membagikan dasbor atau dari menu **visual Sematkan** di Amazon Quick Sight. Anda tidak perlu menjalankan Amazon Quick Sight embedding API untuk menghasilkan kode embed. Anda dapat menyalin kode embed dari Amazon Quick Sight dan menempelkannya di kode HTML aplikasi internal Anda.

Ketika pengguna dan grup (atau semua pengguna di akun Amazon Quick Sight Anda) yang memiliki akses ke dasbor yang ingin Anda sematkan atau yang menyimpan visual yang ingin Anda sematkan mengakses aplikasi internal Anda, mereka diminta untuk masuk ke akun Amazon Quick Sight dengan kredensialnya. Setelah diautentikasi, mereka dapat mengakses visual atau dasbor di halaman internal mereka. Jika Anda mengaktifkan sistem masuk tunggal, pengguna tidak akan diminta untuk masuk lagi.

Berikut ini, Anda dapat menemukan deskripsi tentang cara menyematkan visual atau dasbor untuk pengguna terdaftar menggunakan kode embed visual atau dasbor.

## Sebelum Anda mulai
<a name="embedded-analytics-1-click-prerequisites"></a>

Sebelum Anda memulai, pastikan hal-hal berikut:
+ Pengaturan browser internet Anda berisi salah satu dari berikut ini untuk memungkinkan komunikasi antara popup dan iframe:
  + Dukungan asli untuk Mozilla Broadcast Channel API. Untuk informasi selengkapnya, lihat [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API) di dokumentasi Mozilla.
  + Dukungan IndexedDB.
  + LocalStorage dukungan.
+ Pengaturan “blokir semua cookie” browser internet Anda dimatikan.

## Langkah 1: Berikan akses ke dasbor
<a name="embedded-analystics-1-click-share"></a>

Agar pengguna dapat mengakses dasbor yang disematkan, beri mereka akses untuk melihatnya. Anda dapat memberi pengguna individu dan grup akses ke dasbor, atau Anda dapat memberikan akses kepada semua orang di akun Anda. Izin visual ditentukan di tingkat dasbor. Untuk memberikan akses ke visual yang disematkan, berikan akses ke dasbor yang dimiliki visual tersebut. Untuk informasi selengkapnya, lihat [Memberikan akses ke dasbor](share-a-dashboard.md).

## Langkah 2: Letakkan domain tempat Anda ingin menyematkan visual atau dasbor pada daftar izin Anda
<a name="embedded-analytics-1-click-allow-list"></a>

Untuk menyematkan visual dan dasbor di aplikasi internal Anda, pastikan domain tempat Anda menyematkan terdaftar di akun Amazon Quick Sight Anda. Untuk informasi selengkapnya, lihat [Izinkan daftar domain statis](manage-domains.md#embedding-static).

## Langkah 3: Dapatkan kode embed
<a name="embedded-analytics-1-click-code"></a>

Gunakan prosedur berikut untuk mendapatkan kode embed visual atau dashboard.

**Untuk mendapatkan kode sematan dasbor**

1. Buka dasbor yang diterbitkan di Amazon Quick Sight dan pilih **Bagikan** di kanan atas. Kemudian pilih **Share dashboard**.

1. Di halaman **dasbor Bagikan** yang terbuka, pilih **Salin kode semat** di kiri atas.

   Kode embed disalin ke clipboard Anda dan mirip dengan yang berikut ini. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

**Untuk mendapatkan kode embed visual**

1. Buka dasbor yang diterbitkan di Amazon Quick Sight dan pilih visual yang ingin Anda sematkan. Kemudian buka menu on-visual di kanan atas visual dan pilih **Sematkan** visual.

1. Di panel **visual Sematkan** yang terbuka, pilih **Salin** kode.

   Kode embed disalin ke clipboard Anda dan mirip dengan yang berikut ini. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

## Langkah 4: Tempelkan kode ke halaman HTML aplikasi internal Anda
<a name="embedded-analytics-1-click-html"></a>

Gunakan prosedur berikut untuk menempelkan kode embed ke halaman HTML aplikasi internal Anda

**Untuk menempelkan kode di halaman HTML aplikasi internal Anda**
+ Buka kode HTML untuk halaman mana pun di mana Anda ingin menyematkan dasbor dan menempelkan kode embed.

  Contoh berikut menunjukkan seperti apa tampilannya untuk dasbor tertanam. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

  Contoh berikut menunjukkan seperti apa tampilannya untuk visual yang disematkan. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

Misalnya, katakanlah Anda ingin menyematkan visual atau dasbor Anda di halaman Google Sites internal. Anda dapat membuka halaman di Google Sites dan menempelkan kode embed di widget embed.

Jika Anda ingin menyematkan visual atau dasbor Anda di SharePoint situs Microsoft internal, Anda dapat membuat halaman baru dan kemudian menempelkan kode embed di bagian web Embed.

# Menyematkan visual dan dasbor Amazon Quick Sight untuk pengguna anonim dengan kode sematan 1 klik
<a name="embedded-analytics-1-click-public"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 

Anda dapat menyematkan visual atau dasbor di situs publik menggunakan kode sematan yang Anda dapatkan saat membagikan visual atau dasbor di Amazon Quick Sight. Anda juga dapat mengaktifkan berbagi publik dengan menggunakan konsol Amazon Quick Sight dan secara otomatis memberikan akses ke visual atau dasbor bersama kepada siapa pun di internet. 

Berikut ini, Anda dapat menemukan cara mengaktifkan berbagi publik untuk visual atau dasbor dan menyematkan visual atau dasbor untuk dilihat siapa pun di internet. Dalam kedua kasus, Anda melakukan ini dengan menggunakan kode embed 1-klik.

## Sebelum Anda mulai
<a name="embedded-analytics-1-click-prerequisites"></a>

Sebelum Anda memulai, pastikan hal-hal berikut:
+ Pengaturan browser internet Anda berisi salah satu dari berikut ini untuk memungkinkan komunikasi antara popup dan iframe yang digunakan berbagi:
  + Dukungan asli untuk Mozilla Broadcast Channel API. Untuk informasi selengkapnya, lihat [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API) di dokumentasi Mozilla.
  + Dukungan IndexedDB.
  + LocalStorage dukungan.
+ Pengaturan “blokir semua cookie” browser internet Anda dimatikan.

## Langkah 1: Aktifkan akses publik untuk dasbor
<a name="embedded-analytics-1-click-step-1"></a>

Bagi siapa pun di internet untuk mengakses visual atau dasbor tertanam Anda, pertama-tama aktifkan akses publik untuk dasbor. Izin visual ditentukan di tingkat dasbor. Untuk memberikan akses ke visual yang disematkan, berikan akses ke dasbor yang dimiliki visual tersebut. Untuk informasi selengkapnya, lihat [Memberi siapa pun di internet akses ke dasbor Amazon Quick Sight](share-a-dashboard-grant-access-anyone.md).

## Langkah 2: Letakkan domain tempat Anda ingin menyematkan visual atau dasbor pada daftar izin Anda
<a name="embedded-analytics-1-click-step-2"></a>

Untuk menyematkan visual dan dasbor di aplikasi publik, wiki, atau portal, pastikan bahwa domain tempat Anda menyematkannya ada di daftar izin untuk akun Amazon Quick Sight Anda. 

## Langkah 3: Dapatkan kode embed
<a name="embedded-analytics-1-click-step-3"></a>

Gunakan prosedur berikut untuk mendapatkan kode embed visual atau dasbor.

**Untuk mendapatkan kode sematan dasbor**

1. Buka dasbor yang diterbitkan di Amazon Quick Sight dan pilih **Bagikan** di kanan atas. Kemudian pilih **Share dashboard**.

1. Di halaman **dasbor Bagikan** yang terbuka, pilih **Salin kode semat** di kiri atas.

   Kode embed disalin ke clipboard Anda dan mirip dengan yang berikut ini. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

**Untuk mendapatkan kode embed visual**

1. Buka dasbor yang diterbitkan di Amazon Quick Sight dan pilih visual yang ingin Anda sematkan. Kemudian buka menu on-visual di sudut kanan atas visual dan pilih **Sematkan** visual.

1. Di panel **visual Sematkan** yang terbuka, pilih **Salin** kode.

   Kode embed disalin ke clipboard Anda dan mirip dengan yang berikut ini. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

## Langkah 4: Tempelkan kode embed ke halaman HTML, halaman wiki, atau portal
<a name="embedded-analytics-1-click-step-4"></a>

Gunakan prosedur berikut untuk menempelkan kode embed ke halaman HTML, halaman wiki, atau portal.

**Untuk menempelkan kode embed**
+ Buka kode HTML untuk lokasi di mana Anda ingin menyematkan visual atau dasbor, dan tempelkan kode embed.

  Contoh berikut menunjukkan seperti apa tampilannya untuk dasbor yang disematkan. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

  Contoh berikut menunjukkan seperti apa tampilannya untuk visual yang disematkan. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

Jika aplikasi yang menghadap publik Anda dibangun di Google Sites, buka halaman di Google Sites lalu tempel kode embed menggunakan widget embed.

Pastikan bahwa domain berikut di Amazon Quick Sight ada di daftar izin Anda saat Anda menyematkan di Google Sites:
+ `https://googleusercontent.com`(mengaktifkan subdomain)
+ `https://www.gstatic.com`
+ `https://sites.google.com`

Setelah Anda menyematkan visual atau dasbor di aplikasi Anda, siapa pun yang dapat mengakses aplikasi Anda dapat mengakses visual atau dasbor yang disematkan. Untuk memperbarui dasbor yang dibagikan dengan publik, lihat[Memperbarui dasbor yang dibagikan secara publik](share-a-dashboard-grant-access-anyone-update.md). Untuk menonaktifkan berbagi publik, lihat[Mematikan pengaturan berbagi publik](share-a-dashboard-grant-access-anyone-no-share.md). 

Saat Anda mematikan berbagi publik, tidak ada seorang pun dari internet yang dapat mengakses dasbor atau dasbor yang telah Anda sematkan pada aplikasi publik atau dibagikan dengan tautan. Lain kali seseorang mencoba melihat dasbor seperti itu dari internet, mereka menerima pesan bahwa mereka tidak memiliki akses untuk melihatnya.

# Menyematkan dengan Amazon Quick Sight APIs
<a name="embedded-analytics-api"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Hanya ada beberapa langkah yang terlibat dalam proses penyematan analitik yang sebenarnya menggunakan Amazon Quick Sight APIs. 

Sebelum Anda mulai, pastikan untuk memiliki item berikut di tempat:
+ Siapkan izin IAM yang diperlukan untuk identitas pemanggil yang digunakan oleh aplikasi Anda yang akan menggunakan AWS SDK untuk melakukan panggilan API. Misalnya, berikan izin untuk mengizinkan `quicksight:GenerateEmbedUrlForAnonymousUser` atau `quicksight:GenerateEmbedUrlForRegisteredUser` tindakan.
+ Untuk menyematkan pengguna terdaftar, bagikan aset Amazon Quick Sight dengan mereka sebelumnya. Untuk pengguna autentikasi baru, ketahui cara memberikan akses ke aset. Salah satu cara untuk melakukannya adalah dengan menambahkan semua aset ke folder Amazon Quick Sight. Jika Anda lebih suka menggunakan Amazon Quick Sight API, gunakan operasi `DescribeDashboardPermissions` dan `UpdateDashboardPermissions` API. Untuk informasi selengkapnya, lihat [DescribeDashboardPermissions](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeDashboardPermissions.html)atau [UpdateDashboardPermissions](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateDashboardPermissions.html)di *Referensi API Cepat Amazon*. Jika Anda ingin berbagi dasbor dengan semua pengguna di namespace atau grup, Anda dapat berbagi dasbor dengan `namespace` atau. `group`
+ Jika Anda menyematkan dasbor, pastikan Anda memiliki ID dasbor yang ingin Anda sematkan. ID dasbor adalah kode di URL dasbor. Anda juga bisa mendapatkannya dari URL dasbor.
+ Administrator Amazon Quick Sight harus secara eksplisit mengaktifkan domain tempat Anda berencana untuk menyematkan analitik Amazon Quick Sight Anda. Anda dapat melakukan ini dengan menggunakan **Kelola Amazon Quick Sight**, **Domains dan Embedding** dari menu profil, atau Anda dapat menggunakan `AllowedDomains` parameter panggilan `GenerateEmbedUrlForRegisteredUser` API `GenerateEmbedUrlForAnonymousUser` atau API.

  Opsi ini hanya terlihat oleh administrator Amazon Quick Sight. Anda juga dapat menambahkan subdomain sebagai bagian dari domain. Untuk informasi selengkapnya, lihat [Izinkan daftar domain saat runtime dengan Amazon Quick API](manage-domains.md#embedding-run-time).

  Semua domain dalam daftar izin statis Anda (seperti pengembangan, pementasan, dan produksi) harus diizinkan secara eksplisit, dan mereka harus menggunakan HTTPS. Anda dapat menambahkan hingga 100 domain ke daftar izinkan. Anda dapat menambahkan domain saat runtime dengan operasi Amazon Quick Sight API.

Setelah semua prasyarat selesai, menyematkan Amazon Quick Sight melibatkan langkah-langkah berikut, yang dijelaskan secara lebih rinci nanti: 

1. Untuk otentikasi, gunakan server aplikasi Anda untuk mengautentikasi pengguna. Setelah otentikasi di server Anda, buat URL dasbor yang disematkan menggunakan AWS SDK yang Anda butuhkan.

1. Di portal atau aplikasi web Anda, sematkan Amazon Quick Sight menggunakan URL yang dihasilkan. [Untuk menyederhanakan proses ini, Anda dapat menggunakan Amazon Quick Sight Embedding SDK, tersedia di NPMJS dan. [GitHub](https://github.com/awslabs/amazon-quicksight-embedding-sdk)](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) JavaScript SDK yang disesuaikan ini dirancang untuk membantu Anda mengintegrasikan Amazon Quick Sight secara efisien ke halaman aplikasi Anda, mengatur default, menghubungkan kontrol, mendapatkan panggilan balik, dan menangani kesalahan. 

Anda dapat menggunakan log AWS CloudTrail audit untuk mendapatkan informasi tentang jumlah dasbor yang disematkan, pengguna pengalaman yang disematkan, dan tingkat akses.

**Topics**
+ [

# Menyematkan dasbor Amazon Quick Sight dengan Amazon Quick Sight API
](embedding-dashboards.md)
+ [

# Menyematkan visual Amazon Quick Sight dengan Amazon Quick Sight APIs
](embedding-visuals.md)
+ [

# Menyematkan fungsionalitas penuh konsol Amazon Quick Sight untuk pengguna terdaftar
](embedded-analytics-full-console-for-authenticated-users.md)
+ [

# Menyematkan Amazon Q di Amazon Quick Sight Generative Tanya Jawab
](embedding-gen-bi.md)
+ [

# Menyematkan bilah pencarian Amazon Quick Sight Q (Klasik)
](embedding-quicksight-q.md)
+ [

# Menyematkan analitik menggunakan operasi GetDashboardEmbedURL dan GetSessionEmbedURL API
](embedded-analytics-deprecated.md)

# Menyematkan dasbor Amazon Quick Sight dengan Amazon Quick Sight API
<a name="embedding-dashboards"></a>

Gunakan topik berikut untuk mempelajari tentang menyematkan dasbor dengan Amazon Quick Sight API.

**Topics**
+ [

# Menyematkan dasbor Amazon Quick Sight untuk pengguna terdaftar
](embedded-analytics-dashboards-for-authenticated-users.md)
+ [

# Menyematkan dasbor Amazon Quick Sight untuk pengguna anonim (tidak terdaftar)
](embedded-analytics-dashboards-for-everyone.md)
+ [

# Mengaktifkan ringkasan eksekutif di dasbor tertanam
](embedded-analytics-genbi-executive-summaries-dashboard.md)

# Menyematkan dasbor Amazon Quick Sight untuk pengguna terdaftar
<a name="embedded-analytics-dashboards-for-authenticated-users"></a>

**penting**  
Amazon Quick Sight memiliki operasi API baru untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan operasi `GetSessionEmbedUrl` API `GetDashboardEmbedUrl` dan untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi tidak berisi kemampuan penyematan terbaru. Untuk informasi selengkapnya tentang penyematan menggunakan operasi API lama, lihat [Menyematkan analitik menggunakan operasi GetDashboardEmbedURL dan GetSessionEmbedURL API](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html).


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur dasbor Amazon Quick Sight yang disematkan untuk pengguna terdaftar Amazon Quick Sight.

**Topics**
+ [

## Langkah 1: Siapkan izin
](#embedded-dashboards-for-authenticated-users-step-1)
+ [

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
](#embedded-dashboards-for-authenticated-users-step-2)
+ [

## Langkah 3: Sematkan URL dasbor
](#embedded-dashboards-for-authenticated-users-step-3)

## Langkah 1: Siapkan izin
<a name="embedded-dashboards-for-authenticated-users-step-1"></a>

Di bagian berikut, Anda dapat mengetahui cara mengatur izin untuk aplikasi backend atau server web. Tugas ini membutuhkan akses administratif ke IAM.

Setiap pengguna yang mengakses dasbor mengambil peran yang memberi mereka akses dan izin Amazon Quick Sight ke dasbor. Untuk memungkinkan ini, buat peran IAM di Anda Akun AWS. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya. Peran IAM perlu memberikan izin untuk mengambil penyematan untuk kumpulan pengguna URLs tertentu. Dengan bantuan karakter *wildcard\$1*, Anda dapat memberikan izin untuk menghasilkan URL untuk semua pengguna di namespace tertentu, atau untuk subset pengguna di ruang nama tertentu. Untuk ini, Anda menambahkan`quicksight:GenerateEmbedUrlForRegisteredUser`.

Anda dapat membuat kondisi dalam kebijakan IAM yang membatasi domain yang dapat dicantumkan developer dalam `AllowedDomains` parameter operasi `GenerateEmbedUrlForRegisteredUser` API. `AllowedDomains`Parameter adalah parameter opsional. Ini memberi Anda sebagai pengembang opsi untuk mengganti domain statis yang dikonfigurasi di menu Kelola Penglihatan **Cepat Amazon**. Sebagai gantinya, Anda dapat mencantumkan hingga tiga domain atau subdomain yang dapat mengakses URL yang dihasilkan. URL ini kemudian disematkan di situs web yang Anda buat. Hanya domain yang tercantum dalam parameter yang dapat mengakses visual yang disematkan. Tanpa kondisi ini, Anda dapat membuat daftar domain apa pun di internet dalam `AllowedDomains` parameter. 

Untuk membatasi domain yang dapat digunakan pengembang dengan parameter ini, tambahkan `AllowedEmbeddingDomains` kondisi ke kebijakan IAM Anda. Untuk informasi selengkapnya tentang `AllowedDomains` parameter, lihat [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)di *Referensi API Amazon Quick Sight*.

**Praktik terbaik keamanan untuk operator kondisi IAM**  
Operator kondisi IAM yang tidak dikonfigurasi dengan benar dapat mengizinkan akses tidak sah ke sumber daya Cepat yang disematkan Anda melalui variasi URL. Saat menggunakan kunci `quicksight:AllowedEmbeddingDomains` kondisi dalam kebijakan IAM Anda, gunakan operator kondisi yang mengizinkan domain tertentu atau menolak semua domain yang tidak diizinkan secara khusus. Untuk informasi selengkapnya tentang operator kondisi IAM, lihat [elemen kebijakan IAM JSON: Operator kondisi di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Pengguna IAM.  
Banyak variasi URL yang berbeda dapat menunjuk ke sumber daya yang sama. Misalnya, berikut ini URLs semua menyelesaikan konten yang sama:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Jika kebijakan Anda menggunakan operator yang tidak memperhitungkan variasi URL ini, penyerang dapat melewati batasan Anda dengan memberikan variasi URL yang setara.  
Anda harus memvalidasi bahwa kebijakan IAM Anda menggunakan operator kondisi yang sesuai untuk mencegah kerentanan bypass dan memastikan bahwa hanya domain yang Anda inginkan yang dapat mengakses sumber daya yang disematkan.

Kebijakan contoh berikut memberikan izin ini.

Selain itu, jika Anda membuat pengguna pertama kali yang akan menjadi pembaca Amazon Quick Sight, pastikan untuk menambahkan `quicksight:RegisterUser` izin dalam kebijakan.

Kebijakan contoh berikut memberikan izin untuk mengambil URL penyematan bagi pengguna pertama kali yang akan menjadi pembaca Amazon Quick Sight.

Terakhir, identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna dan menyediakan pengguna di Amazon Quick Sight. Contoh berikut menunjukkan contoh kebijakan kepercayaan. 

------
#### [ 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"
        }
    ]
}
```

------

*Untuk informasi selengkapnya mengenai kebijakan kepercayaan untuk OpenID Connect atau otentikasi SAM, lihat bagian berikut dari Panduan Pengguna IAM:*
+ [Membuat Peran untuk Web Identity atau OpenID Connect Federation (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Membuat Peran untuk Federasi SAM 2.0 (Konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
<a name="embedded-dashboards-for-authenticated-users-step-2"></a>

Di bagian berikut, Anda dapat mengetahui cara mengautentikasi pengguna Anda dan mendapatkan URL dasbor yang dapat disematkan di server aplikasi Anda. Jika Anda berencana untuk menyematkan dasbor untuk tipe identitas IAM atau Amazon Quick Sight, bagikan dasbor dengan pengguna.

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Melakukan langkah-langkah ini memastikan bahwa setiap penampil dasbor disediakan secara unik di Amazon Quick Sight. Ini juga memberlakukan pengaturan per pengguna, seperti keamanan tingkat baris dan default dinamis untuk parameter.

Contoh berikut melakukan otentikasi IAM atas nama pengguna. Kode ini berjalan di server aplikasi Anda.

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

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

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

        private final AmazonQuickSight quickSightClient;

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

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

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

            final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

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

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

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

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

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

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

### Python3
<a name="embedded-dashboards-for-authenticated-users-py"></a>

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

sts = boto3.client('sts')

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

### Node.js
<a name="embedded-dashboards-for-authenticated-users-node"></a>

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

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

**Example**  

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

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

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk membuat URL dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

### AWS CLI
<a name="embedded-dashboards-for-authenticated-users-cli"></a>

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini saat Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini saat Anda menggunakan SALL untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GenerateEmbedUrlForRegisteredUser`. Jika Anda mengambil just-in-time pendekatan untuk menambahkan pengguna saat mereka pertama kali membuka dasbor, peran tersebut juga memerlukan izin yang diaktifkan. `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`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Jika Anda menggunakan mesin Microsoft Windows, gunakan `set` sebagai gantinya`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_dashboard_role/john.doe@example.com`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna. Ini juga mencegah pembatasan akses pengguna. *Throttling* adalah fitur keamanan yang mencegah pengguna yang sama mengakses Amazon Quick Sight dari beberapa lokasi. 

ID sesi peran juga menjadi nama pengguna di Amazon Quick Sight. Anda dapat menggunakan pola ini untuk menyediakan pengguna Anda di Amazon Quick Sight sebelumnya, atau untuk menyediakannya saat pertama kali mereka mengakses dasbor. 

Contoh berikut menunjukkan perintah CLI yang dapat Anda gunakan untuk menyediakan pengguna. Untuk informasi selengkapnya tentang [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html), [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html), dan operasi Amazon Quick Sight API lainnya, lihat [Referensi API Amazon Quick Sight](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
```

Jika pengguna Anda diautentikasi melalui Microsoft AD, Anda tidak perlu menggunakannya `RegisterUser` untuk mengaturnya. Sebagai gantinya, mereka harus berlangganan secara otomatis saat pertama kali mengakses Amazon Quick Sight. Untuk pengguna Microsoft AD, Anda dapat menggunakan `DescribeUser` untuk mendapatkan ARN pengguna.

Saat pertama kali pengguna mengakses Amazon Quick Sight, Anda juga dapat menambahkan pengguna ini ke grup tempat dasbor dibagikan. Contoh berikut menunjukkan perintah CLI untuk menambahkan pengguna ke grup.

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

Anda sekarang memiliki pengguna aplikasi Anda yang juga pengguna Amazon Quick Sight, dan yang memiliki akses ke dasbor. 

Terakhir, untuk mendapatkan URL yang ditandatangani untuk dasbor, panggil `generate-embed-url-for-registered-user` dari server aplikasi. Ini mengembalikan URL dasbor yang dapat disematkan. Contoh berikut menunjukkan cara membuat URL untuk dasbor tertanam menggunakan panggilan sisi server untuk pengguna yang diautentikasi melalui AWS Managed Microsoft AD atau sistem masuk tunggal (IAM Identity Center).

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

Untuk informasi lebih lanjut tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri.

## Langkah 3: Sematkan URL dasbor
<a name="embedded-dashboards-for-authenticated-users-step-3"></a>

Di bagian berikut, Anda dapat mengetahui bagaimana Anda dapat menggunakan [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) untuk menyematkan URL dasbor dari langkah 3 di situs web atau halaman aplikasi Anda. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan dasbor pada halaman HTML.
+ Masukkan parameter ke dasbor.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Panggil operasi `GenerateEmbedUrlForRegisteredUser` API untuk menghasilkan URL yang dapat disematkan di aplikasi. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku hingga 10 jam. Operasi API menyediakan URL dengan sebuah `auth_code` yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
    }
```

Sematkan dasbor ini di halaman web Anda dengan menggunakan [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam dasbor dan menerima panggilan balik dalam hal penyelesaian dan kesalahan pemuatan halaman. 

Domain yang akan menjadi tuan rumah dasbor tertanam harus ada di *daftar izinkan*, daftar domain yang disetujui untuk langganan Anda Quick . Persyaratan ini melindungi data Anda dengan menjaga domain yang tidak disetujui dari hosting dasbor tertanam. Untuk informasi selengkapnya tentang menambahkan domain untuk dasbor yang disematkan, lihat [Mengizinkan domain daftar saat runtime dengan Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html) API.

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini dibuat di server aplikasi Anda.

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

```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

</html>
```

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

```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat dasbor yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [Amazon Quick Sight Embedding SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

# Menyematkan dasbor Amazon Quick Sight untuk pengguna anonim (tidak terdaftar)
<a name="embedded-analytics-dashboards-for-everyone"></a>

**penting**  
Amazon Quick Sight memiliki operasi API baru untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan operasi `GetSessionEmbedUrl` API `GetDashboardEmbedUrl` dan untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi tidak berisi kemampuan penyematan terbaru. Untuk informasi selengkapnya tentang penyematan menggunakan operasi API lama, lihat [Menyematkan analitik menggunakan operasi GetDashboardEmbedURL dan GetSessionEmbedURL API](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html).


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur dasbor Amazon Quick Sight yang disematkan untuk pengguna anonim (tidak terdaftar).

**Topics**
+ [

## Langkah 1: Siapkan izin
](#embedded-analytics-dashboards-with-anonymous-users-step-1)
+ [

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
](#embedded-analytics-dashboards-with-anonymous-users-step-2)
+ [

## Langkah 3: Sematkan URL dasbor
](#embedded-analytics-dashboards-with-anonymous-users-step-3)

## Langkah 1: Siapkan izin
<a name="embedded-analytics-dashboards-with-anonymous-users-step-1"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat mengetahui cara mengatur izin untuk aplikasi backend atau server web. Tugas ini membutuhkan akses administratif ke IAM.

Setiap pengguna yang mengakses dasbor mengambil peran yang memberi mereka akses dan izin Amazon Quick Sight ke dasbor. Untuk memungkinkan ini, buat peran IAM di Anda Akun AWS. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya.

Anda dapat membuat kondisi dalam kebijakan IAM yang membatasi domain yang dapat dicantumkan developer dalam `AllowedDomains` parameter operasi `GenerateEmbedUrlForAnonymousUser` API. `AllowedDomains`Parameter adalah parameter opsional. Ini memberi Anda sebagai pengembang opsi untuk mengganti domain statis yang dikonfigurasi di menu Kelola Penglihatan **Cepat Amazon**. Sebagai gantinya, Anda dapat mencantumkan hingga tiga domain atau subdomain yang dapat mengakses URL yang dihasilkan. URL ini kemudian disematkan di situs web yang Anda buat. Hanya domain yang tercantum dalam parameter yang dapat mengakses dasbor yang disematkan. Tanpa kondisi ini, Anda dapat membuat daftar domain apa pun di internet dalam `AllowedDomains` parameter. 

Untuk membatasi domain yang dapat digunakan pengembang dengan parameter ini, tambahkan `AllowedEmbeddingDomains` kondisi ke kebijakan IAM Anda. Untuk informasi selengkapnya tentang `AllowedDomains` parameter, lihat [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)di *Referensi API Amazon Quick Sight*.

**Praktik terbaik keamanan untuk operator kondisi IAM**  
Operator kondisi IAM yang tidak dikonfigurasi dengan benar dapat mengizinkan akses tidak sah ke sumber daya Cepat yang disematkan Anda melalui variasi URL. Saat menggunakan kunci `quicksight:AllowedEmbeddingDomains` kondisi dalam kebijakan IAM Anda, gunakan operator kondisi yang mengizinkan domain tertentu atau menolak semua domain yang tidak diizinkan secara khusus. Untuk informasi selengkapnya tentang operator kondisi IAM, lihat [elemen kebijakan IAM JSON: Operator kondisi di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Pengguna IAM.  
Banyak variasi URL yang berbeda dapat menunjuk ke sumber daya yang sama. Misalnya, berikut ini URLs semua menyelesaikan konten yang sama:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Jika kebijakan Anda menggunakan operator yang tidak memperhitungkan variasi URL ini, penyerang dapat melewati batasan Anda dengan memberikan variasi URL yang setara.  
Anda harus memvalidasi bahwa kebijakan IAM Anda menggunakan operator kondisi yang sesuai untuk mencegah kerentanan bypass dan memastikan bahwa hanya domain yang Anda inginkan yang dapat mengakses sumber daya yang disematkan.

Kebijakan contoh berikut memberikan izin ini untuk digunakan. `GenerateEmbedUrlForAnonymousUser` Agar pendekatan ini berhasil, Anda juga memerlukan paket sesi, atau harga kapasitas sesi, untuk Anda Akun AWS. Jika tidak, ketika pengguna mencoba mengakses dasbor, kesalahan `UnsupportedPricingPlanException` dikembalikan. 

Identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna untuk membuka dasbor. Contoh berikut menunjukkan contoh kebijakan kepercayaan.

------
#### [ 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"
    }
]
}
```

------

Untuk informasi selengkapnya mengenai kebijakan kepercayaan, lihat [Kredensil keamanan sementara di IAM di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) Pengguna *IAM*.

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
<a name="embedded-analytics-dashboards-with-anonymous-users-step-2"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan cara mengautentikasi atas nama pengunjung anonim dan mendapatkan URL dasbor yang dapat disematkan di server aplikasi Anda. 

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Contoh berikut melakukan otentikasi IAM atas nama pengguna. Ini melewati pengenal sebagai ID sesi peran unik. Kode ini berjalan di server aplikasi Anda.

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

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


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

        private final AmazonQuickSight quickSightClient;

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

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

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

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

            GenerateEmbedUrlForAnonymousUserResult dashboardEmbedUrl = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

            return dashboardEmbedUrl.getEmbedUrl();
        }

    }
```

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

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

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

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

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

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

### Python3
<a name="embedded-analytics-dashboards-with-anonymous-users-py"></a>

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

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

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

### Node.js
<a name="embedded-analytics-dashboards-with-anonymous-users-node"></a>

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

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

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

**Example**  

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

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

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk membuat URL dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

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

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini saat Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini saat Anda menggunakan Security Assertion Markup Language (SALL) untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GenerateEmbedUrlForAnonymousUser`. 

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

`assume-role`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Jika Anda menggunakan mesin Microsoft Windows, gunakan `set` sebagai gantinya`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_dashboard_role/QuickSightEmbeddingAnonymousPolicy`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna yang berkunjung. Itu juga membuat setiap sesi terpisah dan berbeda. Jika Anda menggunakan array server web, misalnya untuk load balancing, dan sesi terhubung kembali ke server yang berbeda, sesi baru dimulai.

Untuk mendapatkan URL yang ditandatangani untuk dasbor, panggil `generate-embed-url-for-anynymous-user` dari server aplikasi. Ini mengembalikan URL dasbor yang dapat disematkan. Contoh berikut menunjukkan cara membuat URL untuk dasbor tertanam menggunakan panggilan sisi server untuk pengguna yang melakukan kunjungan anonim ke portal web atau aplikasi Anda.

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

Untuk informasi lebih lanjut tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri. 

## Langkah 3: Sematkan URL dasbor
<a name="embedded-analytics-dashboards-with-anonymous-users-step-3"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat mengetahui bagaimana Anda dapat menggunakan [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) untuk menyematkan URL dasbor dari langkah 2 di situs web atau halaman aplikasi Anda. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan dasbor pada halaman HTML.
+ Masukkan parameter ke dasbor.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Panggil operasi `GenerateEmbedUrlForAnynymousUser` API untuk menghasilkan URL yang dapat disematkan di aplikasi. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku selama 10 jam. Operasi API menyediakan URL dengan sebuah `auth_code` yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
        }
```

Sematkan dasbor ini di halaman web Anda dengan menggunakan [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam dasbor dan menerima panggilan balik dalam hal penyelesaian dan kesalahan pemuatan halaman. 

Domain yang akan menjadi tuan rumah dasbor tertanam harus ada di *daftar izinkan*, daftar domain yang disetujui untuk langganan Anda Quick . Persyaratan ini melindungi data Anda dengan menjaga domain yang tidak disetujui dari hosting dasbor tertanam. Untuk informasi selengkapnya tentang menambahkan domain untuk dasbor yang disematkan, lihat [Mengizinkan domain daftar saat runtime dengan Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html) API.

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini berada di server aplikasi Anda.

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

```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

</html>
```

### SDK 1.0
<a name="embedded-analytics-dashboards-with-anonymous-users-sdkv1"></a>

```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat dasbor yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [Amazon Quick Sight Embedding SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi Amazon Quick Sight Embedding SDK terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

# Mengaktifkan ringkasan eksekutif di dasbor tertanam
<a name="embedded-analytics-genbi-executive-summaries-dashboard"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Anda dapat mengaktifkan ringkasan eksekutif di dasbor yang disematkan. Saat diaktifkan, pengguna terdaftar dapat membuat ringkasan eksekutif yang memberikan ringkasan semua wawasan yang dihasilkan Amazon Quick Sight untuk dasbor. Ringkasan eksekutif memudahkan pembaca untuk menemukan wawasan dan informasi utama tentang dasbor. Untuk informasi selengkapnya tentang cara pengguna membuat ringkasan eksekutif dasbor, lihat [Menghasilkan ringkasan eksekutif dasbor Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/use-executive-summaries.html).

**catatan**  
Ringkasan eksekutif hanya tersedia di dasbor tertanam untuk pengguna terdaftar, dan tidak dapat diaktifkan di dasbor tertanam untuk pengguna anonim atau tidak terdaftar.

**Untuk mengaktifkan ringkasan eksekutif di dasbor tertanam untuk pengguna terdaftar**
+ Ikuti langkah-langkah di [Menyematkan dasbor Amazon Quick Sight bagi pengguna terdaftar](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-dashboards-for-authenticated-users.html) untuk menyematkan dasbor dengan perubahan berikut:

  1. Saat membuat URL di Langkah 2, atur `ExecutiveSummary` parameter `Enabled: true` di [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)atau [GenerateEmbedUrlForRegisteredUserWithIdentity](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUserWithIdentity.html)seperti yang ditunjukkan pada contoh berikut:

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

  1. Saat menyematkan URL dasbor dengan Amazon Quick Sight Embedding SDK di Langkah 3, atur `executiveSummary: true``contentOptions`, seperti yang ditunjukkan pada contoh berikut:

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

# Menyematkan visual Amazon Quick Sight dengan Amazon Quick Sight APIs
<a name="embedding-visuals"></a>

Anda dapat menyematkan visual individual yang merupakan bagian dari dasbor yang dipublikasikan di aplikasi Anda dengan Amazon Quick Sight API.

**Topics**
+ [

# Menyematkan visual Amazon Quick Sight untuk pengguna terdaftar
](embedded-analytics-visuals-for-authenticated-users.md)
+ [

# Menyematkan visual Amazon Quick Sight untuk pengguna anonim (tidak terdaftar)
](embedded-analytics-visuals-for-everyone.md)

# Menyematkan visual Amazon Quick Sight untuk pengguna terdaftar
<a name="embedded-analytics-visuals-for-authenticated-users"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur visual Amazon Quick Sight yang disematkan untuk pengguna terdaftar Amazon Quick Sight.

**Topics**
+ [

## Langkah 1: Siapkan izin
](#embedded-visuals-for-authenticated-users-step-1)
+ [

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
](#embedded-visuals-for-authenticated-users-step-2)
+ [

## Langkah 3: Sematkan URL visual
](#embedded-visuals-for-authenticated-users-step-3)

## Langkah 1: Siapkan izin
<a name="embedded-visuals-for-authenticated-users-step-1"></a>

Di bagian berikut, Anda dapat mengetahui cara mengatur izin untuk aplikasi backend atau server web. Tugas ini membutuhkan akses administratif ke IAM.

Setiap pengguna yang mengakses visual mengambil peran yang memberi mereka akses Amazon Quick Sight dan izin ke visual. Untuk memungkinkan ini, buat peran IAM di Anda Akun AWS. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya. Peran IAM perlu memberikan izin untuk mengambil penyematan untuk kumpulan pengguna URLs tertentu. Dengan bantuan karakter *wildcard\$1*, Anda dapat memberikan izin untuk menghasilkan URL untuk semua pengguna di namespace tertentu, atau untuk subset pengguna di ruang nama tertentu. Untuk ini, Anda menambahkan`quicksight:GenerateEmbedUrlForRegisteredUser`.

Anda dapat membuat kondisi dalam kebijakan IAM yang membatasi domain yang dapat dicantumkan developer dalam `AllowedDomains` parameter operasi `GenerateEmbedUrlForAnonymousUser` API. `AllowedDomains`Parameter adalah parameter opsional. Ini memberi Anda sebagai pengembang opsi untuk mengganti domain statis yang dikonfigurasi di menu Kelola Penglihatan **Cepat Amazon**. Sebagai gantinya, Anda dapat mencantumkan hingga tiga domain atau subdomain yang dapat mengakses URL yang dihasilkan. URL ini kemudian disematkan di situs web yang Anda buat. Hanya domain yang tercantum dalam parameter yang dapat mengakses dasbor yang disematkan. Tanpa kondisi ini, Anda dapat membuat daftar domain apa pun di internet dalam `AllowedDomains` parameter. 

Untuk membatasi domain yang dapat digunakan pengembang dengan parameter ini, tambahkan `AllowedEmbeddingDomains` kondisi ke kebijakan IAM Anda. Untuk informasi selengkapnya tentang `AllowedDomains` parameter, lihat [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)di *Referensi API Amazon Quick Sight*.

**Praktik terbaik keamanan untuk operator kondisi IAM**  
Operator kondisi IAM yang tidak dikonfigurasi dengan benar dapat mengizinkan akses tidak sah ke sumber daya Cepat yang disematkan Anda melalui variasi URL. Saat menggunakan kunci `quicksight:AllowedEmbeddingDomains` kondisi dalam kebijakan IAM Anda, gunakan operator kondisi yang mengizinkan domain tertentu atau menolak semua domain yang tidak diizinkan secara khusus. Untuk informasi selengkapnya tentang operator kondisi IAM, lihat [elemen kebijakan IAM JSON: Operator kondisi di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Pengguna IAM.  
Banyak variasi URL yang berbeda dapat menunjuk ke sumber daya yang sama. Misalnya, berikut ini URLs semua menyelesaikan konten yang sama:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Jika kebijakan Anda menggunakan operator yang tidak memperhitungkan variasi URL ini, penyerang dapat melewati batasan Anda dengan memberikan variasi URL yang setara.  
Anda harus memvalidasi bahwa kebijakan IAM Anda menggunakan operator kondisi yang sesuai untuk mencegah kerentanan bypass dan memastikan bahwa hanya domain yang Anda inginkan yang dapat mengakses sumber daya yang disematkan.

Kebijakan contoh berikut memberikan izin ini.

Selain itu, jika Anda membuat pengguna pertama kali yang akan menjadi pembaca Amazon Quick Sight, pastikan untuk menambahkan `quicksight:RegisterUser` izin dalam kebijakan.

Kebijakan contoh berikut memberikan izin untuk mengambil URL penyematan bagi pengguna pertama kali yang akan menjadi pembaca Amazon Quick Sight.

Terakhir, identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna dan menyediakan pengguna di Amazon Quick Sight. Contoh berikut menunjukkan contoh kebijakan kepercayaan.

------
#### [ 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"
        }
    ]
}
```

------

*Untuk informasi selengkapnya mengenai kebijakan kepercayaan untuk OpenID Connect atau otentikasi SAM, lihat bagian berikut dari Panduan Pengguna IAM:*
+ [Membuat Peran untuk Web Identity atau OpenID Connect Federation (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Membuat Peran untuk Federasi SAM 2.0 (Konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
<a name="embedded-visuals-for-authenticated-users-step-2"></a>

Di bagian berikut, Anda dapat mengetahui cara mengautentikasi pengguna Amazon Quick Sight Anda dan mendapatkan URL visual yang dapat disematkan di server aplikasi Anda. Jika Anda berencana untuk menyematkan visual untuk tipe identitas IAM atau Amazon Quick Sight, bagikan visual dengan pengguna Amazon Quick Sight.

Saat pengguna Amazon Quick Sight mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna Amazon Quick Sight. Kemudian menambahkan pengguna ke Amazon Quick Sight, jika pengguna Amazon Quick Sight itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Melakukan langkah-langkah yang dijelaskan memastikan bahwa setiap penampil visual disediakan secara unik di Amazon Quick Sight. Ini juga memberlakukan pengaturan per pengguna, seperti keamanan tingkat baris dan default dinamis untuk parameter.

Contoh berikut melakukan otentikasi IAM atas nama pengguna Amazon Quick Sight. Kode ini berjalan di server aplikasi Anda.

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

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

import java.util.List;

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

    private final AmazonQuickSight quickSightClient;

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

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

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

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

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

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

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

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

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

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

### Python3
<a name="embedded-visuals-for-authenticated-users-py"></a>

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

sts = boto3.client('sts')

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

### Node.js
<a name="embedded-visuals-for-authenticated-users-node"></a>

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

quicksightClient.generateEmbedUrlForRegisteredUser({
    'AwsAccountId': '111122223333',
    'ExperienceConfiguration': { 
        'DashboardVisual': {
            'InitialDashboardVisualId': {
                'DashboardId': 'dashboard_id',
                'SheetId': 'sheet_id',
                'VisualId': 'visual_id'
            }
        }
    },
    'UserArn': 'REGISTERED_USER_ARN',
    'AllowedDomains': allowedDomains,
    'SessionLifetimeInMinutes': 100
}, function(err, data) {
    console.log('Errors: ');
    console.log(err);
    console.log('Response: ');
    console.log(data);
});
```

**Example**  

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

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

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk membuat URL dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

                RegisteredUserDashboardVisualEmbeddingConfiguration registeredUserDashboardVisualEmbeddingConfiguration
                    = new RegisteredUserDashboardVisualEmbeddingConfiguration
                    {
                        InitialDashboardVisualId = dashboardVisual                        
                    };               
                    
                RegisteredUserEmbeddingExperienceConfiguration registeredUserEmbeddingExperienceConfiguration
                    = new RegisteredUserEmbeddingExperienceConfiguration
                    {
                        DashboardVisual = registeredUserDashboardVisualEmbeddingConfiguration
                    };
                    
                Console.WriteLine(
                    quicksightClient.GenerateEmbedUrlForRegisteredUserAsync(new GenerateEmbedUrlForRegisteredUserRequest
                    {
                        AwsAccountId = "111122223333",
                        ExperienceConfiguration = registeredUserEmbeddingExperienceConfiguration,
                        UserArn = "REGISTERED_USER_ARN",
                        AllowedDomains = allowedDomains,
                        SessionLifetimeInMinutes = 100
                    }).Result.EmbedUrl
                );
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
        }
    }
}
```

### AWS CLI
<a name="embedded-visuals-for-authenticated-users-cli"></a>

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini saat Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini saat Anda menggunakan SALL untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GenerateEmbedUrlForRegisteredUser`. Jika Anda mengambil just-in-time pendekatan untuk menambahkan pengguna saat mereka pertama kali membuka dasbor, peran tersebut juga memerlukan izin yang diaktifkan. `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`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Jika Anda menggunakan mesin Microsoft Windows, gunakan `set` sebagai gantinya`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_visual_role/john.doe@example.com`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna. Ini juga mencegah pembatasan akses pengguna. *Throttling* adalah fitur keamanan yang mencegah pengguna yang sama mengakses Amazon Quick Sight dari beberapa lokasi. 

ID sesi peran juga menjadi nama pengguna di Amazon Quick Sight. Anda dapat menggunakan pola ini untuk menyediakan pengguna Anda di Amazon Quick Sight sebelumnya, atau untuk menyediakannya saat pertama kali mereka mengakses dasbor. 

Contoh berikut menunjukkan perintah CLI yang dapat Anda gunakan untuk menyediakan pengguna. Untuk informasi selengkapnya tentang [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html), [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html), dan operasi Amazon Quick Sight API lainnya, lihat [Referensi API Amazon Quick Sight](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
```

Jika pengguna diautentikasi melalui Microsoft AD, Anda tidak perlu menggunakannya `RegisterUser` untuk mengaturnya. Sebagai gantinya, mereka harus berlangganan secara otomatis saat pertama kali mengakses Amazon Quick Sight. Untuk pengguna Microsoft AD, Anda dapat menggunakan `DescribeUser` untuk mendapatkan ARN pengguna.

Saat pertama kali pengguna mengakses Amazon Quick Sight, Anda juga dapat menambahkan pengguna ini ke grup tempat visual dibagikan. Contoh berikut menunjukkan perintah CLI untuk menambahkan pengguna ke grup.

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

Anda sekarang memiliki pengguna aplikasi Anda yang juga pengguna Amazon Quick Sight, dan yang memiliki akses ke visual. 

Terakhir, untuk mendapatkan URL yang ditandatangani untuk visual, panggil `generate-embed-url-for-registered-user` dari server aplikasi. Ini mengembalikan URL visual yang dapat disematkan. Contoh berikut menunjukkan cara menghasilkan URL untuk visual yang disematkan menggunakan panggilan sisi server untuk pengguna yang diautentikasi melalui AWS Managed Microsoft AD atau single sign-on (IAM Identity Center).

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

Untuk informasi lebih lanjut tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri.

## Langkah 3: Sematkan URL visual
<a name="embedded-visuals-for-authenticated-users-step-3"></a>

Di bagian berikut, Anda dapat mengetahui bagaimana Anda dapat menggunakan [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) untuk menyematkan URL visual dari langkah 3 di situs web atau halaman aplikasi Anda. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan visual pada halaman HTML.
+ Masukkan parameter ke dalam visual.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Panggil operasi `GenerateEmbedUrlForRegisteredUser` API untuk menghasilkan URL yang dapat disematkan di aplikasi. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku hingga 10 jam. Operasi API menyediakan URL dengan sebuah `auth_code` yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`generate-embed-url-for-registered-user`. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

Sematkan visual ini di halaman web Anda dengan menggunakan [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam visual dan menerima callback dalam hal penyelesaian dan kesalahan pemuatan halaman. 

Domain yang akan meng-host visual dan dasbor yang disematkan harus ada di *daftar izinkan, daftar* domain yang disetujui untuk langganan Anda. Quick Persyaratan ini melindungi data Anda dengan menjaga domain yang tidak disetujui dari hosting visual dan dasbor yang disematkan. Untuk informasi selengkapnya tentang menambahkan domain untuk visual dan dasbor yang disematkan, lihat [Mengizinkan domain daftar saat runtime dengan Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html) API.

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini dibuat di server aplikasi Anda.

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

```
<!DOCTYPE html>
<html>

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

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

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

                const contentOptions = {
                    parameters: [
                        {
                            Name: 'country',
                            Values: ['United States'],
                        },
                        {
                            Name: 'states',
                            Values: [
                                'California',
                                'Washington'
                            ]
                        }
                    ],
                    locale: "en-US",
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'CONTENT_LOADED': {
                                console.log("All visuals are loaded. The title of the document:", messageEvent.message.title);
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Error occurred while rendering the experience. Error code:", messageEvent.message.errorCode);
                                break;
                            }
                            case 'PARAMETERS_CHANGED': {
                                console.log("Parameters changed. Changed parameters:", messageEvent.message.changedParameters);
                                break;
                            }
                            case 'SIZE_CHANGED': {
                                console.log("Size changed. New dimensions:", messageEvent.message);
                                break;
                            }
                        }
                    },
                };
                const embeddedVisualExperience = await embeddingContext.embedVisual(frameOptions, contentOptions);

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

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

</html>
```

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

```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat visual yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [Amazon Quick Sight Embedding SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

# Menyematkan visual Amazon Quick Sight untuk pengguna anonim (tidak terdaftar)
<a name="embedded-analytics-visuals-for-everyone"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur visual Amazon Quick Sight yang disematkan untuk pengguna anonim (tidak terdaftar).

**Topics**
+ [

## Langkah 1: Siapkan izin
](#embedded-analytics-visuals-with-anonymous-users-step-1)
+ [

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
](#embedded-analytics-visuals-with-anonymous-users-step-2)
+ [

## Langkah 3: Sematkan URL visual
](#embedded-analytics-visuals-with-anonymous-users-step-3)

## Langkah 1: Siapkan izin
<a name="embedded-analytics-visuals-with-anonymous-users-step-1"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat mengetahui cara mengatur izin untuk aplikasi backend atau server web. Tugas ini membutuhkan akses administratif ke IAM.

Setiap pengguna yang mengakses visual mengambil peran yang memberi mereka akses Amazon Quick Sight dan izin ke visual. Untuk memungkinkan ini, buat peran IAM di Anda Akun AWS. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya.

Anda dapat membuat kondisi dalam kebijakan IAM yang membatasi domain yang dapat dicantumkan developer dalam `AllowedDomains` parameter operasi `GenerateEmbedUrlForAnonymousUser` API. `AllowedDomains`Parameter adalah parameter opsional. Ini memberi Anda sebagai pengembang opsi untuk mengganti domain statis yang dikonfigurasi di menu Kelola Penglihatan **Cepat Amazon**. Sebagai gantinya, Anda dapat mencantumkan hingga tiga domain atau subdomain yang dapat mengakses URL yang dihasilkan. URL ini kemudian disematkan di situs web yang Anda buat. Hanya domain yang tercantum dalam parameter yang dapat mengakses dasbor yang disematkan. Tanpa kondisi ini, Anda dapat membuat daftar domain apa pun di internet dalam `AllowedDomains` parameter. 

Untuk membatasi domain yang dapat digunakan pengembang dengan parameter ini, tambahkan `AllowedEmbeddingDomains` kondisi ke kebijakan IAM Anda. Untuk informasi selengkapnya tentang `AllowedDomains` parameter, lihat [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)di *Referensi API Amazon Quick Sight*.

**Praktik terbaik keamanan untuk operator kondisi IAM**  
Operator kondisi IAM yang tidak dikonfigurasi dengan benar dapat mengizinkan akses tidak sah ke sumber daya Cepat yang disematkan Anda melalui variasi URL. Saat menggunakan kunci `quicksight:AllowedEmbeddingDomains` kondisi dalam kebijakan IAM Anda, gunakan operator kondisi yang mengizinkan domain tertentu atau menolak semua domain yang tidak diizinkan secara khusus. Untuk informasi selengkapnya tentang operator kondisi IAM, lihat [elemen kebijakan IAM JSON: Operator kondisi di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Pengguna IAM.  
Banyak variasi URL yang berbeda dapat menunjuk ke sumber daya yang sama. Misalnya, berikut ini URLs semua menyelesaikan konten yang sama:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Jika kebijakan Anda menggunakan operator yang tidak memperhitungkan variasi URL ini, penyerang dapat melewati batasan Anda dengan memberikan variasi URL yang setara.  
Anda harus memvalidasi bahwa kebijakan IAM Anda menggunakan operator kondisi yang sesuai untuk mencegah kerentanan bypass dan memastikan bahwa hanya domain yang Anda inginkan yang dapat mengakses sumber daya yang disematkan.

Identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna untuk membuka visual. Contoh berikut menunjukkan contoh kebijakan kepercayaan.

------
#### [ 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"
        }
    ]
}
```

------

Untuk informasi selengkapnya mengenai kebijakan kepercayaan, lihat [Kredensil keamanan sementara di IAM di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) Pengguna *IAM*.

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
<a name="embedded-analytics-visuals-with-anonymous-users-step-2"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan cara mengautentikasi atas nama pengunjung anonim dan mendapatkan URL visual yang dapat disematkan di server aplikasi Anda.

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Contoh berikut melakukan otentikasi IAM atas nama pengguna. Ini melewati pengenal sebagai ID sesi peran unik. Kode ini berjalan di server aplikasi Anda.

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

```
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.quicksight.AmazonQuickSight;
import com.amazonaws.services.quicksight.AmazonQuickSightClientBuilder;
import com.amazonaws.services.quicksight.model.AnonymousUserDashboardVisualEmbeddingConfiguration;
import com.amazonaws.services.quicksight.model.AnonymousUserEmbeddingExperienceConfiguration;
import com.amazonaws.services.quicksight.model.DashboardVisualId;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForAnonymousUserRequest;
import com.amazonaws.services.quicksight.model.GenerateEmbedUrlForAnonymousUserResult;
import com.amazonaws.services.quicksight.model.SessionTag;

import java.util.List;

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

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

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

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

        final GenerateEmbedUrlForAnonymousUserResult generateEmbedUrlForAnonymousUserResult
            = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

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

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

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

function generateEmbedUrlForAnonymousUser(
    accountId, // Your AWS account ID
    dashboardId, // Dashboard ID to which the constructed url points
    sheetId, // Sheet ID to which the constructed url points
    visualId, // Visual ID to which the constructed url points
    quicksightNamespace, // valid namespace where you want to do embedding
    authorizedResourceArns, // dashboard arn list of dashboard visuals to embed
    allowedDomains, // runtime allowed domains for embedding
    sessionTags, // session tags used for row-level security
    generateEmbedUrlForAnonymousUserCallback, // success callback method
    errorCallback // error callback method
    ) {
    const experienceConfiguration = {
        "DashboardVisual": {
            "InitialDashboardVisualId": {
                "DashboardId": dashboardId,
                "SheetId": sheetId,
                "VisualId": visualId
            }
        }
    };
    
    const generateEmbedUrlForAnonymousUserParams = {
        "AwsAccountId": accountId,
        "Namespace": quicksightNamespace,
        // authorizedResourceArns should contain ARN of dashboard used below in ExperienceConfiguration
        "AuthorizedResourceArns": authorizedResourceArns,
        "AllowedDomains": allowedDomains,
        "ExperienceConfiguration": experienceConfiguration,
        "SessionTags": sessionTags,
        "SessionLifetimeInMinutes": 600
    };

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

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

### Python3
<a name="embedded-analytics-visuals-with-anonymous-users-py"></a>

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

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

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

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

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

quicksightClient.generateEmbedUrlForAnonymousUser({
    'AwsAccountId': '111122223333',
    'Namespace' : 'default',
    // authorizedResourceArns should contain ARN of dashboard used below in ExperienceConfiguration
    'AuthorizedResourceArns': authorizedResourceArns,
    'ExperienceConfiguration': { 
        'DashboardVisual': {
            'InitialDashboardVisualId': {
                'DashboardId': 'dashboard_id',
                'SheetId': 'sheet_id',
                'VisualId': 'visual_id'
            }
        }
    },
    'AllowedDomains': allowedDomains,    
    'SessionTags': sessionTags,
    'SessionLifetimeInMinutes': 600

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

**Example**  

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

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

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk membuat URL dasbor tertanam. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

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

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

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini saat Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini saat Anda menggunakan Security Assertion Markup Language (SALL) untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GenerateEmbedUrlForAnonymousUser`. 

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

`assume-role`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Jika Anda menggunakan mesin Microsoft Windows, gunakan `set` sebagai gantinya`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_visual_role/QuickSightEmbeddingAnonymousPolicy`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna yang berkunjung. Itu juga membuat setiap sesi terpisah dan berbeda. Jika Anda menggunakan array server web, misalnya untuk load balancing, dan sesi terhubung kembali ke server yang berbeda, sesi baru dimulai.

Untuk mendapatkan URL yang ditandatangani untuk visual, panggil `generate-embed-url-for-anynymous-user` dari server aplikasi. Ini mengembalikan URL visual yang dapat disematkan. Contoh berikut menunjukkan cara membuat URL untuk visual yang disematkan menggunakan panggilan sisi server untuk pengguna yang melakukan kunjungan anonim ke portal web atau aplikasi Anda.

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

Untuk informasi lebih lanjut tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri. 

## Langkah 3: Sematkan URL visual
<a name="embedded-analytics-visuals-with-anonymous-users-step-3"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat mengetahui bagaimana Anda dapat menggunakan [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) untuk menyematkan URL visual dari langkah 2 di situs web atau halaman aplikasi Anda. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan visual pada halaman HTML.
+ Masukkan parameter ke dalam visual.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Panggil operasi `GenerateEmbedUrlForAnonymousUser` API untuk menghasilkan URL yang dapat disematkan di aplikasi. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku selama 10 jam. Operasi API menyediakan URL dengan kode otorisasi (auth) yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`generate-embed-url-for-anonymous-user`. `quicksightdomain`Dalam contoh ini adalah URL yang Anda gunakan untuk mengakses akun Amazon Quick Sight Anda.

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

Sematkan visual ini di halaman web Anda dengan menggunakan Amazon Quick Sight [Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam visual dan menerima callback dalam hal penyelesaian beban visual dan kesalahan. 

Domain yang akan menjadi tuan rumah disematkan visual harus ada di *daftar izinkan*, daftar domain yang disetujui untuk Quick langganan Anda. Persyaratan ini melindungi data Anda dengan menjaga domain yang tidak disetujui dari hosting visual dan dasbor yang disematkan. Untuk informasi selengkapnya tentang menambahkan domain untuk visual dan dasbor yang disematkan, lihat [Mengizinkan domain daftar saat runtime dengan Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html) API.

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini berada di server aplikasi Anda.

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

```
<!DOCTYPE html>
<html>

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

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

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

                const contentOptions = {
                    parameters: [
                        {
                            Name: 'country',
                            Values: ['United States'],
                        },
                        {
                            Name: 'states',
                            Values: [
                                'California',
                                'Washington'
                            ]
                        }
                    ],
                    locale: "en-US",
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'CONTENT_LOADED': {
                                console.log("All visuals are loaded. The title of the document:", messageEvent.message.title);
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Error occurred while rendering the experience. Error code:", messageEvent.message.errorCode);
                                break;
                            }
                            case 'PARAMETERS_CHANGED': {
                                console.log("Parameters changed. Changed parameters:", messageEvent.message.changedParameters);
                                break;
                            }
                            case 'SIZE_CHANGED': {
                                console.log("Size changed. New dimensions:", messageEvent.message);
                                break;
                            }
                        }
                    },
                };
                const embeddedVisualExperience = await embeddingContext.embedVisual(frameOptions, contentOptions);

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

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

</html>
```

### SDK 1.0
<a name="embedded-analytics-visuals-with-anonymous-users-sdkv1"></a>

```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat visual yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [Amazon Quick Sight Embedding SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK QuickSight penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

# Menyematkan fungsionalitas penuh konsol Amazon Quick Sight untuk pengguna terdaftar
<a name="embedded-analytics-full-console-for-authenticated-users"></a>

**penting**  
Amazon Quick Sight memiliki operasi API baru untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan operasi `GetSessionEmbedUrl` API `GetDashboardEmbedUrl` dan untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi tidak berisi kemampuan penyematan terbaru. Untuk informasi selengkapnya tentang penyematan menggunakan operasi API lama, lihat [Menyematkan analitik menggunakan operasi GetDashboardEmbedURL dan GetSessionEmbedURL API](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html).


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Dengan edisi Enterprise, selain menyediakan dasbor hanya-baca, Anda juga dapat memberikan pengalaman konsol Amazon Quick Sight di portal penulisan bermerek khusus. Dengan menggunakan pendekatan ini, Anda memungkinkan pengguna untuk membuat sumber data, kumpulan data, dan analisis. Di antarmuka yang sama, mereka dapat membuat, menerbitkan, dan melihat dasbor. Jika Anda ingin membatasi beberapa izin tersebut, Anda juga dapat melakukannya.

Pengguna yang mengakses Amazon Quick Sight melalui konsol yang disematkan harus menjadi bagian dari kohort keamanan penulis atau admin. Pembaca tidak memiliki akses yang cukup untuk menggunakan konsol Amazon Quick Sight untuk penulisan, terlepas dari apakah itu disematkan atau bagian dari Konsol Manajemen AWS. Namun, penulis dan admin masih dapat mengakses dasbor yang disematkan. Jika Anda ingin membatasi izin untuk beberapa fitur authoring, Anda dapat menambahkan profil izin khusus kepada pengguna dengan operasi API. [UpdateUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateUser.html) Gunakan operasi [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html)API untuk menambahkan pengguna baru dengan profil izin khusus yang dilampirkan. Untuk informasi selengkapnya, lihat bagian berikut:
+ Untuk informasi tentang membuat peran kustom dengan menentukan izin konsol kustom, lihat [Menyesuaikan Akses ke Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/customizing-permissions-to-the-quicksight-console.html) Console.
+ [Untuk informasi tentang menggunakan ruang nama untuk mengisolasi pengguna multitenansi, grup, dan aset Amazon Quick Sight, lihat Ruang Nama Amazon Quick Sight.](https://docs.aws.amazon.com/quicksight/latest/APIReference/controlling-access.html#namespaces.html)
+ Untuk informasi tentang menambahkan merek Anda sendiri ke konsol Quick Sight Amazon yang disematkan, lihat [Menggunakan Tema di Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/themes-in-quicksight.html) dan [Operasi API QuickSight Tema](https://docs.aws.amazon.com/quicksight/latest/APIReference/qs-assets.html#themes). 

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur dasbor Amazon Quick Sight yang disematkan untuk pengguna terdaftar.

**Topics**
+ [

## Langkah 1: Siapkan izin
](#embedded-analytics-full-console-for-authenticated-users-step-1)
+ [

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
](#embedded-analytics-full-console-for-authenticated-users-step-2)
+ [

## Langkah 3: Sematkan URL sesi konsol
](#embedded-analytics-full-console-for-authenticated-users-step-3)
+ [

# Mengaktifkan fitur Generative BI di konsol tertanam untuk pengguna terdaftar
](embedding-consoles-genbi.md)

## Langkah 1: Siapkan izin
<a name="embedded-analytics-full-console-for-authenticated-users-step-1"></a>

Di bagian berikut, Anda dapat mengetahui cara mengatur izin untuk aplikasi backend atau server web. Tugas ini membutuhkan akses administratif ke IAM.

Setiap pengguna yang mengakses Amazon Quick Sight mengambil peran yang memberi mereka akses Amazon Quick Sight dan izin ke sesi konsol. Untuk memungkinkan hal ini, buat peran IAM di AWS akun Anda. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya. Tambahkan `quicksight:RegisterUser` izin untuk memastikan bahwa pembaca dapat mengakses Amazon Quick Sight dengan cara hanya-baca, dan tidak memiliki akses ke data atau kemampuan pembuatan lainnya. Peran IAM juga perlu memberikan izin untuk mengambil sesi konsol. URLs Untuk ini, Anda menambahkan`quicksight:GenerateEmbedUrlForRegisteredUser`.

Anda dapat membuat kondisi dalam kebijakan IAM yang membatasi domain yang dapat dicantumkan developer dalam `AllowedDomains` parameter operasi `GenerateEmbedUrlForAnonymousUser` API. `AllowedDomains`Parameter adalah parameter opsional. Ini memberi Anda sebagai pengembang opsi untuk mengganti domain statis yang dikonfigurasi di menu Kelola Penglihatan **Cepat Amazon**. Sebagai gantinya, Anda dapat mencantumkan hingga tiga domain atau subdomain yang dapat mengakses URL yang dihasilkan. URL ini kemudian disematkan di situs web yang Anda buat. Hanya domain yang tercantum dalam parameter yang dapat mengakses dasbor yang disematkan. Tanpa kondisi ini, Anda dapat membuat daftar domain apa pun di internet dalam `AllowedDomains` parameter. 

**Praktik terbaik keamanan untuk operator kondisi IAM**  
Operator kondisi IAM yang tidak dikonfigurasi dengan benar dapat mengizinkan akses tidak sah ke sumber daya Cepat yang disematkan Anda melalui variasi URL. Saat menggunakan kunci `quicksight:AllowedEmbeddingDomains` kondisi dalam kebijakan IAM Anda, gunakan operator kondisi yang mengizinkan domain tertentu atau menolak semua domain yang tidak diizinkan secara khusus. Untuk informasi selengkapnya tentang operator kondisi IAM, lihat [elemen kebijakan IAM JSON: Operator kondisi di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Pengguna IAM.  
Banyak variasi URL yang berbeda dapat menunjuk ke sumber daya yang sama. Misalnya, berikut ini URLs semua menyelesaikan konten yang sama:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Jika kebijakan Anda menggunakan operator yang tidak memperhitungkan variasi URL ini, penyerang dapat melewati batasan Anda dengan memberikan variasi URL yang setara.  
Anda harus memvalidasi bahwa kebijakan IAM Anda menggunakan operator kondisi yang sesuai untuk mencegah kerentanan bypass dan memastikan bahwa hanya domain yang Anda inginkan yang dapat mengakses sumber daya yang disematkan.

Kebijakan contoh berikut memberikan izin ini. 

Kebijakan contoh berikut memberikan izin untuk mengambil URL sesi konsol. Anda dapat menggunakan kebijakan tanpa `quicksight:RegisterUser` jika Anda membuat pengguna sebelum mereka mengakses sesi yang disematkan.

Terakhir, identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna dan menyediakan pengguna di Amazon Quick Sight. Contoh berikut menunjukkan contoh kebijakan kepercayaan. 

------
#### [ 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"
        }
    ]
}
```

------

*Untuk informasi selengkapnya mengenai kebijakan kepercayaan untuk OpenID Connect atau otentikasi SAM, lihat bagian berikut dari Panduan Pengguna IAM:*
+ [Membuat Peran untuk Web Identity atau OpenID Connect Federation (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Membuat Peran untuk Federasi SAM 2.0 (Konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
<a name="embedded-analytics-full-console-for-authenticated-users-step-2"></a>

Di bagian berikut, Anda dapat mengetahui cara mengautentikasi pengguna Anda dan mendapatkan URL sesi konsol yang dapat disematkan di server aplikasi Anda. 

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Melakukan langkah-langkah yang dijelaskan memastikan bahwa setiap penampil sesi konsol disediakan secara unik di Amazon Quick Sight. Ini juga memberlakukan pengaturan per pengguna, seperti keamanan tingkat baris dan default dinamis untuk parameter.

Contoh berikut melakukan otentikasi IAM atas nama pengguna. Kode ini berjalan di server aplikasi Anda.

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

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

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

    private final AmazonQuickSight quickSightClient;

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

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

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

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

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

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

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

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

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

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

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

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

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

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

### Node.js
<a name="embedded-analytics-full-console-for-authenticated-users-node"></a>

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk membuat URL untuk sesi konsol yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan sesi konsol. 

**Example**  

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

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

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

**Example**  

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

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

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk membuat URL sesi konsol yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan konsol. 

**Example**  

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

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

### AWS CLI
<a name="embedded-analytics-full-console-for-authenticated-users-cli"></a>

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini saat Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini saat Anda menggunakan SAFL untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GenerateEmbedUrlForRegisteredUser`. Jika Anda mengambil just-in-time pendekatan untuk menambahkan pengguna saat mereka pertama kali membuka Amazon Quick Sight, peran tersebut juga memerlukan izin yang diaktifkan. `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`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Jika Anda menggunakan mesin Microsoft Windows, gunakan `set` sebagai gantinya`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_console_session_role/john.doe@example.com`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna. Ini juga mencegah pembatasan akses pengguna. Throttling adalah fitur keamanan yang mencegah pengguna yang sama mengakses Amazon Quick Sight dari beberapa lokasi. 

ID sesi peran juga menjadi nama pengguna di Amazon Quick Sight. Anda dapat menggunakan pola ini untuk menyediakan pengguna Anda di Amazon Quick Sight sebelumnya, atau untuk menyediakannya saat pertama kali mereka mengakses sesi konsol. 

Contoh berikut menunjukkan perintah CLI yang dapat Anda gunakan untuk menyediakan pengguna. Untuk informasi selengkapnya tentang [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html), [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html), dan operasi Amazon Quick Sight API lainnya, lihat [Referensi API Amazon Quick Sight](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
```

Jika pengguna diautentikasi melalui Microsoft AD, Anda tidak perlu menggunakannya `RegisterUser` untuk mengaturnya. Sebagai gantinya, mereka harus berlangganan secara otomatis saat pertama kali mengakses Amazon Quick Sight. Untuk pengguna Microsoft AD, Anda dapat menggunakan `DescribeUser` untuk mendapatkan ARN pengguna.

Pertama kali pengguna mengakses Amazon Quick Sight, Anda juga dapat menambahkan pengguna ini ke grup yang sesuai. Contoh berikut menunjukkan perintah CLI untuk menambahkan pengguna ke grup.

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

Anda sekarang memiliki pengguna aplikasi Anda yang juga pengguna Amazon Quick Sight, dan yang memiliki akses ke sesi konsol Amazon Quick Sight. 

Terakhir, untuk mendapatkan URL yang ditandatangani untuk sesi konsol, panggil `generate-embed-url-for-registered-user` dari server aplikasi. Ini mengembalikan URL sesi konsol yang dapat disematkan. Contoh berikut menunjukkan cara membuat URL untuk sesi konsol tertanam menggunakan panggilan sisi server untuk pengguna yang diautentikasi melalui AWS Managed Microsoft AD atau sistem masuk tunggal (IAM Identity Center).

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

Untuk informasi lebih lanjut tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri. 

## Langkah 3: Sematkan URL sesi konsol
<a name="embedded-analytics-full-console-for-authenticated-users-step-3"></a>

Di bagian berikut, Anda dapat mengetahui bagaimana Anda dapat menggunakan [Amazon Quick Sight Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) untuk menyematkan URL sesi konsol dari langkah 3 di situs web atau halaman aplikasi Anda. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan sesi konsol pada halaman HTML.
+ Masukkan parameter ke sesi konsol.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Panggil operasi `GenerateEmbedUrlForRegisteredUser` API untuk menghasilkan URL yang dapat disematkan di aplikasi. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku hingga 10 jam. Operasi API menyediakan URL dengan sebuah `auth_code` yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
}
```

Sematkan sesi konsol ini di halaman web Anda dengan menggunakan Amazon Quick Sight [Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam sesi konsol dan menerima callback dalam hal penyelesaian dan kesalahan pemuatan halaman. 

Domain yang akan menjadi tuan rumah dasbor tertanam harus ada di *daftar izinkan*, daftar domain yang disetujui untuk langganan Anda Quick . Persyaratan ini melindungi data Anda dengan menjaga domain yang tidak disetujui dari hosting dasbor tertanam. Untuk informasi selengkapnya tentang menambahkan domain untuk konsol yang disematkan, lihat [Mengizinkan domain daftar saat runtime dengan Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html) API.

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini dibuat di server aplikasi Anda.

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

```
<!DOCTYPE html>
<html>

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

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

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

                const contentOptions = {
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when the embedded experience fails loading.");
                                break;
                            }
                        }
                    }
                };
                const embeddedConsoleExperience = await embeddingContext.embedConsole(frameOptions, contentOptions);
            };
        </script>
    </head>

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

</html>
```

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

```
<!DOCTYPE html>
<html>

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

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

            function embedSession() {
                var containerDiv = document.getElementById("embeddingContainer");
                var options = {
                    // replace this dummy url with the one generated via embedding API
                    url: "https://us-east-1.quicksight.aws.amazon.com/sn/dashboards/dashboardId?isauthcode=true&identityprovider=quicksight&code=authcode", // replace this dummy url with the one generated via embedding API
                    container: containerDiv,
                    parameters: {
                        country: "United States"
                    },
                    scrolling: "no",
                    height: "700px",
                    width: "1000px",
                    locale: "en-US",
                    footerPaddingEnabled: true,
                    defaultEmbeddingVisualType: "TABLE", // this option only applies to QuickSight console embedding and is not used for dashboard embedding
                };
                session = QuickSightEmbedding.embedSession(options);
                session.on("error", onError);
            }

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

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

</html>
```

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat sesi konsol yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [Amazon Quick Sight Embedding SDK](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

# Mengaktifkan fitur Generative BI di konsol tertanam untuk pengguna terdaftar
<a name="embedding-consoles-genbi"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Anda dapat mengaktifkan fitur Generative BI berikut di konsol tertanam Anda:
+ Ringkasan eksekutif: Saat diaktifkan, pengguna Author Pro dan Reader Pro terdaftar dapat menghasilkan ringkasan eksekutif yang memberikan ringkasan semua wawasan yang dihasilkan Amazon Quick Sight agar dasbor dapat dengan mudah menemukan wawasan utama.
+ Authoring: Saat diaktifkan, pengguna Author Pro dapat menggunakan Generative BI untuk membangun bidang terhitung dan membangun serta menyempurnakan visual.
+ T&J: Saat diaktifkan, pengguna Author Pro dan Reader Pro dapat menggunakan Tanya Jawab yang didukung AI untuk menyarankan dan menjawab pertanyaan terkait data mereka.
+ Cerita data: Saat diaktifkan, pengguna Author Pro dan Reader Pro dapat memberikan detail untuk menghasilkan draf pertama cerita data mereka dengan cepat.

**Untuk mengaktifkan fitur Generative BI di konsol tertanam untuk pengguna terdaftar**
+ Ikuti langkah-langkah dalam [Menyematkan fungsionalitas penuh konsol Amazon Quick Sight bagi pengguna terdaftar](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-full-console-for-authenticated-users.html) untuk menyematkan konsol dengan perubahan berikut:

  1. Saat membuat URL di Langkah 2, atur `Enabled: true` `FeatureConfigurations` parameter untuk setiap fitur yang ingin Anda aktifkan di [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)atau [GenerateEmbedUrlForRegisteredUserWithIdentity](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUserWithIdentity.html) APIs, seperti yang ditunjukkan pada contoh berikut. Jika tidak ada konfigurasi yang disediakan, fitur dinonaktifkan secara default.

     ```
     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. Saat menyematkan URL konsol dengan Amazon Quick Sight Embedding SDK di Langkah 3, tetapkan nilai dalam contoh berikut sesuai keinginan. Jika tidak ada konfigurasi yang disediakan, fitur dinonaktifkan secara default.
**catatan**  
Tidak ada opsi SDK untuk mengaktifkan cerita data. Jika cerita data diaktifkan dengan API seperti yang ditunjukkan pada langkah sebelumnya, mereka akan tersedia untuk pengguna terdaftar.

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

# Menyematkan Amazon Q di Amazon Quick Sight Generative Tanya Jawab
<a name="embedding-gen-bi"></a>


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur pengalaman Tanya Jawab Generatif tertanam yang menggunakan kemampuan NLQ yang ditingkatkan yang didukung oleh. LLMs Pengalaman Tanya Jawab Generatif adalah pengganti yang direkomendasikan untuk Q Search Bar yang disematkan dan memberikan pengalaman BI yang diperbarui bagi pengguna.

**Topics**
+ [

## Menyematkan Amazon Q di Amazon Quick Sight Generative Q&A experience untuk pengguna terdaftar
](#embedded-analytics-gen-bi-authenticated-users)
+ [

## Menyematkan Amazon Q dalam pengalaman Tanya Jawab Generatif Cepat untuk pengguna anonim (tidak terdaftar)
](#embedded-analytics-gen-bi-anonymous-users)

## Menyematkan Amazon Q di Amazon Quick Sight Generative Q&A experience untuk pengguna terdaftar
<a name="embedded-analytics-gen-bi-authenticated-users"></a>

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara menyiapkan pengalaman Tanya Jawab Generatif yang disematkan untuk pengguna terdaftar Amazon Quick Sight.

**Topics**
+ [

### Langkah 1: Siapkan izin
](#embedded-analytics-gen-bi-authenticated-users-step-1)
+ [

### Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
](#embedded-analytics-gen-bi-authenticated-users-step-2)
+ [

### Langkah 3: Sematkan URL pengalaman Tanya Jawab Generatif
](#embedded-analytics-gen-bi-authenticated-users-step-3)
+ [

### Fungsionalitas pengalaman Tanya Jawab Generatif tertanam opsional
](#embedded-analytics-gen-bi-authenticated-users-step-4)

### Langkah 1: Siapkan izin
<a name="embedded-analytics-gen-bi-authenticated-users-step-1"></a>

Di bagian berikut, Anda dapat menemukan cara mengatur izin untuk aplikasi backend atau server web Anda untuk menyematkan pengalaman Tanya Jawab Generatif. Tugas ini membutuhkan akses administratif ke AWS Identity and Access Management (IAM).

Setiap pengguna yang mengakses pengalaman Tanya Jawab Generatif mengambil peran yang memberi mereka akses dan izin Amazon Quick Sight. Untuk memungkinkan ini, buat peran IAM di Anda Akun AWS. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya. Peran IAM perlu memberikan izin untuk mengambil penyematan untuk kumpulan pengguna URLs tertentu. 

Dengan bantuan karakter *wildcard\$1*, Anda dapat memberikan izin untuk menghasilkan URL untuk semua pengguna di namespace tertentu. Atau Anda dapat memberikan izin untuk menghasilkan URL untuk subset pengguna di ruang nama tertentu. Untuk ini, Anda menambahkan`quicksight:GenerateEmbedUrlForRegisteredUser`.

Anda dapat membuat kondisi dalam kebijakan IAM yang membatasi domain yang dapat dicantumkan developer dalam `AllowedDomains` parameter operasi `GenerateEmbedUrlForRegisteredUser` API. `AllowedDomains`Parameter adalah parameter opsional. Ini memberi pengembang opsi untuk mengganti domain statis yang dikonfigurasi di menu Kelola **Amazon Quick Sight** dan sebagai gantinya mencantumkan hingga tiga domain atau subdomain yang dapat mengakses URL yang dihasilkan. URL ini kemudian disematkan di situs web pengembang. Hanya domain yang tercantum dalam parameter yang dapat mengakses pengalaman Tanya Jawab Generatif yang disematkan. Tanpa kondisi ini, pengembang dapat mencantumkan domain apa pun di internet dalam `AllowedDomains` parameter. 

Untuk membatasi domain yang dapat digunakan pengembang dengan parameter ini, tambahkan `AllowedEmbeddingDomains` kondisi ke kebijakan IAM Anda. Untuk informasi selengkapnya tentang `AllowedDomains` parameter, lihat [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)di *Referensi API Amazon Quick Sight*.

**Praktik terbaik keamanan untuk operator kondisi IAM**  
Operator kondisi IAM yang tidak dikonfigurasi dengan benar dapat mengizinkan akses tidak sah ke sumber daya Cepat yang disematkan Anda melalui variasi URL. Saat menggunakan kunci `quicksight:AllowedEmbeddingDomains` kondisi dalam kebijakan IAM Anda, gunakan operator kondisi yang mengizinkan domain tertentu atau menolak semua domain yang tidak diizinkan secara khusus. Untuk informasi selengkapnya tentang operator kondisi IAM, lihat [elemen kebijakan IAM JSON: Operator kondisi di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Pengguna IAM.  
Banyak variasi URL yang berbeda dapat menunjuk ke sumber daya yang sama. Misalnya, berikut ini URLs semua menyelesaikan konten yang sama:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Jika kebijakan Anda menggunakan operator yang tidak memperhitungkan variasi URL ini, penyerang dapat melewati batasan Anda dengan memberikan variasi URL yang setara.  
Anda harus memvalidasi bahwa kebijakan IAM Anda menggunakan operator kondisi yang sesuai untuk mencegah kerentanan bypass dan memastikan bahwa hanya domain yang Anda inginkan yang dapat mengakses sumber daya yang disematkan.

Kebijakan contoh berikut memberikan izin ini.

Selain itu, jika Anda membuat pengguna pertama kali yang akan menjadi pembaca Amazon Quick Sight, pastikan untuk menambahkan `quicksight:RegisterUser` izin dalam kebijakan.

Kebijakan contoh berikut memberikan izin untuk mengambil URL penyematan bagi pengguna pertama kali yang akan menjadi pembaca Amazon Quick Sight.

Terakhir, identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna dan menyediakan pengguna di Amazon Quick Sight. 

Contoh berikut menunjukkan contoh kebijakan kepercayaan.

------
#### [ 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"
            }
        ]
    }
```

------

*Untuk informasi selengkapnya mengenai kebijakan kepercayaan untuk otentikasi OpenID Connect atau Security Assertion Markup Language (SAM), lihat bagian berikut dari Panduan Pengguna IAM:*
+ [Membuat peran untuk identitas web atau federasi OpenID Connect (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Membuat peran untuk federasi SAFL 2.0 (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

### Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
<a name="embedded-analytics-gen-bi-authenticated-users-step-2"></a>

Di bagian berikut, Anda dapat menemukan cara mengautentikasi pengguna Anda dan mendapatkan URL topik Q yang dapat disematkan di server aplikasi Anda. Jika Anda berencana untuk menyematkan pengalaman Tanya Jawab Generatif untuk tipe identitas IAM atau Amazon Quick Sight, bagikan topik Q dengan pengguna.

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian aplikasi menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Melakukan langkah-langkah yang dijelaskan memastikan bahwa setiap pemirsa topik Q disediakan secara unik di Amazon Quick Sight. Ini juga memberlakukan pengaturan per pengguna, seperti keamanan tingkat baris dan default dinamis untuk parameter. Keamanan tingkat baris berbasis tag dapat digunakan untuk penyematan pengguna anonim dari bilah Q.

Contoh berikut melakukan otentikasi IAM atas nama pengguna. Kode ini berjalan di server aplikasi Anda.

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

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

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

    private final AmazonQuickSight quickSightClient;

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

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

    public String getQuicksightEmbedUrl(
            final String accountId, // AWS Account ID
            final String topicId, // Topic ID to embed
            final List<String> allowedDomains, // Runtime allowed domain for embedding
            final String userArn // Registered user arn to use for embedding. Refer to Get Embed Url section in developer portal to find how to get user arn for a QuickSight user.
            ) throws Exception {

        final RegisteredUserEmbeddingExperienceConfiguration experienceConfiguration = new RegisteredUserEmbeddingExperienceConfiguration()
                .withGenerativeQnA(new RegisteredUserGenerativeQnAEmbeddingConfiguration().withInitialTopicId(topicId));
        final GenerateEmbedUrlForRegisteredUserRequest generateEmbedUrlForRegisteredUserRequest = new GenerateEmbedUrlForRegisteredUserRequest();
        generateEmbedUrlForRegisteredUserRequest.setAwsAccountId(accountId);
        generateEmbedUrlForRegisteredUserRequest.setUserArn(userArn);
        generateEmbedUrlForRegisteredUserRequest.setAllowedDomains(allowedDomains);
        generateEmbedUrlForRegisteredUserRequest.setExperienceConfiguration(experienceConfiguration);

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

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

**catatan**  
Pembuatan URL embed APIs tidak dapat dipanggil dari browser secara langsung. Lihat contoh Node.JS sebagai gantinya.

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

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

sts = boto3.client('sts')

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

#### Node.js
<a name="embedded-analytics-gen-bi-authenticated-users-node"></a>

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

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

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

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk bilah pencarian Q yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan bilah pencarian Q. 

**Example**  

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

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

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

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini ketika Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini ketika Anda menggunakan SALL untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GenerateEmbedUrlForRegisteredUser`. Jika Anda mengambil just-in-time pendekatan untuk menambahkan pengguna saat mereka menggunakan topik di bilah pencarian Q, peran tersebut juga memerlukan izin yang diaktifkan. `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`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Untuk mesin Microsoft Windows, gunakan `set` sebagai pengganti`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_q_search_bar_role/john.doe@example.com`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna. Ini juga mencegah pembatasan akses pengguna. *Throttling* adalah fitur keamanan yang mencegah pengguna yang sama mengakses Amazon Quick Sight dari beberapa lokasi. 

ID sesi peran juga menjadi nama pengguna di Amazon Quick Sight. Anda dapat menggunakan pola ini untuk menyediakan pengguna Anda di Amazon Quick Sight sebelumnya, atau untuk memberi mereka saat pertama kali mereka mengakses pengalaman Tanya Jawab Generatif. 

Contoh berikut menunjukkan perintah CLI yang dapat Anda gunakan untuk menyediakan pengguna. Untuk informasi selengkapnya tentang [RegisterUser[DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html)](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html),, dan operasi Amazon Quick Sight API lainnya, lihat [referensi 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
```

Jika pengguna diautentikasi melalui Microsoft AD, Anda tidak perlu menggunakannya `RegisterUser` untuk mengaturnya. Sebagai gantinya, mereka harus berlangganan secara otomatis saat pertama kali mengakses Amazon Quick Sight. Untuk pengguna Microsoft AD, Anda dapat menggunakan `DescribeUser` untuk mendapatkan pengguna Amazon Resource Name (ARN).

Saat pertama kali pengguna mengakses Amazon Quick Sight, Anda juga dapat menambahkan pengguna ini ke grup tempat dasbor dibagikan. Contoh berikut menunjukkan perintah CLI untuk menambahkan pengguna ke grup.

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

Anda sekarang memiliki pengguna aplikasi Anda yang juga pengguna Amazon Quick Sight, dan yang memiliki akses ke dasbor. 

Terakhir, untuk mendapatkan URL yang ditandatangani untuk dasbor, panggil `generate-embed-url-for-registered-user` dari server aplikasi. Ini mengembalikan URL dasbor yang dapat disematkan. Contoh berikut menunjukkan cara membuat URL untuk dasbor tertanam menggunakan panggilan sisi server untuk pengguna yang diautentikasi melalui AWS Managed Microsoft AD atau sistem masuk tunggal (IAM Identity Center).

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

Untuk informasi lebih lanjut tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri.

### Langkah 3: Sematkan URL pengalaman Tanya Jawab Generatif
<a name="embedded-analytics-gen-bi-authenticated-users-step-3"></a>

Di bagian berikut, Anda dapat menemukan cara menyematkan URL pengalaman Tanya Jawab Generatif di situs web atau halaman aplikasi Anda. Anda melakukan ini dengan [Amazon Quick Sight embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) ()JavaScript. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan pengalaman Tanya Jawab Generatif pada halaman HTML.
+ Sesuaikan tata letak dan tampilan pengalaman yang disematkan agar sesuai dengan kebutuhan aplikasi Anda.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Untuk membuat URL yang dapat disematkan di aplikasi, panggil operasi `GenerateEmbedUrlForRegisteredUser` API. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku hingga 10 jam. Operasi API menyediakan URL dengan `auth_code` nilai yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
}
```

Sematkan pengalaman Tanya Jawab Generatif di halaman web Anda dengan menggunakan [SDK penyematan Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. 

Pastikan domain untuk meng-host pengalaman Tanya Jawab Generatif yang disematkan ada di daftar izin, *daftar* domain yang disetujui untuk langganan Amazon Quick Sight Anda. Persyaratan ini melindungi data Anda dengan menjaga domain yang tidak disetujui dari hosting dasbor tertanam. Untuk informasi selengkapnya tentang menambahkan domain untuk pengalaman Tanya Jawab Generatif yang disematkan, lihat. [Mengelola domain](manage-domains.md)

Anda dapat menggunakan Amazon Quick Sight Embedding SDK untuk menyesuaikan tata letak dan tampilan pengalaman Tanya Jawab Generatif yang disematkan agar sesuai dengan aplikasi Anda. Gunakan `panelType` properti untuk mengonfigurasi status pendaratan pengalaman Tanya Jawab Generatif saat dirender dalam aplikasi Anda. Atur `panelType` properti `'FULL'` untuk membuat panel pengalaman Tanya Jawab Generatif lengkap. Panel ini menyerupai pengalaman yang dimiliki pengguna Amazon Quick Sight di konsol Amazon Quick Sight. Tinggi bingkai panel tidak berubah berdasarkan interaksi pengguna dan menghormati nilai yang Anda tetapkan di `frameOptions.height` properti. Gambar di bawah ini menunjukkan panel pengalaman Tanya Jawab Generatif yang dirender saat Anda menyetel nilainya. `panelType` `'FULL'`

Setel `panelType` properti `'SEARCH_BAR'` untuk membuat pengalaman Tanya Jawab Generatif sebagai bilah pencarian. Bilah pencarian ini menyerupai cara Q Search Bar ditampilkan ketika disematkan ke dalam aplikasi. Bilah pencarian Tanya Jawab Generatif meluas ke panel yang lebih besar yang menampilkan opsi pemilihan topik, daftar saran pertanyaan, panel jawaban, atau papan pin.

Tinggi minimum default dari bilah pencarian Tanya Jawab Generatif dirender saat aset yang disematkan dimuat. Disarankan agar Anda menetapkan `frameOptions.height` nilai `"38px"` untuk mengoptimalkan pengalaman bilah pencarian. Gunakan `focusedHeight` properti untuk mengatur ukuran optimal dropdown pemilihan topik dan daftar saran pertanyaan. Gunakan `expandedHeight` properti untuk mengatur ukuran optimal panel jawaban dan pinboard. Jika Anda memilih `'SEARCH_BAR'` opsi, disarankan agar Anda menata wadah induk dengan posisi; mutlak untuk menghindari pergeseran konten yang tidak diinginkan dalam aplikasi Anda. Gambar di bawah ini menunjukkan bilah pencarian pengalaman Tanya Jawab Generatif yang dirender saat Anda menetapkan nilainya. `panelType` `'SEARCH_BAR'`

Setelah mengonfigurasi `panelType` properti, gunakan SDK penyematan Amazon Quick Sight untuk menyesuaikan properti berikut dari pengalaman Tanya Jawab Generatif.
+ Judul panel Tanya Jawab Generatif (Berlaku hanya untuk opsi). `panelType: FULL` 
+ Teks placeholder bilah pencarian.
+ Apakah pemilihan topik diperbolehkan.
+ Apakah nama topik ditampilkan atau disembunyikan.
+ Apakah ikon Amazon Q ditampilkan atau disembunyikan (Berlaku hanya untuk `panelType: FULL` opsi).
+ Apakah pinboard ditampilkan tersembunyi.
+ Apakah pengguna dapat memaksimalkan panel T&J Genertaive ke layar penuh.
+ Tema panel Tanya Jawab Generatif. Tema khusus ARN dapat diteruskan di SDK untuk mengubah tampilan konten frame. Tema starter Amazon Quick Sight tidak didukung untuk panel Generative BI yang disematkan. Untuk menggunakan tema starter Amazon Quick Sight, simpan sebagai tema khusus di Amazon Quick Sight.

Saat Anda menggunakan Amazon Quick Sight Embedding SDK, pengalaman Tanya Jawab Generatif di halaman Anda diubah ukurannya secara dinamis berdasarkan status. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam pengalaman Tanya Jawab Generatif dan menerima panggilan balik dalam hal penyelesaian pemuatan halaman, perubahan status, dan kesalahan. 

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini dibuat di server aplikasi Anda.

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

```
<!DOCTYPE html>
<html>
    <head>
        <title>Generative Q&A Embedding Example</title>
        <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@2.7.0/dist/quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            const embedGenerativeQnA = async() => {    
                const {createEmbeddingContext} = QuickSightEmbedding;

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

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

                const contentOptions = {
                    // Optional panel settings. Default behavior is equivalent to {panelType: 'FULL'}
                    panelOptions: {
                        panelType: 'FULL',
                        title: 'custom title', // Optional
                        showQIcon: false, // Optional, Default: true
                    },
                    // Use SEARCH_BAR panel type for the landing state to be similar to embedQSearchBar
                    // with generative capability enabled topics
                    /*
                    panelOptions: {
                        panelType: 'SEARCH_BAR',
                        focusedHeight: '250px',
                        expandedHeight: '500px',
                    },
                    */
                    showTopicName: false, // Optional, Default: true
                    showPinboard: false, // Optional, Default: true
                    allowTopicSelection: false, // Optional, Default: true
                    allowFullscreen: false, // Optional, Default: true
                    searchPlaceholderText: "custom search placeholder", // Optional
                    themeOptions: { // Optional
                        themeArn: 'arn:aws:quicksight:<Region>:<AWS-Account-ID>:theme/<Theme-ID>'
                    }
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                // called when pinboard is shown / visuals are rendered
                                console.log("Do something when SEARCH_BAR type panel is expanded");
                                break;
                            }
                            case 'Q_SEARCH_FOCUSED': {
                                // called when question suggestions or topic selection dropdown are shown
                                console.log("Do something when SEARCH_BAR type panel is focused");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                // called when shrinked to initial bar height
                                console.log("Do something when SEARCH_BAR type panel is collapsed");
                                break;
                            }
                            case 'Q_PANEL_ENTERED_FULLSCREEN': {
                                console.log("Do something when panel enters full screen mode");
                                break;
                            }
                            case 'Q_PANEL_EXITED_FULLSCREEN': {
                                console.log("Do something when panel exits full screen mode");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something after experience is loaded");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when experience fails to load");
                                break;
                            }
                        }
                    }
                };
                const embeddedGenerativeQnExperience = await embeddingContext.embedGenerativeQnA(frameOptions, contentOptions);
            };
        </script>
    </head>

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

</html>
```

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat pengalaman Tanya Jawab Generatif yang disematkan di situs web Anda. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

### Fungsionalitas pengalaman Tanya Jawab Generatif tertanam opsional
<a name="embedded-analytics-gen-bi-authenticated-users-step-4"></a>

Fungsionalitas opsional berikut tersedia untuk pengalaman Tanya Jawab Generatif yang disematkan dengan SDK penyematan. 

#### Memanggil tindakan bilah penelusuran Tanya Jawab Generatif
<a name="w2aac35c27c21c43c29b9c21b5"></a>
+ Tetapkan pertanyaan — Fitur ini mengirimkan pertanyaan ke pengalaman Tanya Jawab Generatif dan segera menanyakan pertanyaan tersebut.

  ```
  embeddedGenerativeQnExperience.setQuestion('show me monthly revenue');
  ```
+ Tutup panel jawaban (berlaku untuk opsi bilah pencarian Tanya Jawab Generatif) - Fitur ini menutup panel jawaban dan mengembalikan iframe ke status bilah pencarian asli.

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

Untuk informasi selengkapnya, lihat [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk).

## Menyematkan Amazon Q dalam pengalaman Tanya Jawab Generatif Cepat untuk pengguna anonim (tidak terdaftar)
<a name="embedded-analytics-gen-bi-anonymous-users"></a>


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara menyiapkan pengalaman Tanya Jawab Generatif yang disematkan untuk pengguna anonim (tidak terdaftar).

**Topics**
+ [

### Langkah 1: Siapkan izin
](#embedded-analytics-gen-bi-anonymous-users-step-1)
+ [

### Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
](#embedded-analytics-gen-bi-anonymous-users-step-2)
+ [

### Langkah 3: Sematkan URL pengalaman Tanya Jawab Generatif
](#embedded-analytics-gen-bi-anonymous-users-step-3)
+ [

### Fungsionalitas pengalaman Tanya Jawab Generatif tertanam opsional
](#embedded-analytics-gen-bi-anonymous-users-step-4)

### Langkah 1: Siapkan izin
<a name="embedded-analytics-gen-bi-anonymous-users-step-1"></a>

Di bagian berikut, Anda dapat menemukan cara mengatur izin untuk aplikasi backend atau server web Anda untuk menyematkan pengalaman Tanya Jawab Generatif. Tugas ini membutuhkan akses administratif ke AWS Identity and Access Management (IAM).

Setiap pengguna yang mengakses pengalaman Tanya Jawab Generatif mengambil peran yang memberi mereka akses dan izin Amazon Quick Sight. Untuk memungkinkan ini, buat peran IAM di Anda Akun AWS. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya. Peran IAM perlu memberikan izin untuk mengambil penyematan untuk kumpulan pengguna URLs tertentu. 

Dengan bantuan karakter *wildcard\$1*, Anda dapat memberikan izin untuk menghasilkan URL untuk semua pengguna di namespace tertentu. Atau Anda dapat memberikan izin untuk menghasilkan URL untuk subset pengguna di ruang nama tertentu. Untuk ini, Anda menambahkan`quicksight:GenerateEmbedUrlForAnonymousUser`.

Anda dapat membuat kondisi dalam kebijakan IAM yang membatasi domain yang dapat dicantumkan developer dalam `AllowedDomains` parameter operasi `GenerateEmbedUrlForAnonymousUser` API. `AllowedDomains`Parameter adalah parameter opsional. Ini memberi pengembang opsi untuk mengganti domain statis yang dikonfigurasi di menu Kelola **Amazon Quick Sight** dan sebagai gantinya mencantumkan hingga tiga domain atau subdomain yang dapat mengakses URL yang dihasilkan. URL ini kemudian disematkan di situs web pengembang. Hanya domain yang tercantum dalam parameter yang dapat mengakses bilah pencarian Q yang disematkan. Tanpa kondisi ini, pengembang dapat mencantumkan domain apa pun di internet dalam `AllowedDomains` parameter. 

Untuk membatasi domain yang dapat digunakan pengembang dengan parameter ini, tambahkan `AllowedEmbeddingDomains` kondisi ke kebijakan IAM Anda. Untuk informasi selengkapnya tentang `AllowedDomains` parameter, lihat [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)di *Referensi API Amazon Quick Sight*.

**Praktik terbaik keamanan untuk operator kondisi IAM**  
Operator kondisi IAM yang tidak dikonfigurasi dengan benar dapat mengizinkan akses tidak sah ke sumber daya Cepat yang disematkan Anda melalui variasi URL. Saat menggunakan kunci `quicksight:AllowedEmbeddingDomains` kondisi dalam kebijakan IAM Anda, gunakan operator kondisi yang mengizinkan domain tertentu atau menolak semua domain yang tidak diizinkan secara khusus. Untuk informasi selengkapnya tentang operator kondisi IAM, lihat [elemen kebijakan IAM JSON: Operator kondisi di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Pengguna IAM.  
Banyak variasi URL yang berbeda dapat menunjuk ke sumber daya yang sama. Misalnya, berikut ini URLs semua menyelesaikan konten yang sama:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Jika kebijakan Anda menggunakan operator yang tidak memperhitungkan variasi URL ini, penyerang dapat melewati batasan Anda dengan memberikan variasi URL yang setara.  
Anda harus memvalidasi bahwa kebijakan IAM Anda menggunakan operator kondisi yang sesuai untuk mencegah kerentanan bypass dan memastikan bahwa hanya domain yang Anda inginkan yang dapat mengakses sumber daya yang disematkan.

Identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna untuk memuat pengalaman Tanya Jawab Generatif. Contoh berikut menunjukkan contoh kebijakan kepercayaan.

------
#### [ 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"
        }
    ]
}
```

------

*Untuk informasi selengkapnya mengenai kebijakan kepercayaan, lihat [Kredensil keamanan sementara di IAM di Panduan Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)*

### Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
<a name="embedded-analytics-gen-bi-anonymous-users-step-2"></a>

Di bagian berikut, Anda dapat menemukan cara mengautentikasi pengguna Anda dan mendapatkan URL topik Q yang dapat disematkan di server aplikasi Anda.

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian aplikasi menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

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

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

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

    private final AmazonQuickSight quickSightClient;

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

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

    public String GenerateEmbedUrlForAnonymousUser(
        final String accountId, // YOUR AWS ACCOUNT ID
        final String initialTopicId, // Q TOPIC ID TO WHICH THE CONSTRUCTED URL POINTS AND EXPERIENCE PREPOPULATES INITIALLY
        final String namespace, // ANONYMOUS EMBEDDING REQUIRES SPECIFYING A VALID NAMESPACE FOR WHICH YOU WANT THE EMBEDDING URL
        final List<String> authorizedResourceArns, // Q TOPIC ARN LIST TO EMBED
        final List<String> allowedDomains, // RUNTIME ALLOWED DOMAINS FOR EMBEDDING
        final List<SessionTag> sessionTags // SESSION TAGS USED FOR ROW-LEVEL SECURITY
    ) throws Exception {
        AnonymousUserEmbeddingExperienceConfiguration experienceConfiguration = new AnonymousUserEmbeddingExperienceConfiguration();
        AnonymousUserGenerativeQnAEmbeddingConfiguration generativeQnAConfiguration = new AnonymousUserGenerativeQnAEmbeddingConfiguration();
        generativeQnAConfiguration.setInitialTopicId(initialTopicId);
        experienceConfiguration.setGenerativeQnA(generativeQnAConfiguration);

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

        GenerateEmbedUrlForAnonymousUserResult result = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

        return result.getEmbedUrl();
    }

}
```

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

**catatan**  
Pembuatan URL embed APIs tidak dapat dipanggil dari browser secara langsung. Lihat contoh Node.JS sebagai gantinya.

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

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

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

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

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

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

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

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

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk bilah pencarian Q yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan bilah pencarian Q. 

**Example**  

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

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

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

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini ketika Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini ketika Anda menggunakan SALL untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`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`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Untuk mesin Microsoft Windows, gunakan `set` sebagai pengganti`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_q_search_bar_role/QuickSightEmbeddingAnonymousPolicy`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna. Ini juga mencegah pembatasan akses pengguna. *Throttling* adalah fitur keamanan yang mencegah pengguna yang sama mengakses Amazon Quick Sight dari beberapa lokasi. Selain itu, ini membuat setiap sesi terpisah dan berbeda. Jika Anda menggunakan array server web, misalnya untuk load balancing, dan sesi terhubung kembali ke server yang berbeda, sesi baru dimulai.

Untuk mendapatkan URL yang ditandatangani untuk dasbor, panggil `generate-embed-url-for-anynymous-user` dari server aplikasi. Ini mengembalikan URL dasbor yang dapat disematkan. Contoh berikut menunjukkan cara membuat URL untuk dasbor tertanam menggunakan panggilan sisi server untuk pengguna yang melakukan kunjungan anonim ke portal web atau aplikasi Anda.

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

Untuk informasi lebih lanjut tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri.

### Langkah 3: Sematkan URL pengalaman Tanya Jawab Generatif
<a name="embedded-analytics-gen-bi-anonymous-users-step-3"></a>

Di bagian berikut, Anda dapat menemukan cara menyematkan URL pengalaman Tanya Jawab Generatif di situs web atau halaman aplikasi Anda. Anda melakukan ini dengan [Amazon Quick Sight embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) ()JavaScript. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan pengalaman Tanya Jawab Generatif pada halaman HTML.
+ Sesuaikan tata letak dan tampilan pengalaman yang disematkan agar sesuai dengan kebutuhan aplikasi Anda.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Untuk membuat URL yang dapat disematkan di aplikasi, panggil operasi `GenerateEmbedUrlForAnonymousUser` API. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku hingga 10 jam. Operasi API menyediakan URL dengan `auth_code` nilai yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
}
```

Sematkan pengalaman Tanya Jawab Generatif di halaman web Anda dengan SDK [penyematan Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. 

Pastikan bahwa domain untuk meng-host pengalaman Tanya Jawab Generatif ada di *daftar izinkan, daftar* domain yang disetujui untuk langganan Amazon Quick Sight Anda. Persyaratan ini melindungi data Anda dengan menjaga domain yang tidak disetujui dari hosting pengalaman Tanya Jawab Generatif yang disematkan. Untuk informasi selengkapnya tentang menambahkan domain untuk pengalaman Tanya Jawab Generatif yang disematkan, lihat. [Mengelola domain](manage-domains.md)

Anda dapat menggunakan Amazon Quick Sight Embedding SDK untuk menyesuaikan tata letak dan tampilan pengalaman Tanya Jawab Generatif yang disematkan agar sesuai dengan aplikasi Anda. Gunakan `panelType` properti untuk mengonfigurasi status pendaratan pengalaman Tanya Jawab Generatif saat dirender dalam aplikasi Anda. Atur `panelType` properti `'FULL'` untuk membuat panel pengalaman Tanya Jawab Generatif lengkap. Panel ini menyerupai pengalaman yang dimiliki pengguna Amazon Quick Sight di konsol Amazon Quick Sight. Tinggi bingkai panel tidak berubah berdasarkan interaksi pengguna dan menghormati nilai yang Anda tetapkan di `frameOptions.height` properti. Gambar di bawah ini menunjukkan panel pengalaman Tanya Jawab Generatif yang dirender saat Anda menyetel nilainya. `panelType` `'FULL'`

Setel `panelType` properti `'SEARCH_BAR'` untuk membuat pengalaman Tanya Jawab Generatif sebagai bilah pencarian. Bilah pencarian ini menyerupai cara Q Search Bar ditampilkan ketika disematkan ke dalam aplikasi. Bilah pencarian Tanya Jawab Generatif meluas ke panel yang lebih besar yang menampilkan opsi pemilihan topik, daftar saran pertanyaan, panel jawaban, atau papan pin.

Tinggi minimum default dari bilah pencarian Tanya Jawab Generatif dirender saat aset yang disematkan dimuat. Disarankan agar Anda menetapkan `frameOptions.height` nilai `"38px"` untuk mengoptimalkan pengalaman bilah pencarian. Gunakan `focusedHeight` properti untuk mengatur ukuran optimal dropdown pemilihan topik dan daftar saran pertanyaan. Gunakan `expandedHeight` properti untuk mengatur ukuran optimal panel jawaban dan pinboard. Jika Anda memilih `'SEARCH_BAR'` opsi, disarankan agar Anda menata wadah induk dengan posisi; mutlak untuk menghindari pergeseran konten yang tidak diinginkan dalam aplikasi Anda. Gambar di bawah ini menunjukkan bilah pencarian pengalaman Tanya Jawab Generatif yang dirender saat Anda menetapkan nilainya. `panelType` `'SEARCH_BAR'`

Setelah mengonfigurasi `panelType` properti, gunakan SDK penyematan Amazon Quick Sight untuk menyesuaikan properti berikut dari pengalaman Tanya Jawab Generatif.
+ Judul panel Tanya Jawab Generatif (Berlaku hanya untuk opsi). `panelType: FULL` 
+ Teks placeholder bilah pencarian.
+ Apakah pemilihan topik diperbolehkan.
+ Apakah nama topik ditampilkan atau disembunyikan.
+ Apakah ikon Amazon Q ditampilkan atau disembunyikan (Berlaku hanya untuk `panelType: FULL` opsi).
+ Apakah pinboard ditampilkan tersembunyi.
+ Apakah pengguna dapat memaksimalkan panel T&J Genertaive ke layar penuh.
+ Tema panel Tanya Jawab Generatif. Tema khusus ARN dapat diteruskan di SDK untuk mengubah tampilan konten frame. Tema starter Amazon Quick Sight tidak didukung untuk panel Generative BI yang disematkan. Untuk menggunakan tema starter Amazon Quick Sight, simpan sebagai tema khusus di Amazon Quick Sight.

Saat Anda menggunakan Amazon Quick Sight Embedding SDK, pengalaman Tanya Jawab Generatif di halaman Anda diubah ukurannya secara dinamis berdasarkan status. Dengan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam pengalaman Tanya Jawab Generatif dan menerima panggilan balik dalam hal penyelesaian pemuatan halaman, perubahan status, dan kesalahan. 

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini dibuat di server aplikasi Anda.

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

```
<!DOCTYPE html>
<html>
    <head>
        <title>Generative Q&A Embedding Example</title>
        <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@2.7.0/dist/quicksight-embedding-js-sdk.min.js"></script>
        <script type="text/javascript">
            const embedGenerativeQnA = async() => {    
                const {createEmbeddingContext} = QuickSightEmbedding;

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

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

                const contentOptions = {
                    // Optional panel settings. Default behavior is equivalent to {panelType: 'FULL'}
                    panelOptions: {
                        panelType: 'FULL',
                        title: 'custom title', // Optional
                        showQIcon: false, // Optional, Default: true
                    },
                    // Use SEARCH_BAR panel type for the landing state to be similar to embedQSearchBar
                    // with generative capability enabled topics
                    /*
                    panelOptions: {
                        panelType: 'SEARCH_BAR',
                        focusedHeight: '250px',
                        expandedHeight: '500px',
                    },
                    */
                    showTopicName: false, // Optional, Default: true
                    showPinboard: false, // Optional, Default: true
                    allowTopicSelection: false, // Optional, Default: true
                    allowFullscreen: false, // Optional, Default: true
                    searchPlaceholderText: "custom search placeholder", // Optional
                    themeOptions: { // Optional
                        themeArn: 'arn:aws:quicksight:<Region>:<AWS-Account-ID>:theme/<Theme-ID>'
                    }
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                // called when pinboard is shown / visuals are rendered
                                console.log("Do something when SEARCH_BAR type panel is expanded");
                                break;
                            }
                            case 'Q_SEARCH_FOCUSED': {
                                // called when question suggestions or topic selection dropdown are shown
                                console.log("Do something when SEARCH_BAR type panel is focused");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                // called when shrinked to initial bar height
                                console.log("Do something when SEARCH_BAR type panel is collapsed");
                                break;
                            }
                            case 'Q_PANEL_ENTERED_FULLSCREEN': {
                                console.log("Do something when panel enters full screen mode");
                                break;
                            }
                            case 'Q_PANEL_EXITED_FULLSCREEN': {
                                console.log("Do something when panel exits full screen mode");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something after experience is loaded");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when experience fails to load");
                                break;
                            }
                        }
                    }
                };
                const embeddedGenerativeQnExperience = await embeddingContext.embedGenerativeQnA(frameOptions, contentOptions);
            };
        </script>
    </head>

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

</html>
```

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat pengalaman Tanya Jawab Generatif yang disematkan di situs web Anda. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

### Fungsionalitas pengalaman Tanya Jawab Generatif tertanam opsional
<a name="embedded-analytics-gen-bi-anonymous-users-step-4"></a>

Fungsionalitas opsional berikut tersedia untuk pengalaman Tanya Jawab Generatif yang disematkan dengan SDK penyematan. 

#### Memanggil tindakan bilah penelusuran Tanya Jawab Generatif
<a name="w2aac35c27c21c43c29c13c25b5"></a>
+ Tetapkan pertanyaan — Fitur ini mengirimkan pertanyaan ke pengalaman Tanya Jawab Generatif dan segera menanyakan pertanyaan tersebut.

  ```
  embeddedGenerativeQnExperience.setQuestion('show me monthly revenue');
  ```
+ Tutup panel jawaban (berlaku untuk opsi bilah pencarian Tanya Jawab Generatif) - Fitur ini menutup panel jawaban dan mengembalikan iframe ke status bilah pencarian asli.

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

Untuk informasi selengkapnya, lihat [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk).

# Menyematkan bilah pencarian Amazon Quick Sight Q (Klasik)
<a name="embedding-quicksight-q"></a>


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Gunakan topik berikut untuk mempelajari tentang menyematkan bilah pencarian Amazon Quick Sight Q dengan Amazon Quick Sight APIs.

**Topics**
+ [

# Menyematkan bilah pencarian Amazon Quick Sight Q untuk pengguna terdaftar
](embedded-analytics-q-search-bar-for-authenticated-users.md)
+ [

# Menyematkan bilah pencarian Amazon Quick Sight Q untuk pengguna anonim (tidak terdaftar)
](embedded-analytics-q-search-bar-for-anonymous-users.md)

# Menyematkan bilah pencarian Amazon Quick Sight Q untuk pengguna terdaftar
<a name="embedded-analytics-q-search-bar-for-authenticated-users"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur bilah pencarian Amazon Quick Sight Q yang disematkan untuk pengguna terdaftar Amazon Quick Sight.

**Topics**
+ [

## Langkah 1: Siapkan izin
](#embedded-q-bar-for-authenticated-users-step-1)
+ [

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
](#embedded-q-bar-for-authenticated-users-step-2)
+ [

## Langkah 3: Sematkan URL bilah pencarian Q
](#embedded-q-bar-for-authenticated-users-step-3)
+ [

## Fungsi penyematan bilah pencarian Amazon Quick Sight Q opsional
](#embedded-q-bar-for-authenticated-users-step-4)

## Langkah 1: Siapkan izin
<a name="embedded-q-bar-for-authenticated-users-step-1"></a>

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Di bagian berikut, Anda dapat menemukan cara mengatur izin untuk aplikasi backend atau server web Anda untuk menyematkan bilah pencarian Q. Tugas ini membutuhkan akses administratif ke AWS Identity and Access Management (IAM).

Setiap pengguna yang mengakses dasbor mengambil peran yang memberi mereka akses dan izin Amazon Quick Sight ke dasbor. Untuk memungkinkan ini, buat peran IAM di Anda Akun AWS. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya. Peran IAM perlu memberikan izin untuk mengambil penyematan untuk kumpulan pengguna URLs tertentu. 

Dengan bantuan karakter *wildcard\$1*, Anda dapat memberikan izin untuk menghasilkan URL untuk semua pengguna di namespace tertentu. Atau Anda dapat memberikan izin untuk menghasilkan URL untuk subset pengguna di ruang nama tertentu. Untuk ini, Anda menambahkan`quicksight:GenerateEmbedUrlForRegisteredUser`.

Anda dapat membuat kondisi dalam kebijakan IAM yang membatasi domain yang dapat dicantumkan developer dalam `AllowedDomains` parameter operasi `GenerateEmbedUrlForRegisteredUser` API. `AllowedDomains`Parameter adalah parameter opsional. Ini memberi pengembang opsi untuk mengganti domain statis yang dikonfigurasi di menu Kelola **Amazon Quick Sight** dan sebagai gantinya mencantumkan hingga tiga domain atau subdomain yang dapat mengakses URL yang dihasilkan. URL ini kemudian disematkan di situs web pengembang. Hanya domain yang tercantum dalam parameter yang dapat mengakses bilah pencarian Q yang disematkan. Tanpa kondisi ini, pengembang dapat mencantumkan domain apa pun di internet dalam `AllowedDomains` parameter. 

Untuk membatasi domain yang dapat digunakan pengembang dengan parameter ini, tambahkan `AllowedEmbeddingDomains` kondisi ke kebijakan IAM Anda. Untuk informasi selengkapnya tentang `AllowedDomains` parameter, lihat [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)di *Referensi API Amazon Quick Sight*.

**Praktik terbaik keamanan untuk operator kondisi IAM**  
Operator kondisi IAM yang tidak dikonfigurasi dengan benar dapat mengizinkan akses tidak sah ke sumber daya Cepat yang disematkan Anda melalui variasi URL. Saat menggunakan kunci `quicksight:AllowedEmbeddingDomains` kondisi dalam kebijakan IAM Anda, gunakan operator kondisi yang mengizinkan domain tertentu atau menolak semua domain yang tidak diizinkan secara khusus. Untuk informasi selengkapnya tentang operator kondisi IAM, lihat [elemen kebijakan IAM JSON: Operator kondisi di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Pengguna IAM.  
Banyak variasi URL yang berbeda dapat menunjuk ke sumber daya yang sama. Misalnya, berikut ini URLs semua menyelesaikan konten yang sama:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Jika kebijakan Anda menggunakan operator yang tidak memperhitungkan variasi URL ini, penyerang dapat melewati batasan Anda dengan memberikan variasi URL yang setara.  
Anda harus memvalidasi bahwa kebijakan IAM Anda menggunakan operator kondisi yang sesuai untuk mencegah kerentanan bypass dan memastikan bahwa hanya domain yang Anda inginkan yang dapat mengakses sumber daya yang disematkan.

Kebijakan contoh berikut memberikan izin ini.

Selain itu, jika Anda membuat pengguna pertama kali yang akan menjadi pembaca Amazon Quick Sight, pastikan untuk menambahkan `quicksight:RegisterUser` izin dalam kebijakan.

Kebijakan contoh berikut memberikan izin untuk mengambil URL penyematan bagi pengguna pertama kali yang akan menjadi pembaca Amazon Quick Sight.

Terakhir, identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna dan menyediakan pengguna di Amazon Quick Sight. 

Contoh berikut menunjukkan contoh kebijakan kepercayaan.

------
#### [ 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"
        }
    ]
}
```

------

*Untuk informasi selengkapnya mengenai kebijakan kepercayaan untuk otentikasi OpenID Connect atau Security Assertion Markup Language (SAM), lihat bagian berikut dari Panduan Pengguna IAM:*
+ [Membuat peran untuk identitas web atau federasi OpenID Connect (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Membuat peran untuk federasi SAFL 2.0 (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
<a name="embedded-q-bar-for-authenticated-users-step-2"></a>

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Di bagian berikut, Anda dapat menemukan cara mengautentikasi pengguna Anda dan mendapatkan URL topik Q yang dapat disematkan di server aplikasi Anda. Jika Anda berencana untuk menyematkan bilah Q untuk tipe identitas IAM atau Amazon Quick Sight, bagikan topik Q dengan pengguna.

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian aplikasi menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Melakukan langkah-langkah yang dijelaskan memastikan bahwa setiap pemirsa topik Q disediakan secara unik di Amazon Quick Sight. Ini juga memberlakukan pengaturan per pengguna, seperti keamanan tingkat baris dan default dinamis untuk parameter.

Contoh berikut melakukan otentikasi IAM atas nama pengguna. Kode ini berjalan di server aplikasi Anda.

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

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

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

            private final AmazonQuickSight quickSightClient;

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

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

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

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

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

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

function generateEmbedUrlForRegisteredUser(
    accountId,
    topicId, // Topic ID to embed
    openIdToken, // Cognito-based token
    userArn, // registered user arn
    roleArn, // IAM user role to use for embedding
    sessionName, // Session name for the roleArn assume role
    allowedDomains, // Runtime allowed domain for embedding
    getEmbedUrlCallback, // GetEmbedUrl success callback method
    errorCallback // GetEmbedUrl error callback method
    ) {
    const stsClient = new AWS.STS();
    let stsParams = {
        RoleSessionName: sessionName,
        WebIdentityToken: openIdToken,
        RoleArn: roleArn
        }
    
    stsClient.assumeRoleWithWebIdentity(stsParams, function(err, data) {
        if (err) {
            console.log('Error assuming role');
            console.log(err, err.stack);
            errorCallback(err);
        } else {
            const getQSearchBarParams = {
        "AwsAccountId": accountId,
                "ExperienceConfiguration": {
                    "QSearchBar": {
                        "InitialTopicId": topicId
                    }
                },
                "UserArn": userArn,
        "AllowedDomains": allowedDomains,
        "SessionLifetimeInMinutes": 600
    };

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

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

### Python3
<a name="embedded-q-bar-for-embedded-q-bar-for-authenticated-users-python"></a>

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

sts = boto3.client('sts')

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

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

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

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

**Example**  

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

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

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk bilah pencarian Q yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan bilah pencarian Q. 

**Example**  

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

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

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

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini ketika Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini ketika Anda menggunakan SALL untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GenerateEmbedUrlForRegisteredUser`. Jika Anda mengambil just-in-time pendekatan untuk menambahkan pengguna saat mereka menggunakan topik di bilah pencarian Q, peran tersebut juga memerlukan izin yang diaktifkan. `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`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Untuk mesin Microsoft Windows, gunakan `set` sebagai pengganti`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_q_search_bar_role/john.doe@example.com`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna. Ini juga mencegah pembatasan akses pengguna. *Throttling* adalah fitur keamanan yang mencegah pengguna yang sama mengakses Amazon Quick Sight dari beberapa lokasi. 

ID sesi peran juga menjadi nama pengguna di Amazon Quick Sight. Anda dapat menggunakan pola ini untuk menyediakan pengguna Anda di Amazon Quick Sight sebelumnya, atau untuk menyediakannya saat pertama kali mereka mengakses bilah pencarian Q. 

Contoh berikut menunjukkan perintah CLI yang dapat Anda gunakan untuk menyediakan pengguna. Untuk informasi selengkapnya tentang [RegisterUser[DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html)](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html),, dan operasi Amazon Quick Sight API lainnya, lihat [referensi 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
```

Jika pengguna diautentikasi melalui Microsoft AD, Anda tidak perlu menggunakannya `RegisterUser` untuk mengaturnya. Sebagai gantinya, mereka harus berlangganan secara otomatis saat pertama kali mengakses Amazon Quick Sight. Untuk pengguna Microsoft AD, Anda dapat menggunakan `DescribeUser` untuk mendapatkan pengguna Amazon Resource Name (ARN).

Saat pertama kali pengguna mengakses Amazon Quick Sight, Anda juga dapat menambahkan pengguna ini ke grup tempat dasbor dibagikan. Contoh berikut menunjukkan perintah CLI untuk menambahkan pengguna ke grup.

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

Anda sekarang memiliki pengguna aplikasi Anda yang juga pengguna Amazon Quick Sight, dan yang memiliki akses ke dasbor. 

Terakhir, untuk mendapatkan URL yang ditandatangani untuk dasbor, panggil `generate-embed-url-for-registered-user` dari server aplikasi. Ini mengembalikan URL dasbor yang dapat disematkan. Contoh berikut menunjukkan cara membuat URL untuk dasbor tertanam menggunakan panggilan sisi server untuk pengguna yang diautentikasi melalui AWS Managed Microsoft AD atau sistem masuk tunggal (IAM Identity Center).

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

Untuk informasi lebih lanjut tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri.

## Langkah 3: Sematkan URL bilah pencarian Q
<a name="embedded-q-bar-for-authenticated-users-step-3"></a>

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Di bagian berikut, Anda dapat menemukan cara menyematkan URL bilah pencarian Q dari langkah 3 di situs web atau halaman aplikasi Anda. Anda melakukan ini dengan [Amazon Quick Sight embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) ()JavaScript. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan bilah pencarian Q pada halaman HTML.
+ Masukkan parameter ke bilah pencarian Q.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Untuk membuat URL yang dapat disematkan di aplikasi, panggil operasi `GenerateEmbedUrlForRegisteredUser` API. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku hingga 10 jam. Operasi API menyediakan URL dengan `auth_code` nilai yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
}
```

Sematkan bilah pencarian Q di halaman web Anda dengan menggunakan [SDK penyematan Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. 

Untuk melakukan ini, pastikan bahwa domain untuk meng-host bilah pencarian Q yang disematkan ada di *daftar izinkan*, daftar domain yang disetujui untuk langganan Amazon Quick Sight Anda. Persyaratan ini melindungi data Anda dengan menjaga domain yang tidak disetujui dari hosting dasbor tertanam. Untuk informasi selengkapnya tentang menambahkan domain untuk bilah pencarian Q yang disematkan, lihat [Mengelola domain dan](https://docs.aws.amazon.com/quicksight/latest/user/manage-qs-domains-and-embedding.html) menyematkan.

Saat Anda menggunakan Amazon Quick Sight Embedding SDK, bilah pencarian Q di halaman Anda diubah ukurannya secara dinamis berdasarkan status. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam bilah pencarian Q dan menerima panggilan balik dalam hal penyelesaian dan kesalahan pemuatan halaman. 

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini dibuat di server aplikasi Anda.

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

```
<!DOCTYPE html>
<html>

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

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

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

                const contentOptions = {
                    hideTopicName: false, 
                    theme: '<YOUR_THEME_ID>',
                    allowTopicSelection: true,
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                console.log("Do something when Q Search content expanded");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                console.log("Do something when Q Search content collapsed");
                                break;
                            }
                            case 'Q_SEARCH_SIZE_CHANGED': {
                                console.log("Do something when Q Search size changed");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something when the Q Search is loaded.");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when the Q Search fails loading.");
                                break;
                            }
                        }
                    }
                };
                const embeddedDashboardExperience = await embeddingContext.embedQSearchBar(frameOptions, contentOptions);
            };
        </script>
    </head>

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

</html>
```

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

```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

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

</html>
```

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat dasbor yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

## Fungsi penyematan bilah pencarian Amazon Quick Sight Q opsional
<a name="embedded-q-bar-for-authenticated-users-step-4"></a>

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Fungsionalitas opsional berikut tersedia untuk bilah pencarian Q yang disematkan menggunakan SDK penyematan. 

### Memanggil tindakan bilah pencarian Q
<a name="w2aac35c27c21c43c31c15c21b7"></a>

Opsi berikut hanya didukung untuk penyematan bilah pencarian Q. 
+ Tetapkan pertanyaan bilah pencarian Q - Fitur ini mengirimkan pertanyaan ke bilah pencarian Q dan segera menanyakan pertanyaan. Ini juga secara otomatis membuka popover Q.

  ```
  qBar.setQBarQuestion('show me monthly revenue');
  ```
+ Tutup popover Q - Fitur ini menutup popover Q dan mengembalikan iframe ke ukuran bar pencarian Q asli.

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

Untuk informasi selengkapnya, lihat [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk).

# Menyematkan bilah pencarian Amazon Quick Sight Q untuk pengguna anonim (tidak terdaftar)
<a name="embedded-analytics-q-search-bar-for-anonymous-users"></a>


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur bilah pencarian Amazon Quick Sight Q yang disematkan untuk pengguna anonim (tidak terdaftar).

**Topics**
+ [

## Langkah 1: Siapkan izin
](#embedded-q-bar-for-anonymous-users-step-1)
+ [

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
](#embedded-q-bar-for-anonymous-users-step-2)
+ [

## Langkah 3: Sematkan URL bilah pencarian Q
](#embedded-q-bar-for-anonymous-users-step-3)
+ [

## Fungsi penyematan bilah pencarian Amazon Quick Sight Q opsional
](#embedded-q-bar-for-anonymous-users-step-4)

## Langkah 1: Siapkan izin
<a name="embedded-q-bar-for-anonymous-users-step-1"></a>

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Di bagian berikut, Anda dapat menemukan cara mengatur izin untuk aplikasi backend atau server web Anda untuk menyematkan bilah pencarian Q. Tugas ini membutuhkan akses administratif ke AWS Identity and Access Management (IAM).

Setiap pengguna yang mengakses bilah pencarian Q mengambil peran yang memberi mereka akses Amazon Quick Sight dan izin ke bilah pencarian Q. Untuk memungkinkan ini, buat peran IAM di Anda Akun AWS. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya. Peran IAM perlu memberikan izin untuk mengambil penyematan untuk kumpulan pengguna URLs tertentu. 

Dengan bantuan karakter *wildcard\$1*, Anda dapat memberikan izin untuk menghasilkan URL untuk semua pengguna di namespace tertentu. Atau Anda dapat memberikan izin untuk menghasilkan URL untuk subset pengguna di ruang nama tertentu. Untuk ini, Anda menambahkan`quicksight:GenerateEmbedUrlForAnonymousUser`.

Anda dapat membuat kondisi dalam kebijakan IAM yang membatasi domain yang dapat dicantumkan developer dalam `AllowedDomains` parameter operasi `GenerateEmbedUrlForAnonymousUser` API. `AllowedDomains`Parameter adalah parameter opsional. Ini memberi pengembang opsi untuk mengganti domain statis yang dikonfigurasi di menu Kelola **Amazon Quick Sight** dan sebagai gantinya mencantumkan hingga tiga domain atau subdomain yang dapat mengakses URL yang dihasilkan. URL ini kemudian disematkan di situs web pengembang. Hanya domain yang tercantum dalam parameter yang dapat mengakses bilah pencarian Q yang disematkan. Tanpa kondisi ini, pengembang dapat mencantumkan domain apa pun di internet dalam `AllowedDomains` parameter. 

Untuk membatasi domain yang dapat digunakan pengembang dengan parameter ini, tambahkan `AllowedEmbeddingDomains` kondisi ke kebijakan IAM Anda. Untuk informasi selengkapnya tentang `AllowedDomains` parameter, lihat [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)di *Referensi API Amazon Quick Sight*.

**Praktik terbaik keamanan untuk operator kondisi IAM**  
Operator kondisi IAM yang tidak dikonfigurasi dengan benar dapat mengizinkan akses tidak sah ke sumber daya Cepat yang disematkan Anda melalui variasi URL. Saat menggunakan kunci `quicksight:AllowedEmbeddingDomains` kondisi dalam kebijakan IAM Anda, gunakan operator kondisi yang mengizinkan domain tertentu atau menolak semua domain yang tidak diizinkan secara khusus. Untuk informasi selengkapnya tentang operator kondisi IAM, lihat [elemen kebijakan IAM JSON: Operator kondisi di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Pengguna IAM.  
Banyak variasi URL yang berbeda dapat menunjuk ke sumber daya yang sama. Misalnya, berikut ini URLs semua menyelesaikan konten yang sama:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Jika kebijakan Anda menggunakan operator yang tidak memperhitungkan variasi URL ini, penyerang dapat melewati batasan Anda dengan memberikan variasi URL yang setara.  
Anda harus memvalidasi bahwa kebijakan IAM Anda menggunakan operator kondisi yang sesuai untuk mencegah kerentanan bypass dan memastikan bahwa hanya domain yang Anda inginkan yang dapat mengakses sumber daya yang disematkan.

Identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna untuk membuka bilah pencarian Q. Contoh berikut menunjukkan contoh kebijakan kepercayaan.

------
#### [ 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"
        }
    ]
}
```

------

*Untuk informasi selengkapnya mengenai kebijakan kepercayaan, lihat [Kredensi keamanan sementara di IAM di Panduan Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)*

## Langkah 2: Hasilkan URL dengan kode otentikasi terlampir
<a name="embedded-q-bar-for-anonymous-users-step-2"></a>

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Di bagian berikut, Anda dapat menemukan cara mengautentikasi pengguna Anda dan mendapatkan URL topik Q yang dapat disematkan di server aplikasi Anda.

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian aplikasi menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/AnonymousUserQSearchBarEmbeddingConfiguration.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/AnonymousUserQSearchBarEmbeddingConfiguration.html).

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

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


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

            private final AmazonQuickSight quickSightClient;

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

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

            public String GenerateEmbedUrlForAnonymousUser(
                final String accountId, // YOUR AWS ACCOUNT ID
                final String initialTopicId, // Q TOPIC ID TO WHICH THE CONSTRUCTED URL POINTS AND SEARCHBAR PREPOPULATES INITIALLY
                final String namespace, // ANONYMOUS EMBEDDING REQUIRES SPECIFYING A VALID NAMESPACE FOR WHICH YOU WANT THE EMBEDDING URL
                final List<String> authorizedResourceArns, // Q SEARCHBAR TOPIC ARN LIST TO EMBED
                final List<String> allowedDomains, // RUNTIME ALLOWED DOMAINS FOR EMBEDDING
                final List<SessionTag> sessionTags // SESSION TAGS USED FOR ROW-LEVEL SECURITY
            ) throws Exception {
                AnonymousUserEmbeddingExperienceConfiguration experienceConfiguration = new AnonymousUserEmbeddingExperienceConfiguration();
                AnonymousUserQSearchBarEmbeddingConfiguration qSearchBarConfiguration = new AnonymousUserQSearchBarEmbeddingConfiguration();
                qSearchBarConfiguration.setInitialTopicId(initialTopicId);
                experienceConfiguration.setQSearchBar(qSearchBarConfiguration);

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

                GenerateEmbedUrlForAnonymousUserResult qSearchBarEmbedUrl = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

                return qSearchBarEmbedUrl.getEmbedUrl();
            }

        }
```

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

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

function generateEmbedUrlForAnonymousUser(
    accountId, // YOUR AWS ACCOUNT ID
    initialTopicId, // Q TOPIC ID TO WHICH THE CONSTRUCTED URL POINTS
    quicksightNamespace, // VALID NAMESPACE WHERE YOU WANT TO DO NOAUTH EMBEDDING
    authorizedResourceArns, // Q SEARCHBAR TOPIC ARN LIST TO EMBED
    allowedDomains, // RUNTIME ALLOWED DOMAINS FOR EMBEDDING
    sessionTags, // SESSION TAGS USED FOR ROW-LEVEL SECURITY
    generateEmbedUrlForAnonymousUserCallback, // SUCCESS CALLBACK METHOD
    errorCallback // ERROR CALLBACK METHOD
    ) {
    const experienceConfiguration = {
        "QSearchBar": {
            "InitialTopicId": initialTopicId // TOPIC ID CAN BE FOUND IN THE URL ON THE TOPIC AUTHOR PAGE
        }
    };
    
    const generateEmbedUrlForAnonymousUserParams = {
        "AwsAccountId": accountId,
        "Namespace": quicksightNamespace,
        "AuthorizedResourceArns": authorizedResourceArns,
        "AllowedDomains": allowedDomains,
        "ExperienceConfiguration": experienceConfiguration,
        "SessionTags": sessionTags,
        "SessionLifetimeInMinutes": 600
    };

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

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

### Python3
<a name="embedded-q-bar-for-anonymous-users-py"></a>

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

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

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

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

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**Example**  

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

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

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

**Example**  

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

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

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk menghasilkan URL untuk bilah pencarian Q yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan bilah pencarian Q. 

**Example**  

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

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

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

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini ketika Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini ketika Anda menggunakan SALL untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`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`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Untuk mesin Microsoft Windows, gunakan `set` sebagai pengganti`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_q_search_bar_role/QuickSightEmbeddingAnonymousPolicy`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna. Ini juga mencegah pembatasan akses pengguna. *Throttling* adalah fitur keamanan yang mencegah pengguna yang sama mengakses Amazon Quick Sight dari beberapa lokasi. Selain itu, ini membuat setiap sesi terpisah dan berbeda. Jika Anda menggunakan array server web, misalnya untuk load balancing, dan sesi terhubung kembali ke server yang berbeda, sesi baru dimulai.

Untuk mendapatkan URL yang ditandatangani untuk dasbor, panggil `generate-embed-url-for-anynymous-user` dari server aplikasi. Ini mengembalikan URL dasbor yang dapat disematkan. Contoh berikut menunjukkan cara membuat URL untuk dasbor tertanam menggunakan panggilan sisi server untuk pengguna yang melakukan kunjungan anonim ke portal web atau aplikasi Anda.

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

Untuk informasi lebih lanjut tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri.

## Langkah 3: Sematkan URL bilah pencarian Q
<a name="embedded-q-bar-for-anonymous-users-step-3"></a>

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Di bagian berikut, Anda dapat menemukan cara menyematkan URL bilah pencarian Q dari langkah 3 di situs web atau halaman aplikasi Anda. Anda melakukan ini dengan [Amazon Quick Sight embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) ()JavaScript. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan bilah pencarian Q pada halaman HTML.
+ Masukkan parameter ke bilah pencarian Q.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Untuk membuat URL yang dapat disematkan di aplikasi, panggil operasi `GenerateEmbedUrlForAnonymousUser` API. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku hingga 10 jam. Operasi API menyediakan URL dengan `auth_code` nilai yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
}
```

Sematkan bilah pencarian Q di halaman web Anda dengan menggunakan [SDK penyematan Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. 

Untuk melakukan ini, pastikan bahwa domain untuk meng-host bilah pencarian Q yang disematkan ada di *daftar izinkan*, daftar domain yang disetujui untuk langganan Amazon Quick Sight Anda. Persyaratan ini melindungi data Anda dengan menjaga domain yang tidak disetujui dari hosting bilah pencarian Q yang disematkan. Untuk informasi selengkapnya tentang menambahkan domain untuk bilah pencarian Q yang disematkan, lihat [Mengelola domain dan](https://docs.aws.amazon.com/quicksight/latest/user/manage-qs-domains-and-embedding.html) menyematkan.

Saat Anda menggunakan Amazon Quick Sight Embedding SDK, bilah pencarian Q di halaman Anda diubah ukurannya secara dinamis berdasarkan status. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam bilah pencarian Q dan menerima panggilan balik dalam hal penyelesaian dan kesalahan pemuatan halaman. 

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini dibuat di server aplikasi Anda.

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

```
<!DOCTYPE html>
<html>

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

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

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

                const contentOptions = {
                    hideTopicName: false, 
                    theme: '<YOUR_THEME_ID>',
                    allowTopicSelection: true,
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                console.log("Do something when Q Search content expanded");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                console.log("Do something when Q Search content collapsed");
                                break;
                            }
                            case 'Q_SEARCH_SIZE_CHANGED': {
                                console.log("Do something when Q Search size changed");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something when the Q Search is loaded.");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when the Q Search fails loading.");
                                break;
                            }
                        }
                    }
                };
                const embeddedDashboardExperience = await embeddingContext.embedQSearchBar(frameOptions, contentOptions);
            };
        </script>
    </head>

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

</html>
```

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

```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

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

</html>
```

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat bilah pencarian Q yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

## Fungsi penyematan bilah pencarian Amazon Quick Sight Q opsional
<a name="embedded-q-bar-for-anonymous-users-step-4"></a>

**catatan**  
Bilah pencarian Amazon Quick Sight Q yang disematkan memberikan pengalaman Tanya Jawab Amazon Quick Sight klasik. Amazon Quick Sight terintegrasi dengan Amazon Q Business untuk meluncurkan pengalaman Tanya Jawab Generatif baru. Pengembang disarankan untuk menggunakan pengalaman Tanya Jawab Generatif yang baru. Untuk informasi selengkapnya tentang pengalaman Tanya Jawab Generatif yang disematkan, lihat [Menyematkan Amazon Q di Amazon Quick Sight Generative Q](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html) & A experience.

Fungsionalitas opsional berikut tersedia untuk bilah pencarian Q yang disematkan menggunakan SDK penyematan. 

### Memanggil tindakan bilah pencarian Q
<a name="w2aac35c27c21c43c31c17c21b7"></a>

Opsi berikut hanya didukung untuk penyematan bilah pencarian Q. 
+ Tetapkan pertanyaan bilah pencarian Q - Fitur ini mengirimkan pertanyaan ke bilah pencarian Q dan segera menanyakan pertanyaan. Ini juga secara otomatis membuka popover Q.

  ```
  qBar.setQBarQuestion('show me monthly revenue');
  ```
+ Tutup popover Q - Fitur ini menutup popover Q dan mengembalikan iframe ke ukuran bar pencarian Q asli.

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

Untuk informasi selengkapnya, lihat [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk).

# Menyematkan analitik menggunakan operasi GetDashboardEmbedURL dan GetSessionEmbedURL API
<a name="embedded-analytics-deprecated"></a>


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Operasi API berikut untuk menyematkan dasbor Amazon Quick Sight dan konsol Amazon Quick Sight telah digantikan oleh operasi GenerateEmbedUrlForAnonymousUser dan GenerateEmbedUrlForRegisteredUser API. Anda masih dapat menggunakannya untuk menyematkan analitik dalam aplikasi Anda, tetapi mereka tidak lagi dipertahankan dan tidak berisi fitur atau fungsionalitas penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html) aplikasi Anda
+ Operasi [GetDashboardEmbedUrl](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html)API menyematkan dasbor interaktif.
+ Operasi [GetSessionEmbedUrl](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetSessionEmbedUrl.html)API menyematkan konsol Amazon Quick Sight.

**Topics**
+ [

# Menyematkan dasbor untuk semua orang yang menggunakan GetDashboardEmbedURL (API lama)
](embedded-analytics-dashboards-with-anonymous-users-get.md)
+ [

# Menyematkan dasbor untuk pengguna terdaftar yang menggunakan GetDashboardEmbedUrl (API lama)
](embedded-analytics-dashboards-for-authenticated-users-get.md)
+ [

# Menyematkan konsol Amazon Quick Sight menggunakan GetSessionEmbedUrl (API lama)
](embedded-analytics-full-console-for-authenticated-users-get.md)

# Menyematkan dasbor untuk semua orang yang menggunakan GetDashboardEmbedURL (API lama)
<a name="embedded-analytics-dashboards-with-anonymous-users-get"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur dasbor Amazon Quick Sight yang disematkan untuk semua orang (pengguna yang tidak diautentikasi) menggunakan URL. GetDashboardEmbed

**Topics**
+ [

# Langkah 1: Siapkan izin
](embedded-analytics-dashboards-with-anonymous-users-get-step-1.md)
+ [

# Langkah 2: Dapatkan URL dengan kode otentikasi terlampir
](embedded-analytics-dashboards-with-anonymous-users-get-step-2.md)
+ [

# Langkah 3: Sematkan URL dasbor
](embedded-analytics-dashboards-with-anonymous-users-get-step-3.md)

# Langkah 1: Siapkan izin
<a name="embedded-analytics-dashboards-with-anonymous-users-get-step-1"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat mengetahui cara mengatur izin untuk aplikasi backend atau server web. Tugas ini membutuhkan akses administratif ke IAM.

Setiap pengguna yang mengakses dasbor mengambil peran yang memberi mereka akses dan izin Amazon Quick Sight ke dasbor. Untuk memungkinkan hal ini, buat peran IAM di AWS akun Anda. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya.

Kebijakan contoh berikut memberikan izin ini untuk digunakan. `IdentityType=ANONYMOUS` Agar pendekatan ini berhasil, Anda juga memerlukan paket sesi, atau harga kapasitas sesi, di AWS akun Anda. Jika tidak, ketika pengguna mencoba mengakses dasbor, kesalahan `UnsupportedPricingPlanException` dikembalikan. 

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

****  

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

------

Identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna untuk membuka dasbor. Contoh berikut menunjukkan peran yang disebut`QuickSightEmbeddingAnonymousPolicy`, yang memiliki kebijakan sampel sebelumnya sebagai sumber dayanya. 

Untuk informasi selengkapnya mengenai kebijakan kepercayaan, lihat [Kredensi keamanan sementara di IAM di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) Pengguna *IAM*.

# Langkah 2: Dapatkan URL dengan kode otentikasi terlampir
<a name="embedded-analytics-dashboards-with-anonymous-users-get-step-2"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan cara mengautentikasi atas nama pengunjung anonim dan mendapatkan URL dasbor yang dapat disematkan di server aplikasi Anda. 

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Contoh berikut melakukan otentikasi IAM atas nama pengguna. Ini melewati pengenal sebagai ID sesi peran unik. Kode ini berjalan di server aplikasi Anda.

------
#### [ 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 ]

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk mendapatkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**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 ]

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk mendapatkan URL dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**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 ]

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini ketika Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini saat Anda menggunakan Security Assertion Markup Language (SALL) untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GetDashboardEmbedURL`. 

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

`assume-role`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Jika Anda menggunakan mesin Microsoft Windows, gunakan `set` sebagai gantinya`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_dashboard_role/QuickSightEmbeddingAnonymousPolicy`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna yang berkunjung. Itu juga membuat setiap sesi terpisah dan berbeda. Jika Anda menggunakan array server web, misalnya untuk load balancing, dan sesi terhubung kembali ke server yang berbeda, sesi baru dimulai.

Untuk mendapatkan URL yang ditandatangani untuk dasbor, panggil `get-dashboard-embed-url` dari server aplikasi. Ini mengembalikan URL dasbor yang dapat disematkan. Contoh berikut menunjukkan cara mendapatkan URL untuk dasbor tertanam menggunakan panggilan sisi server untuk pengguna yang melakukan kunjungan anonim ke portal web atau aplikasi Anda.

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

Untuk informasi selengkapnya tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri. 

------

# Langkah 3: Sematkan URL dasbor
<a name="embedded-analytics-dashboards-with-anonymous-users-get-step-3"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat mengetahui bagaimana Anda dapat menggunakan [Amazon Quick Sight embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) untuk menyematkan URL dasbor dari langkah 2 di situs web atau halaman aplikasi Anda. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan dasbor pada halaman HTML.
+ Masukkan parameter ke dasbor.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Panggil operasi `GetDashboardEmbedUrl` API untuk mendapatkan URL yang dapat disematkan di aplikasi. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku selama 10 jam. Operasi API menyediakan URL dengan sebuah `auth_code` yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
}
```

Sematkan dasbor ini di halaman web Anda dengan menggunakan Amazon Quick Sight [Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam dasbor dan menerima panggilan balik dalam hal penyelesaian dan kesalahan pemuatan halaman. 

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini berada di server aplikasi Anda.

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

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat dasbor yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK QuickSight penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

# Menyematkan dasbor untuk pengguna terdaftar yang menggunakan GetDashboardEmbedUrl (API lama)
<a name="embedded-analytics-dashboards-for-authenticated-users-get"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara mengatur dasbor Amazon Quick Sight yang disematkan untuk pengguna terdaftar yang digunakan`GetDashboardEmbedUrl`.

**Topics**
+ [

# Langkah 1: Siapkan izin
](embedded-dashboards-for-authenticated-users-get-step-1.md)
+ [

# Langkah 2: Dapatkan URL dengan kode otentikasi terlampir
](embedded-dashboards-for-authenticated-users-get-step-2.md)
+ [

# Langkah 3: Sematkan URL dasbor
](embedded-dashboards-for-authenticated-users-get-step-3.md)

# Langkah 1: Siapkan izin
<a name="embedded-dashboards-for-authenticated-users-get-step-1"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

Di bagian berikut, Anda dapat mengetahui cara mengatur izin untuk aplikasi backend atau server web. Tugas ini membutuhkan akses administratif ke IAM.

Setiap pengguna yang mengakses dasbor mengambil peran yang memberi mereka akses dan izin Amazon Quick Sight ke dasbor. Untuk memungkinkan hal ini, buat peran IAM di AWS akun Anda. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya. Peran IAM perlu memberikan izin untuk mengambil dasbor. URLs Untuk ini, Anda menambahkan`quicksight:GetDashboardEmbedUrl`.

Kebijakan contoh berikut memberikan izin ini untuk digunakan dengan`IdentityType=IAM`. 

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

****  

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

------

Kebijakan contoh berikut memberikan izin untuk mengambil URL dasbor. Anda menggunakan kebijakan ini `quicksight:RegisterUser` jika Anda membuat pengguna pertama kali yang akan menjadi pembaca Amazon Quick Sight. 

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

****  

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

------

Jika Anda menggunakan `QUICKSIGHT` sebagai milik Anda `identityType` dan memberikan Nama Sumber Daya Amazon (ARN) pengguna, Anda juga perlu mengizinkan `quicksight:GetAuthCode` tindakan tersebut dalam kebijakan Anda. Kebijakan contoh berikut memberikan izin ini.

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

****  

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

------

Identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna dan menyediakan pengguna di Amazon Quick Sight. Contoh berikut menunjukkan peran yang disebut`embedding_quicksight_dashboard_role`, yang memiliki kebijakan sampel sebelumnya sebagai sumber dayanya. 

*Untuk informasi selengkapnya mengenai kebijakan kepercayaan untuk OpenID Connect atau otentikasi SAM, lihat bagian berikut dari Panduan Pengguna IAM:*
+ [Membuat peran untuk identitas web atau federasi OpenID Connect (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Membuat peran untuk federasi SAFL 2.0 (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

# Langkah 2: Dapatkan URL dengan kode otentikasi terlampir
<a name="embedded-dashboards-for-authenticated-users-get-step-2"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

Di bagian berikut, Anda dapat mengetahui cara mengautentikasi pengguna Anda dan mendapatkan URL dasbor yang dapat disematkan di server aplikasi Anda. 

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Melakukan langkah-langkah yang dijelaskan memastikan bahwa setiap penampil dasbor disediakan secara unik di Amazon Quick Sight. Ini juga memberlakukan pengaturan per pengguna, seperti keamanan tingkat baris dan default dinamis untuk parameter.

Contoh berikut melakukan otentikasi IAM atas nama pengguna. Kode ini berjalan di server aplikasi Anda.

------
#### [ 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 ]

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk mendapatkan URL untuk dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**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 ]

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk mendapatkan URL dasbor yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan dasbor. 

**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 ]

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini ketika Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini ketika Anda menggunakan SALL untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GetDashboardEmbedURL`. Jika Anda mengambil just-in-time pendekatan untuk menambahkan pengguna saat mereka pertama kali membuka dasbor, peran tersebut juga memerlukan izin yang diaktifkan. `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`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Jika Anda menggunakan mesin Microsoft Windows, gunakan `set` sebagai gantinya`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_dashboard_role/john.doe@example.com`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna. Ini juga mencegah pembatasan akses pengguna. *Throttling* adalah fitur keamanan yang mencegah pengguna yang sama mengakses Amazon Quick Sight dari beberapa lokasi. 

ID sesi peran juga menjadi nama pengguna di Amazon Quick Sight. Anda dapat menggunakan pola ini untuk menyediakan pengguna Anda di Amazon Quick Sight sebelumnya, atau untuk menyediakannya saat pertama kali mereka mengakses dasbor. 

Contoh berikut menunjukkan perintah CLI yang dapat Anda gunakan untuk menyediakan pengguna. Untuk informasi selengkapnya tentang [RegisterUser[DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html)](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html),, dan operasi Amazon Quick Sight API lainnya, lihat [referensi 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
```

Jika pengguna diautentikasi melalui Microsoft AD, Anda tidak perlu menggunakannya `RegisterUser` untuk mengaturnya. Sebagai gantinya, mereka harus berlangganan secara otomatis saat pertama kali mengakses Amazon Quick Sight. Untuk pengguna Microsoft AD, Anda dapat menggunakan `DescribeUser` untuk mendapatkan ARN pengguna.

Saat pertama kali pengguna mengakses Amazon Quick Sight, Anda juga dapat menambahkan pengguna ini ke grup tempat dasbor dibagikan. Contoh berikut menunjukkan perintah CLI untuk menambahkan pengguna ke grup.

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

Anda sekarang memiliki pengguna aplikasi Anda yang juga pengguna Amazon Quick Sight, dan yang memiliki akses ke dasbor. 

Terakhir, untuk mendapatkan URL yang ditandatangani untuk dasbor, panggil `get-dashboard-embed-url` dari server aplikasi. Ini mengembalikan URL dasbor yang dapat disematkan. Contoh berikut menunjukkan cara mendapatkan URL untuk dasbor tertanam menggunakan panggilan sisi server untuk pengguna yang diautentikasi melalui AWS Managed Microsoft AD atau IAM Identity Center.

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

Untuk informasi selengkapnya tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri. 

------

# Langkah 3: Sematkan URL dasbor
<a name="embedded-dashboards-for-authenticated-users-get-step-3"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

Di bagian berikut, Anda dapat mengetahui bagaimana Anda dapat menggunakan [Amazon Quick Sight embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) untuk menyematkan URL dasbor dari langkah 3 di situs web atau halaman aplikasi Anda. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan dasbor pada halaman HTML.
+ Masukkan parameter ke dasbor.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Panggil operasi `GetDashboardEmbedUrl` API untuk mendapatkan URL yang dapat disematkan di aplikasi. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku selama 10 jam. Operasi API menyediakan URL dengan sebuah `auth_code` yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
}
```

Sematkan dasbor ini di halaman web Anda dengan menggunakan [SDK penyematan Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam dasbor dan menerima panggilan balik dalam hal penyelesaian dan kesalahan pemuatan halaman. 

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini dibuat di server aplikasi Anda.

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

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat dasbor yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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

# Menyematkan konsol Amazon Quick Sight menggunakan GetSessionEmbedUrl (API lama)
<a name="embedded-analytics-full-console-for-authenticated-users-get"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Berlaku untuk: Enterprise Edition  | 


|  | 
| --- |
|    Pemirsa yang dituju: Pengembang Amazon Quick  | 

Di bagian berikut, Anda dapat menemukan informasi terperinci tentang cara memberikan pengalaman konsol Amazon Quick Sight di portal authoring bermerek khusus untuk pengguna terdaftar yang menggunakan API. `GetSessionEmbedUrl` 

**Topics**
+ [

# Langkah 1: Siapkan izin
](embedded-analytics-full-console-for-authenticated-users-get-step-1.md)
+ [

# Langkah 2: Dapatkan URL dengan kode otentikasi terlampir
](embedded-analytics-full-console-for-authenticated-users-get-step-2.md)
+ [

# Langkah 3: Sematkan URL sesi konsol
](embedded-analytics-full-console-for-authenticated-users-get-step-3.md)

# Langkah 1: Siapkan izin
<a name="embedded-analytics-full-console-for-authenticated-users-get-step-1"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

Di bagian berikut, Anda dapat mengetahui cara mengatur izin untuk aplikasi backend atau server web. Tugas ini membutuhkan akses administratif ke IAM.

Setiap pengguna yang mengakses Amazon Quick Sight mengambil peran yang memberi mereka akses Amazon Quick Sight dan izin ke sesi konsol. Untuk memungkinkan hal ini, buat peran IAM di AWS akun Anda. Kaitkan kebijakan IAM dengan peran untuk memberikan izin kepada pengguna mana pun yang mengasumsikannya. Tambahkan `quicksight:RegisterUser` izin untuk memastikan bahwa pembaca dapat mengakses Amazon Quick Sight dengan cara hanya-baca, dan tidak memiliki akses ke data atau kemampuan pembuatan lainnya. Peran IAM juga perlu memberikan izin untuk mengambil sesi konsol. URLs Untuk ini, Anda menambahkan`quicksight:GetSessionEmbedUrl`.

Kebijakan contoh berikut memberikan izin ini untuk digunakan dengan`IdentityType=IAM`. 

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

****  

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

------

Kebijakan contoh berikut memberikan izin untuk mengambil URL sesi konsol. Anda menggunakan kebijakan tanpa `quicksight:RegisterUser` jika Anda membuat pengguna sebelum mereka mengakses sesi yang disematkan.

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

****  

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

------

Jika Anda menggunakan `QUICKSIGHT` sebagai milik Anda `identityType` dan memberikan Nama Sumber Daya Amazon (ARN) pengguna, Anda juga perlu mengizinkan `quicksight:GetAuthCode` tindakan tersebut dalam kebijakan Anda. Kebijakan contoh berikut memberikan izin ini.

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

****  

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

------

Identitas IAM aplikasi Anda harus memiliki kebijakan kepercayaan yang terkait dengannya untuk memungkinkan akses ke peran yang baru saja Anda buat. Ini berarti bahwa ketika pengguna mengakses aplikasi Anda, aplikasi Anda dapat mengambil peran atas nama pengguna dan menyediakan pengguna di Amazon Quick Sight. Contoh berikut menunjukkan peran yang disebut`embedding_quicksight_console_session_role`, yang memiliki kebijakan sampel sebelumnya sebagai sumber dayanya. 

*Untuk informasi selengkapnya mengenai kebijakan kepercayaan untuk OpenID Connect atau otentikasi SAM, lihat bagian berikut dari Panduan Pengguna IAM:*
+ [Membuat peran untuk identitas web atau federasi OpenID Connect (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Membuat peran untuk federasi SAFL 2.0 (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

# Langkah 2: Dapatkan URL dengan kode otentikasi terlampir
<a name="embedded-analytics-full-console-for-authenticated-users-get-step-2"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

Di bagian berikut, Anda dapat mengetahui cara mengautentikasi pengguna Anda dan mendapatkan URL sesi konsol yang dapat disematkan di server aplikasi Anda. 

Saat pengguna mengakses aplikasi Anda, aplikasi akan mengambil peran IAM atas nama pengguna. Kemudian menambahkan pengguna ke Amazon Quick Sight, jika pengguna itu belum ada. Selanjutnya, ia melewati pengenal sebagai ID sesi peran unik. 

Melakukan langkah-langkah yang dijelaskan memastikan bahwa setiap penampil sesi konsol disediakan secara unik di Amazon Quick Sight. Ini juga memberlakukan pengaturan per pengguna, seperti keamanan tingkat baris dan default dinamis untuk parameter.

Contoh berikut melakukan otentikasi IAM atas nama pengguna. Kode ini berjalan di server aplikasi Anda.

------
#### [ 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 ]

Contoh berikut menunjukkan JavaScript (Node.js) yang dapat Anda gunakan di server aplikasi untuk mendapatkan URL untuk sesi konsol yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan sesi konsol. 

**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 ]

Contoh berikut menunjukkan kode.NET/C\$1 yang dapat Anda gunakan di server aplikasi untuk mendapatkan URL sesi konsol yang disematkan. Anda dapat menggunakan URL ini di situs web atau aplikasi Anda untuk menampilkan konsol. 

**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 ]

Untuk mengambil peran, pilih salah satu operasi API AWS Security Token Service (AWS STS) berikut:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Gunakan operasi ini ketika Anda menggunakan identitas IAM untuk mengambil peran.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Gunakan operasi ini ketika Anda menggunakan penyedia identitas web untuk mengautentikasi pengguna Anda. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Gunakan operasi ini ketika Anda menggunakan SALL untuk mengautentikasi pengguna Anda.

Contoh berikut menunjukkan perintah CLI untuk mengatur peran IAM. Peran harus mengaktifkan izin untuk`quicksight:GetSessionEmbedUrl`. Jika Anda mengambil just-in-time pendekatan untuk menambahkan pengguna saat mereka pertama kali membuka Amazon Quick Sight, peran tersebut juga memerlukan izin yang diaktifkan. `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`Operasi mengembalikan tiga parameter output: kunci akses, kunci rahasia, dan token sesi. 

**catatan**  
Jika Anda mendapatkan `ExpiredToken` kesalahan saat memanggil `AssumeRole` operasi, ini mungkin karena sebelumnya `SESSION TOKEN` masih dalam variabel lingkungan. Hapus ini dengan mengatur variabel berikut:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

Contoh berikut menunjukkan cara mengatur ketiga parameter ini di CLI. Jika Anda menggunakan mesin Microsoft Windows, gunakan `set` sebagai gantinya`export`.

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

Menjalankan perintah ini akan menetapkan ID sesi peran pengguna yang mengunjungi situs web Anda`embedding_quicksight_console_session_role/john.doe@example.com`. ID sesi peran terdiri dari nama peran dari `role-arn` dan `role-session-name` nilainya. Menggunakan ID sesi peran unik untuk setiap pengguna memastikan bahwa izin yang sesuai ditetapkan untuk setiap pengguna. Ini juga mencegah pembatasan akses pengguna. Throttling adalah fitur keamanan yang mencegah pengguna yang sama mengakses Amazon Quick Sight dari beberapa lokasi. 

ID sesi peran juga menjadi nama pengguna di Amazon Quick Sight. Anda dapat menggunakan pola ini untuk menyediakan pengguna Anda di Amazon Quick Sight sebelumnya, atau untuk menyediakannya saat pertama kali mereka mengakses sesi konsol. 

Contoh berikut menunjukkan perintah CLI yang dapat Anda gunakan untuk menyediakan pengguna. Untuk informasi selengkapnya tentang [RegisterUser[DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html)](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html),, dan operasi Amazon Quick Sight API lainnya, lihat [referensi 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
```

Jika pengguna diautentikasi melalui Microsoft AD, Anda tidak perlu menggunakannya `RegisterUser` untuk mengaturnya. Sebagai gantinya, mereka harus berlangganan secara otomatis saat pertama kali mengakses Amazon Quick Sight. Untuk pengguna Microsoft AD, Anda dapat menggunakan `DescribeUser` untuk mendapatkan ARN pengguna.

Pertama kali pengguna mengakses Amazon Quick Sight, Anda juga dapat menambahkan pengguna ini ke grup yang sesuai. Contoh berikut menunjukkan perintah CLI untuk menambahkan pengguna ke grup.

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

Anda sekarang memiliki pengguna aplikasi Anda yang juga pengguna Amazon Quick Sight, dan yang memiliki akses ke sesi konsol Amazon Quick Sight. 

Terakhir, untuk mendapatkan URL yang ditandatangani untuk sesi konsol, panggil `get-session-embed-url` dari server aplikasi. Ini mengembalikan URL sesi konsol yang dapat disematkan. Contoh berikut menunjukkan cara mendapatkan URL untuk sesi konsol tertanam menggunakan panggilan sisi server untuk pengguna yang diautentikasi melalui AWS Managed Microsoft AD atau Single Sign-on (IAM Identity Center).

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

Untuk informasi selengkapnya tentang penggunaan operasi ini, lihat [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetSessionEmbedUrl.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetSessionEmbedUrl.html). Anda dapat menggunakan ini dan operasi API lainnya dalam kode Anda sendiri. 

------

# Langkah 3: Sematkan URL sesi konsol
<a name="embedded-analytics-full-console-for-authenticated-users-get-step-3"></a>

**penting**  
Amazon Quick Sight memiliki fitur baru APIs untuk menyematkan analitik: `GenerateEmbedUrlForAnonymousUser` dan`GenerateEmbedUrlForRegisteredUser`.  
Anda masih dapat menggunakan `GetDashboardEmbedUrl` dan `GetSessionEmbedUrl` APIs untuk menyematkan dasbor dan konsol Amazon Quick Sight, tetapi mereka tidak berisi kemampuan penyematan terbaru. Untuk pengalaman up-to-date penyematan terbaru, lihat [Menyematkan analitik Amazon Quick Sight ke dalam aplikasi Anda](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

Di bagian berikut, Anda dapat mengetahui bagaimana Anda dapat menggunakan [Amazon Quick Sight embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) untuk menyematkan URL sesi konsol dari langkah 3 di situs web atau halaman aplikasi Anda. Dengan SDK, Anda dapat melakukan hal berikut: 
+ Tempatkan sesi konsol pada halaman HTML.
+ Masukkan parameter ke sesi konsol.
+ Menangani status kesalahan dengan pesan yang disesuaikan dengan aplikasi Anda.

Panggil operasi `GetSessionEmbedUrl` API untuk mendapatkan URL yang dapat disematkan di aplikasi. URL ini berlaku selama 5 menit, dan sesi yang dihasilkan berlaku selama 10 jam. Operasi API menyediakan URL dengan sebuah `auth_code` yang memungkinkan sesi masuk tunggal. 

Berikut ini menunjukkan contoh respons dari`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"
}
```

Sematkan sesi konsol ini di halaman web Anda dengan menggunakan Amazon Quick Sight [Embedding SDK](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) atau dengan menambahkan URL ini ke dalam iframe. Jika Anda menetapkan nomor tinggi dan lebar tetap (dalam piksel), Amazon Quick Sight menggunakannya dan tidak mengubah visual Anda saat jendela Anda berubah ukuran. Jika Anda menetapkan tinggi dan lebar persen relatif, Amazon Quick Sight menyediakan tata letak responsif yang dimodifikasi saat ukuran jendela Anda berubah. Dengan menggunakan Amazon Quick Sight Embedding SDK, Anda juga dapat mengontrol parameter dalam sesi konsol dan menerima callback dalam hal penyelesaian dan kesalahan pemuatan halaman. 

Contoh berikut menunjukkan cara menggunakan URL yang dihasilkan. Kode ini dibuat di server aplikasi Anda.

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

Agar contoh ini berfungsi, pastikan untuk menggunakan Amazon Quick Sight Embedding SDK untuk memuat sesi konsol yang disematkan di situs web Anda menggunakan. JavaScript Untuk mendapatkan salinan Anda, lakukan salah satu hal berikut:
+ Unduh [SDK penyematan Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) dari. GitHub Repositori ini dikelola oleh sekelompok pengembang Amazon Quick Sight.
+ Unduh versi SDK penyematan terbaru dari. [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)
+ Jika Anda menggunakan `npm` untuk JavaScript dependensi, unduh dan instal dengan menjalankan perintah berikut.

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