

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Análisis integrados para Amazon Quick Sight
Análisis integrados

**importante**  
Amazon Quick Sight tiene nuevas operaciones de API para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando las operaciones `GetDashboardEmbedUrl` y las de la `GetSessionEmbedUrl` API para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener más información sobre la integración mediante las antiguas operaciones de la API, consulte [Integración de análisis mediante las operaciones de la API GetDashboardEmbedURL y GetSessionEmbedURL](embedded-analytics-deprecated.md).


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

Con los análisis integrados de Amazon Quick Sight, puede integrar sin problemas experiencias basadas en datos en sus aplicaciones de software. Puede diseñar los componentes integrados para que se adapten a su marca. Esta capacidad lleva la potencia de Amazon Quick Sight a sus usuarios finales, donde pueden analizar los datos e interactuar con ellos sin tener que salir de la aplicación. La mejora de la experiencia del usuario mediante la reducción de la complejidad cognitiva ofrece a los usuarios una mejor oportunidad de lograr una mayor comprensión y eficacia. 

Amazon Quick Sight admite la incrustación de los siguientes elementos: 
+ Consola Amazon Quick Sight (experiencia de creación completa para usuarios registrados)
+ Imágenes y paneles de control de Amazon Quick Sight (para usuarios registrados, usuarios anónimos y usuarios finales públicos)
+ Barra de búsqueda Amazon Quick Sight Q (para usuarios registrados y usuarios anónimos)

Con una consola Amazon Quick Sight integrada, incorporas la experiencia completa de Amazon Quick Sight. De este modo, podrá utilizar las herramientas de creación de Amazon Quick Sight como parte de su aplicación, en lugar de hacerlo en el contexto del sitio web Consola de administración de AWS o de un sitio web independiente. Los usuarios de una consola Amazon Quick Sight integrada deben estar registrados como autores o administradores de Amazon Quick Sight en su Cuenta de AWS. También deben autenticarse en el mismo Cuenta de AWS, mediante cualquiera de los métodos de autenticación compatibles con Amazon Quick Sight. 

Con un panel de control o imagen de Amazon Quick Sight integrado, los lectores obtienen la misma funcionalidad e interactividad que en un panel de control o imagen publicado. Para usar un panel o un elemento visual integrado, los lectores (espectadores) pueden incluir cualquiera de los siguientes elementos:
+ Los usuarios de Amazon Quick Sight se autenticaron en usted Cuenta de AWS mediante cualquier método compatible con Amazon Quick Sight.
+ Visitantes no autenticados de un sitio web o una aplicación: esta opción requiere paquetes de sesiones con un precio por capacidad. Para obtener información sobre los tipos de suscripción, consulte [Descripción de las suscripciones y funciones de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/user-types.html#subscription-role-mapping).
+ Varios usuarios finales visualizan una pantalla en monitores o pantallas grandes mediante acceso programático.

Si tu aplicación también reside en AWS, no es necesario que resida en el mismo Cuenta de AWS lugar que la suscripción a Amazon Quick Sight. Sin embargo, la aplicación debe poder asumir la función AWS Identity and Access Management (IAM) que utilizas para las llamadas a la API. 

Antes de poder incrustar contenido, asegúrese de utilizar la edición Amazon Quick Sight Enterprise en el Cuenta de AWS lugar donde vaya a utilizar la incrustación. 

La incrustación de Amazon Quick Sight está disponible en todas las versiones compatibles Regiones de AWS. 

**Topics**
+ [

# Integración de los análisis de Amazon Quick Sight en sus aplicaciones
](embedding-overview.md)
+ [

# Incrustar activos personalizados de Amazon Quick Sight en su aplicación
](customize-and-personalize-embedded-analytics.md)
+ [

# Incrustar imágenes y paneles de Amazon Quick Sight con un código de inserción de 1 clic
](1-click-embedding.md)
+ [

# Integración con Amazon Quick Sight APIs
](embedded-analytics-api.md)

# Integración de los análisis de Amazon Quick Sight en sus aplicaciones
Incrustación de análisis en sus aplicaciones


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 

Para incrustar los análisis, puede ejecutar la API de incrustación de Amazon Quick Sight para generar el código de inserción. Como alternativa, en el caso de los paneles, puede copiar un código de inserción al compartir el panel en Amazon Quick Sight. Cada opción se describe a continuación.

## Incrustación en un clic para usuarios registrados


Cuando comparte un panel con usuarios registrados en su cuenta, puede copiar un código de integración para el panel y pegarlo en el HTML de su aplicación interna. 

El uso de la incrustación empresarial con 1 clic es la mejor opción si quieres incrustar un panel de Amazon Quick Sight en una aplicación interna en la que los usuarios necesitan autenticarse. Al copiar el código de integración, se obtiene un código de inserción estático que no cambia.

Para obtener más información, consulte [Incrustar imágenes y paneles de Amazon Quick Sight para usuarios registrados con un código de inserción de 1 clic](embedded-analytics-1-click.md).

## Integración con Amazon Quick Sight APIs


La integración con la API de Amazon Quick Sight es la mejor opción si desea integrar la experiencia de Amazon Quick Sight en una aplicación interna en la que los usuarios deben autenticarse o en una aplicación externa a la que cualquiera pueda acceder. Cuando se utilizan las operaciones de la API de integración para generar un código de integraciónn, se obtiene un código de un solo uso.

Para obtener más información, consulte [Integración con Amazon Quick Sight APIs](embedded-analytics-api.md).

# Incrustar activos personalizados de Amazon Quick Sight en su aplicación
Incrustación de activos personalizados

Puede utilizar los análisis integrados de Amazon Quick Sight para integrar en su aplicación activos personalizados de Amazon Quick Sight que se adapten a las necesidades de su empresa. Para los cuadros de mando y los elementos visuales integrados, los autores de Amazon Quick Sight pueden añadir filtros y desgloses a los que los lectores pueden acceder mientras navegan por el panel o el elemento visual. Los desarrolladores de Amazon Quick Sight también pueden utilizar Amazon Quick Sight SDKs para crear integraciones más estrechas entre sus aplicaciones SaaS y sus activos integrados de Amazon Quick Sight para añadir acciones de devolución de llamadas a puntos de datos a las imágenes de un panel de control durante el tiempo de ejecución.

Para obtener más información sobre Amazon Quick Sight SDKs, consulte `amazon-quicksight-embedding-sdk` on [GitHub](https://github.com/awslabs/amazon-quicksight-embedding-sdk)o [NPM.](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk)

A continuación, encontrará descripciones sobre cómo utilizar Amazon Quick Sight SDKs para personalizar los análisis integrados de Amazon Quick Sight.

**Topics**
+ [

# Añadir acciones de devolución de llamada integradas en tiempo de ejecución en Amazon Quick Sight
](embedding-custom-actions-callback.md)
+ [

# Filtrado de datos en tiempo de ejecución para paneles e imágenes integrados de Amazon Quick Sight
](embedding-runtime-filtering.md)
+ [

# Personalice la apariencia de los paneles y elementos visuales integrados de Amazon Quick Sight
](embedding-runtime-theming.md)
+ [

# Uso del SDK de incrustación de Amazon Quick Sight para permitir enlaces compartibles a vistas de paneles integradas
](embedded-view-sharing.md)

# Añadir acciones de devolución de llamada integradas en tiempo de ejecución en Amazon Quick Sight
Llamada de retorno a puntos de datos integrados

Utilice acciones de devolución de llamadas de puntos de datos integradas para crear integraciones más estrechas entre su aplicación de software como servicio (SaaS) y sus paneles y elementos visuales integrados de Amazon Quick Sight. Los desarrolladores pueden registrar puntos de datos para recuperarlos con el SDK de incrustación de Amazon Quick Sight. Al registrar una acción de devolución de llamada para un elemento visual, los lectores pueden seleccionar un punto de datos del elemento visual para recibir una devolución de llamada que proporcione datos específicos del punto de datos seleccionado. Esta información se puede usar para marcar registros clave, compilar datos sin procesar específicos del punto de datos, capturar registros y compilar datos para los procesos de backend.

No se admiten las llamadas integradas en el contenido del elemento visual personalizado, los cuadros de texto o información.

Antes de empezar a registrar los puntos de datos para la devolución de llamadas, actualice el SDK de integración a la versión 2.3.0. Para obtener más información sobre el uso del SDK de incrustación de Amazon Quick Sight, consulte [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk)la GitHub

Se puede registrar una devolución de llamada a un punto de datos en uno o más elementos visuales en tiempo de ejecución mediante el SDK de Amazon Quick Sight. También puede registrar una devolución de llamada a un punto de datos para cualquier interacción compatible con la estructura de la API. [VisualCustomAction](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualCustomAction.html) Esto permite que la devolución de llamada a los puntos de datos se inicie cuando el usuario selecciona el punto de datos en el elemento visual o cuando el punto de datos se selecciona en el menú contextual del punto de datos. En el siguiente ejemplo, se registra una devolución de llamada a un punto de datos que el lector inicia cuando selecciona un punto de datos en el elemento 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);
```

También puede configurar el ejemplo anterior para que inicie la devolución de llamada a los puntos de datos cuando el usuario abra el menú contextual. Para hacer esto con el ejemplo anterior, defina el valor de `actionTrigger` en `ActionTrigger.DATA_POINT_MENU`.

Una vez registrada la devolución de llamada a un punto de datos, se aplica a la mayoría de los puntos de datos de los elementos visuales especificados. Las devoluciones de llamadas no se aplican a los totales ni a los subtotales de los elementos visuales. Cuando un lector interactúa con un punto de datos, se `CALLBACK_OPERATION_INVOKED` envía un mensaje al SDK de incrustación de Amazon Quick Sight. El controlador `onMessage` captura este mensaje. El mensaje contiene los valores sin procesar y mostrar de toda la fila de datos asociada al punto de datos seleccionado. También contiene los metadatos de todas las columnas del elemento visual en la que se encuentra el punto de datos. A continuación se muestra un ejemplo de un mensaje `CALLBACK_OPERATION_INVOKED`.

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

# Filtrado de datos en tiempo de ejecución para paneles e imágenes integrados de Amazon Quick Sight
Filtración en tiempo de ejecución

Puede utilizar los métodos de filtrado del SDK de incrustación de Amazon Quick Sight para aprovechar la potencia de los filtros de Amazon Quick Sight en su aplicación de software como servicio (SaaS) en tiempo de ejecución. Los filtros de tiempo de ejecución permiten a los propietarios de empresas integrar su aplicación con sus paneles y elementos visuales integrados de Amazon Quick Sight. Para ello, cree controles de filtro personalizados en su aplicación y aplique valores predeterminados de filtros en función de los datos de su aplicación. De este modo, los desarrolladores pueden personalizar las configuraciones de los filtros para los usuarios finales en tiempo de ejecución.

Los desarrolladores pueden crear, consultar, actualizar y eliminar los filtros de Amazon Quick Sight en un panel integrado o en un elemento visual de su aplicación con el SDK de incrustación de Amazon Quick Sight. Cree objetos de filtrado de Amazon Quick Sight en su aplicación con el modelo de [FilterGroup](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterGroup.html)datos y aplíquelos a cuadros de mando e imágenes integrados mediante los métodos de filtrado. Para obtener más información sobre el uso del SDK de incrustación de Amazon Quick Sight, consulte [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk)la GitHub

**Requisitos previos**

Antes de empezar, asegúrese de utilizar la versión 2.5.0 o superior del SDK de incrustación de Amazon Quick Sight.

## Terminología y conceptos


La siguiente terminología puede resultar útil cuando trabaje con el filtrado de tiempo de ejecución incrustado.
+ *Grupo de filtros*: grupo de filtros individuales. Los filtros que se encuentran dentro de un `FilterGroup` están conectados entre sí mediante el operador OR. Los filtros incluidos en a [FilterGroup](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterGroup.html)se aplican a las mismas hojas o imágenes.
+ *Filtro*: un filtro único. El filtro puede ser de categoría, numérico o de fecha y hora. Para obtener más información sobre filtros, consulte [Filtro](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html).

## Configuración


Antes de comenzar, asegúrese de que tiene preparados los activos y la información que se indican a continuación.
+ El identificador de la hoja a la que desea aplicar el ámbito de `FilterGroup`. Esto se puede obtener con el método `getSheets` del SDK de incrustación.
+ El identificador de columna y el conjunto de datos del conjunto de datos que desea filtrar. Esto se puede obtener mediante la operación de la [DescribeDashboardDefinition](https://docs.aws.amazon.com/APIReference/API_DescribeDashboardDefinition.html)API.

  En función del tipo de columna que use, es posible que haya restricciones en cuanto a los tipos de filtro que se pueden agregar a un activo incrustado. Para obtener más información sobre las restricciones de los filtros, consulte [Filtrar](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html).
+ El identificador visual del elemento visual al que desea aplicar el ámbito de `FilterGroup`, si corresponde. Esto se puede obtener al usar el método `getSheetVisuals` del SDK de incrustación.

  Además del método `getSheetVisuals`, el `FilterGroup` que agregue solo puede tener como ámbito la hoja actualmente seleccionada.

Para usar esta función, ya debe tener un panel de control o un elemento visual integrado en su aplicación a través del SDK de incrustación de Amazon Quick Sight. Para obtener más información sobre el uso del SDK de incrustación de Amazon Quick Sight, consulte [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk)la GitHub

## Interfaz del método del SDK


**Métodos getter de incrustación del panel**

En la siguiente tabla se describen los diferentes métodos getter de incrustación de panel que pueden usar los desarrolladores.


| Método | Description (Descripción) | 
| --- | --- | 
|  `getFilterGroupsForSheet(sheetId: string) `  |  Devuelve todo lo FilterGroups que se encuentra actualmente dentro del ámbito a la hoja que se proporciona en el parámetro.  | 
|  `getFilterGroupsForVisual(sheetId: string, visualId: string)`  |  Devuelve todos los `FilterGroups` que tienen como ámbito el elemento visual que se proporciona en el parámetro.  | 

Si la hoja que se proporciona en el parámetro no es la hoja actualmente seleccionada del panel incrustado, los métodos anteriores devolverán un error.

**Métodos getter de incrustación de elemento visual**

En la siguiente tabla se describen los diferentes métodos getter de incrustación de elemento visual que pueden usar los desarrolladores.


| Método | Description (Descripción) | 
| --- | --- | 
|  `getFilterGroups()`  |  Devuelve todos los `FilterGroups` que actualmente tienen como ámbito el elemento visual incrustado.  | 

**Métodos Setter**

En la siguiente tabla se describen los diferentes métodos setter que los desarrolladores pueden usar para la incrustación de paneles o elementos visuales.


| Método | Description (Descripción) | 
| --- | --- | 
|  `addFilterGroups(filterGroups: FilterGroup[])`  |  Agrega y aplica lo suministrado **FilterGroups**al panel de control o imagen incrustado. Se devuelve un mensaje `ResponseMessage` que indica si la incorporación se realizó correctamente.  | 
|  `updateFilterGroups(filterGroups: FilterGroup[])`  |  Actualiza `FilterGroups` en la experiencia incrustada que contiene el mismo `FilterGroupId` que el `FilterGroup` que se proporciona en el parámetro. Se devuelve un mensaje `ResponseMessage` que indica si la actualización se realizó correctamente.  | 
|  `removeFilterGroups(filterGroupsOrIds: FilterGroup[] \| string[])`  |  Quita lo suministrado FilterGroups del tablero y devuelve un `ResponseMessage` que indica si el intento de extracción se ha realizado correctamente.  | 

El `FilterGroup` que se proporciona debe tener como ámbito los elementos visuales o las hojas incrustados actualmente seleccionados.

# Personalice la apariencia de los paneles y elementos visuales integrados de Amazon Quick Sight
Creación de temas en tiempo de ejecución

Puede utilizar el SDK de incrustación de Amazon Quick Sight (versión 2.5.0 y superior) para realizar cambios en la temática de los paneles y elementos visuales de Amazon Quick Sight integrados durante el tiempo de ejecución. La tematización en tiempo de ejecución facilita la integración de la aplicación de software como servicio (SaaS) con los activos integrados de Amazon Quick Sight. La tematización en tiempo de ejecución le permite sincronizar el tema del contenido incrustado con los temas de la aplicación principal en la que están integrados sus activos de Amazon Quick Sight. También puede utilizar la creación de temas en tiempo de ejecución para agregar opciones de personalización para los lectores. Los cambios de creación de temas se pueden aplicar a los activos incrustados al inicializarlos o durante toda la vida útil del elemento visual o el panel incrustados.

Para obtener más información sobre los temas, consulte [Uso de temas en Amazon Quick Sight](themes-in-quicksight.md). Para obtener más información sobre el uso del SDK de incrustación de Amazon Quick Sight, consulte [amazon-quicksight-embedding-sdk](https://github.com/awslabs/amazon-quicksight-embedding-sdk)la GitHub

**Requisitos previos**

Antes de empezar, asegúrese de que cumple los requisitos previos que se indican a continuación.
+ Está utilizando la versión 2.5.0 o superior del SDK de incrustación de Amazon Quick Sight.
+ Dispone de permisos para acceder al tema con el que quiere trabajar. Para conceder permisos a un tema en Amazon Quick Sight, realice una llamada a la `UpdateThemePermissions` API o utilice el icono **Compartir** situado junto al tema en el editor de análisis de la consola Amazon Quick Sight.

## Terminología y conceptos


La siguiente terminología puede resultar útil cuando se trabaja con temas de tiempo de ejecución incrustados.
+ *Tema*: conjunto de ajustes que puede aplicar a varios análisis y paneles que cambian la forma en que se muestra el contenido.
+ *ThemeConfiguration*— Un objeto de configuración que contiene todas las propiedades de visualización de un tema.
+ *Anulación del tema*: objeto `ThemeConfiguration` que se aplica al tema activo para anular algunos o todos los aspectos de la visualización del contenido.
+ *ARN del tema: un* nombre de recurso de Amazon (ARN) que identifica un tema de Amazon Quick Sight. A continuación se muestra un ejemplo de ARN de tema personalizado.

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

  Los temas de inicio proporcionados por Amazon Quick Sight no tienen una región en su ARN de tema. A continuación, se muestra un ejemplo de ARN de tema de inicio.

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

## Configuración


Asegúrese de disponer de la información que se indica a continuación para empezar a trabajar con la creación de temas en tiempo de ejecución.
+ El tema ARNs de los temas que quieres usar. Puede elegir un tema existente, o bien puede crear uno nuevo. Para obtener una lista de todos los temas y temas ARNs de tu cuenta de Amazon Quick Sight, realiza una llamada a la operación de la [ListThemes](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListThemes.html)API. Para obtener información sobre los temas preestablecidos de Amazon Quick Sight, consulte[Establecer un tema predeterminado para los análisis de Amazon Quick con Amazon Quick APIs](customizing-quicksight-default-theme.md).
+ Si usa la incrustación de usuarios registrados, asegúrese de que el usuario tenga acceso a los temas que desea usar.

  Si utiliza la incrustación de usuarios anónimos, pase una lista de temas ARNs al `AuthorizedResourceArns` parámetro de la `GenerateEmbedUrlForAnonymousUser` API. Los usuarios anónimos tienen acceso a cualquier tema que aparezca en el parámetro `AuthorizedResourceArns`.

## Interfaz del método del SDK


**Métodos setter**

En la siguiente tabla se describen los diferentes métodos setter que los desarrolladores pueden usar para la creación de temas en tiempo de ejecución.


| Método | Description (Descripción) | 
| --- | --- | 
|  `setTheme(themeArn: string)`  |  Sustituye el tema activo de un panel o elemento visual por otro tema. Si se aplica, se elimina la anulación del tema. Se devuelve un error si no tiene acceso al tema o si el tema no existe.  | 
|  `setThemeOverride(themeOverride: ThemeConfiguration)`  |  Establece una `ThemeConfiguration` dinámica para anular el tema activo actual. Esto reemplaza la anulación del tema previamente establecida. Los valores que no se proporcionen en el nuevo `ThemeConfiguration` se establecen de forma predeterminada con los valores del tema actualmente activo. Se devuelve un error si el `ThemeConfiguration` proporcionado no es válido.  | 

## Inicialización del contenido incrustado con un tema


Para inicializar un elemento visual o un panel incrustado con un tema no predeterminado, defina un objeto `themeOptions` en los parámetros `DashboardContentOptions` o `VisualContentOptions` y establezca la propiedad `themeArn` de `themeOptions` con el ARN del tema deseado.

En el siguiente ejemplo, se inicializa un panel incrustado con el tema `MIDNIGHT`.

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

const embeddingContext = await createEmbeddingContext();

const {
    embedDashboard,
} = embeddingContext;

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

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

## Inicialización del contenido incrustado con una anulación de tema


Los desarrolladores pueden utilizar anulaciones de tema para definir el tema de un elemento visual o panel incrustado en tiempo de ejecución. Esto permite que el panel o el elemento visual hereden un tema de una aplicación de terceros sin necesidad de preconfigurar un tema en Amazon Quick Sight. Para inicializar un elemento visual o panel incrustado con una anulación de tema, establezca la propiedad `themeOverride` de `themeOptions` con los parámetros `DashboardContentOptions` o `VisualContentOptions`. En el siguiente ejemplo, se anula la fuente del tema de un panel y se pasa de la fuente predeterminada a `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);
```

## Inicialización del contenido incrustado con temas precargados


Los desarrolladores pueden configurar un conjunto de temas de panel para que se carguen previamente en el momento de la inicialización. Esto resulta especialmente útil para cambiar rápidamente entre diferentes vistas, como, por ejemplo, entre los modos oscuro y claro. Los elementos visuales o paneles incrustados se pueden inicializar con hasta 5 temas precargados. Para usar temas precargados, establezca la propiedad `preloadThemes` en `DashboardContentOptions` o `VisualContentOptions` con una matriz de hasta 5 `themeArns`. En el siguiente ejemplo, se precargan los temas de inicio `Midnight` y `Rainier` en un panel.

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

# Uso del SDK de incrustación de Amazon Quick Sight para permitir enlaces compartibles a vistas de paneles integradas
Uso compartido de vistas incrustadas

Los desarrolladores de Amazon Quick Sight pueden usar el SDK de incrustación de Amazon Quick Sight (versión 2.8.0 y superior) para permitir a los lectores de los paneles integrados recibir y distribuir enlaces que se pueden compartir a su vista de un panel integrado. Los desarrolladores pueden utilizar la incrustación de paneles o consolas para generar un enlace compartible a la página de su aplicación con la referencia de Amazon Quick Sight encapsulada mediante el SDK de incrustación de Amazon Quick Sight. A continuación, los lectores de Amazon Quick Sight pueden enviar este enlace para compartir a sus compañeros. Cuando su compañero accede al enlace compartido, se le dirige a la página de la aplicación que contiene el panel de control integrado de Amazon Quick Sight. Los desarrolladores también pueden generar y guardar enlaces compartibles de vistas de paneles que se pueden usar como marcadores para los lectores anónimos de Amazon Quick Sight cuando utilizan la incrustación anónima.

**Requisitos previos**

Antes de empezar, asegúrese de utilizar la versión 2.8.0 o superior del SDK de incrustación de Amazon Quick Sight

**Topics**
+ [

# Habilitación de la configuración de `SharedView` funciones para el análisis integrado de Amazon Quick Sight
](embedded-view-sharing-set-up.md)
+ [

# Creación de una vista compartida con la `createSharedView` API Amazon Quick Sight
](embedded-view-sharing-sdk-create.md)
+ [

# Consumir una vista compartida de Amazon Quick Sight
](embedded-view-sharing-sdk-consume.md)

# Habilitación de la configuración de `SharedView` funciones para el análisis integrado de Amazon Quick Sight
Habilitación de vistas compartidas

Al crear una instancia incrustada con la API Amazon Quick Sight, defina el valor de `SharedView` en la `FeatureConfigurations` carga útil en`true`, como se muestra en el siguiente ejemplo. `SharedView`anula las `StatePersistence` configuraciones de los usuarios registrados que acceden a los paneles integrados. Si un usuario del panel tiene `StatePersistence` deshabilitado y `SharedView` habilitado, su estado se mantendrá.

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

# Creación de una vista compartida con la `createSharedView` API Amazon Quick Sight
Creación de una vista compartida

Después de actualizar el SDK de incrustación a la versión 2.8.0 o superior, utilice la API `createSharedView` para crear una nueva vista compartida. Registre los datos de `sharedViewId` y `dashboardId` que devuelve la operación. El siguiente ejemplo crea una nueva vista compartida.

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

Solo se puede llamar a `createSharedView` cuando un usuario visualiza un panel. Para crear una vista compartida específica para una consola, asegúrese de que los usuarios se encuentren en la página del panel antes de activar la acción `createSharedView`. Para ello, use el evento `PAGE_NAVIGATION` que se muestra en el ejemplo siguiente.

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

# Consumir una vista compartida de Amazon Quick Sight


Tras crear una nueva vista compartida, use el SDK de incrustación para que otros usuarios puedan consumir la vista compartida. Los ejemplos siguientes configuran una vista compartida consumible para un panel integrado en Amazon Quick Sight.

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

Agregue la URL `sharedViewId` a la URL incrustada, en` /views/{viewId}`, y muestre dicha URL a sus usuarios. Los usuarios podrán usar esta URL para navegar a la vista compartida.

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

Pase un `viewId` a `contentOptions` para abrir la experiencia con los `viewId` proporcionados.

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

------

# Incrustar imágenes y paneles de Amazon Quick Sight con un código de inserción de 1 clic
Incrustación en 1 clic

Puede integrar un elemento visual o un panel en su aplicación mediante un código de integración. Este código se obtiene al compartir el panel de control o desde el menú **visual Insertar** de Amazon Quick Sight. 

Puede insertar un elemento visual o panel en su aplicación interna para los usuarios registrados. También puedes activar la compartición pública en la consola Amazon Quick Sight. De este modo, cualquier persona que utilice Internet tendrá acceso a un elemento visual o panel de control compartido que esté integrado en una aplicación, wiki o portal públicos.

A continuación, encontrará descripciones sobre cómo integrar elementos visuales y paneles mediante el código de integración del elemento visual o del panel de control de 1 clic.

**Topics**
+ [

# Incrustar imágenes y paneles de Amazon Quick Sight para usuarios registrados con un código de inserción de 1 clic
](embedded-analytics-1-click.md)
+ [

# Incrustar imágenes y paneles de Amazon Quick Sight para usuarios anónimos con un código de inserción de 1 clic
](embedded-analytics-1-click-public.md)

# Incrustar imágenes y paneles de Amazon Quick Sight para usuarios registrados con un código de inserción de 1 clic
Incrustación registrada con 1 clic


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 

Puedes incrustar una imagen o un panel de control en tu aplicación interna para los usuarios registrados de tu cuenta de Amazon Quick Sight. Para ello, utiliza el código de inserción que obtiene al compartir el panel de control o desde el menú **visual Insertar** de Amazon Quick Sight. No es necesario ejecutar la API de incrustación de Amazon Quick Sight para generar el código de incrustación. Puede copiar el código de inserción de Amazon Quick Sight y pegarlo en el código HTML de la aplicación interna.

Cuando los usuarios y grupos (o todos los usuarios de su cuenta de Amazon Quick Sight) que tienen acceso al panel de control que desea insertar o que contiene la imagen que desea insertar acceden a su aplicación interna, se les pide que inicien sesión en la cuenta de Amazon Quick Sight con sus credenciales. Una vez autenticados, pueden acceder al elemento visual o al panel de su página interna. Si tiene activado el inicio de sesión único, no se les pedirá que vuelvan a iniciar sesión.

A continuación, encontrará descripciones sobre cómo integrar un elemento visual o un panel para usuarios registrados utilizando el código de integración del elemento visual o del panel.

## Antes de comenzar


Antes de comenzar, asegúrese de lo siguiente:
+ La configuración de su navegador de Internet contiene uno de los siguientes elementos para permitir la comunicación entre la ventana emergente y el iframe:
  + Soporte nativo para la API de Mozilla Broadcast Channel. Para obtener más información, consulte [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API) en la documentación de Mozilla.
  + Soporte de IndexedDB.
  + LocalStorage soporte.
+ La configuración de “bloquear todas las cookies” de su navegador de Internet está desactivada.

## Paso 1: concesión de acceso al panel


Para que los usuarios accedan a su panel integrado, concédales acceso para verlo. Puede conceder a usuarios y grupos individuales el acceso a un panel, o a todos los usuarios de su cuenta. Los permisos visuales se determinan a nivel del panel. Para conceder acceso a las imágenes integradas, conceda acceso al panel al que pertenece el elemento visual. Para obtener más información, consulte [Concesión de acceso a un panel](share-a-dashboard.md).

## Paso 2: colocación del dominio donde desea integrar el elemento visual o panel en la lista de permitidos


Para incrustar imágenes y paneles en tu aplicación interna, asegúrate de que el dominio en el que vas a incrustar esté incluido en la lista de permitidos en tu cuenta de Amazon Quick Sight. Para obtener más información, consulte [Permiso para la publicación de dominios estáticos](manage-domains.md#embedding-static).

## Paso 3: obtención del código integrado


Utilice el siguiente procedimiento para obtener el código de integración del elemento visual o del panel.

**Obtención del código de integración del panel**

1. Abre el panel publicado en Amazon Quick Sight y selecciona **Compartir** en la esquina superior derecha. A continuación, seleccione **Compartir panel**.

1. En la página **Compartir panel** que se abre, seleccione **Copiar código para insertar** en la esquina superior izquierda.

   El código integrado se copia en el portapapeles y es similar al siguiente. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

**Obtención del código de integración del elemento visual**

1. Abra el panel publicado en Amazon Quick Sight y elija el elemento visual que desee incrustar. A continuación, abra el menú del elemento visual en la parte superior derecha del visual y elija **Elemento visual para insertar**.

1. En el panel **Elemento visual para insertar** que se abre, seleccione **Copiar código**.

   El código integrado se copia en el portapapeles y es similar al siguiente. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

## Paso 4: pegado del código en la página HTML de la aplicación interna


Utilice el siguiente procedimiento para pegar el código de integración en la página HTML de la aplicación interna

**Pegado del código en la página HTML de la aplicación interna**
+ Abra el código HTML de cualquier página en la que desee integrar el panel y péguelo.

  En el siguiente ejemplo, se muestra el aspecto que podría tener para un panel integrado. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

  En el siguiente ejemplo, se muestra el aspecto que podría tener para un elemento visual integrado. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

Por ejemplo, supongamos que desea incrustar su elemento visual o panel en una página interna de Google Sites. Puede abrir la página en Google Sites y pegar el código de integración en un widget de integración.

Si desea incrustar el elemento visual o el panel en un SharePoint sitio interno de Microsoft, puede crear una página nueva y, a continuación, pegar el código de inserción en un elemento web de inserción.

# Incrustar imágenes y paneles de Amazon Quick Sight para usuarios anónimos con un código de inserción de 1 clic
Incrustación anónima de 1 clic


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 

Puede incrustar una imagen o un panel en sitios públicos mediante el código de inserción que obtiene al compartir la imagen o el panel en Amazon Quick Sight. También puedes activar la compartición pública mediante la consola Amazon Quick Sight y conceder automáticamente acceso a una imagen o panel compartido a cualquier usuario de Internet. 

A continuación, encontrará información sobre cómo activar el uso compartido en público de un elemento visual o panel e integrarlos para que cualquier usuario de Internet pueda verlo. En ambos casos, puede hacerlo mediante el código de integración de 1 clic.

## Antes de comenzar


Antes de comenzar, asegúrese de lo siguiente:
+ La configuración de su navegador de Internet contiene uno de los siguientes elementos para permitir la comunicación entre la ventana emergente y el iframe que utiliza compartir:
  + Soporte nativo para la API de Mozilla Broadcast Channel. Para obtener más información, consulte [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API) en la documentación de Mozilla.
  + Soporte de IndexedDB.
  + LocalStorage soporte.
+ La configuración de “bloquear todas las cookies” de su navegador de Internet está desactivada.

## Paso 1: activación del acceso público al panel


Para que cualquier usuario de Internet pueda acceder a su panel o elemento visual integrado, primero active el acceso público al panel. Los permisos visuales se determinan a nivel del panel. Para conceder acceso a las imágenes integradas, conceda acceso al panel al que pertenece el elemento visual. Para obtener más información, consulte [Conceder a cualquier usuario de Internet acceso a un panel de Amazon Quick Sight](share-a-dashboard-grant-access-anyone.md).

## Paso 2: colocación del dominio donde desea integrar el elemento visual o panel en la lista de permitidos


Para incrustar imágenes y paneles en una aplicación, wiki o portal públicos, asegúrate de que el dominio en el que los vas a incrustar esté en la lista de permitidos de tu cuenta de Amazon Quick Sight. 

## Paso 3: obtención del código integrado


Utilice el siguiente procedimiento para obtener el código de integración del elemento visual o del panel.

**Obtención del código de integración del panel**

1. Abre el panel publicado en Amazon Quick Sight y selecciona **Compartir** en la esquina superior derecha. A continuación, seleccione **Compartir panel**.

1. En la página **Compartir panel** que se abre, seleccione **Copiar código para insertar** en la esquina superior izquierda.

   El código integrado se copia en el portapapeles y es similar al siguiente. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

**Obtención del código de integración del elemento visual**

1. Abra el panel publicado en Amazon Quick Sight y elija el elemento visual que desee incrustar. A continuación, abra el menú visual en la esquina superior derecha del elemento visual y seleccione **Elemento visual para insertar**.

1. En el panel **Elemento visual para insertar** que se abre, seleccione **Copiar código**.

   El código integrado se copia en el portapapeles y es similar al siguiente. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

## Paso 4: pegado del código de integración en una página HTML, una página wiki o un portal


Utilice el siguiente procedimiento para pegar el código de ntegración en una página HTML, una página wiki o un portal.

**Pegado del código de integración**
+ Abra el código HTML de la ubicación en la que desea integrar el elemento visual o panel y pegue el código de integración.

  En el siguiente ejemplo, se muestra el aspecto que podría tener para un panel integrado. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

  En el siguiente ejemplo, se muestra el aspecto que podría tener para un elemento visual integrado. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

Si sus aplicaciones públicas están creadas en Google Sites, abrz la página en Google Sites y, a continuación, pegue el código de integración con el widget de integración.

Asegúrese de que los siguientes dominios de Amazon Quick Sight estén en su lista de permitidos cuando los inserte en Google Sites:
+ `https://googleusercontent.com` (activa los subdominios)
+ `https://www.gstatic.com`
+ `https://sites.google.com`

Tras integrar el elemento visual o panel en la aplicación, cualquier persona que pueda acceder a ella podrá acceder al elemento visual o al panel integrados. Para actualizar un panel que se comparte con el público, consulte [Actualización de un panel compartido públicamente](share-a-dashboard-grant-access-anyone-update.md). Para desactivar el uso compartido en público, consulte [Deshabilitación de la configuración de uso compartido en público](share-a-dashboard-grant-access-anyone-no-share.md). 

Si desactiva la compartición pública, nadie desde Internet podrá acceder a uno o varios paneles que haya integrado en una aplicación pública o que haya compartido con un enlace. La próxima vez que alguien intente ver un panel de este tipo desde Internet, recibirá un mensaje en el que se le indica que no tiene acceso para verlo.

# Integración con Amazon Quick Sight APIs
Integración con Amazon Quick Sight APIs


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

Solo hay unos pocos pasos involucrados en el proceso real de integración de análisis con Amazon Quick Sight APIs. 

Antes de empezar, asegúrate de tener preparados los siguientes elementos:
+ Configure los permisos de IAM necesarios para la identidad de la persona que llama utilizada por su aplicación, que utilizará el AWS SDK para realizar llamadas a la API. Por ejemplo, conceda permiso para permitir la acción `quicksight:GenerateEmbedUrlForAnonymousUser` o `quicksight:GenerateEmbedUrlForRegisteredUser`.
+ Para incrustarlos para los usuarios registrados, comparte los activos de Amazon Quick Sight con ellos de antemano. Para los nuevos usuarios que se están autenticando, infórmese sobre cómo conceder acceso a los activos. Una forma de hacerlo es añadiendo todos los activos a una carpeta de Amazon Quick Sight. Si prefiere utilizar la API de Amazon Quick Sight, utilice las operaciones `DescribeDashboardPermissions` y `UpdateDashboardPermissions` API. Para obtener más información, consulta [DescribeDashboardPermissions](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeDashboardPermissions.html)o consulta [UpdateDashboardPermissions](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateDashboardPermissions.html)la *Amazon Quick API Reference*. Si desea compartir el panel con todos los usuarios de un espacio de nombres o grupo, puede compartir el panel con `namespace` o `group`.
+ Si va a integrar paneles, asegúrese de tener el ID de los paneles que desea integrar. El ID del panel es el código en la URL del panel. También puede obtenerlo desde la URL del panel.
+ Un administrador de Amazon Quick Sight debe habilitar de forma explícita los dominios en los que planea incrustar sus análisis de Amazon Quick Sight. Para ello, utilice la opción **Gestionar Amazon Quick Sight**, **Dominios e Incrustación** del menú del perfil, o bien utilice el `AllowedDomains` parámetro de una `GenerateEmbedUrlForAnonymousUser` llamada a la `GenerateEmbedUrlForRegisteredUser` API.

  Esta opción solo está visible para los administradores de Amazon Quick Sight. También puede agregar subdominios como parte de un dominio. Para obtener más información, consulte [Permite publicar dominios en tiempo de ejecución con la Amazon Quick API](manage-domains.md#embedding-run-time).

  Todos los dominios de su lista estática de permitidos (como desarrollo, almacenamiento provisional y producción) deben estar explícitamente permitidos, y deben usar HTTPS. Puede agregar hasta 100 dominios a la lista de permitidos. Puede añadir dominios en tiempo de ejecución con las operaciones de la API de Amazon Quick Sight.

Una vez cumplidos todos los requisitos previos, la integración de Amazon Quick Sight implica los siguientes pasos, que se explican con más detalle más adelante: 

1. Para la autenticación, utilice el servidor de aplicaciones para autenticar al usuario. Tras la autenticación en el servidor, genere la URL del panel de control integrada con el AWS SDK que necesite.

1. En su aplicación o portal web, inserte Amazon Quick Sight mediante la URL generada. Para simplificar este proceso, puede utilizar el SDK de incrustación de Amazon Quick Sight, disponible en [NPMJS](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) y. [GitHub](https://github.com/awslabs/amazon-quicksight-embedding-sdk) Este JavaScript SDK personalizado está diseñado para ayudarlo a integrar Amazon Quick Sight de manera eficiente en las páginas de sus aplicaciones, establecer valores predeterminados, conectar controles, recibir llamadas y gestionar errores. 

Puede utilizar los registros de AWS CloudTrail auditoría para obtener información sobre la cantidad de paneles integrados, los usuarios de una experiencia integrada y las tasas de acceso.

**Topics**
+ [

# Integración de los paneles de Amazon Quick Sight con la API Amazon Quick Sight
](embedding-dashboards.md)
+ [

# Integración de imágenes de Amazon Quick Sight con Amazon Quick Sight APIs
](embedding-visuals.md)
+ [

# Incorporar todas las funciones de la consola Amazon Quick Sight para los usuarios registrados
](embedded-analytics-full-console-for-authenticated-users.md)
+ [

# Integración de Amazon Q en la experiencia generativa de preguntas y respuestas de Amazon Quick Sight
](embedding-gen-bi.md)
+ [

# Incrustar la barra de búsqueda Quick Sight Q de Amazon (clásica)
](embedding-quicksight-q.md)
+ [

# Integración de análisis mediante las operaciones de la API GetDashboardEmbedURL y GetSessionEmbedURL
](embedded-analytics-deprecated.md)

# Integración de los paneles de Amazon Quick Sight con la API Amazon Quick Sight
Integración de paneles

Utilice los siguientes temas para obtener información sobre cómo incrustar paneles con la API Amazon Quick Sight.

**Topics**
+ [

# Incorporación de paneles de Amazon Quick Sight para usuarios registrados
](embedded-analytics-dashboards-for-authenticated-users.md)
+ [

# Incorporación de paneles de Amazon Quick Sight para usuarios anónimos (no registrados)
](embedded-analytics-dashboards-for-everyone.md)
+ [

# Activación de resúmenes ejecutivos en paneles incrustados
](embedded-analytics-genbi-executive-summaries-dashboard.md)

# Incorporación de paneles de Amazon Quick Sight para usuarios registrados
Integración de paneles para usuarios registrados

**importante**  
Amazon Quick Sight tiene nuevas operaciones de API para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando las operaciones `GetDashboardEmbedUrl` y las de la `GetSessionEmbedUrl` API para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener más información sobre la incrustación mediante las operaciones de API antiguas, consulte [Incrustar análisis mediante las GetDashboardEmbedURL](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html) operaciones de API y. GetSessionEmbedURL


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En las siguientes secciones, encontrará información detallada sobre cómo configurar los paneles de Amazon Quick Sight integrados para los usuarios registrados de Amazon Quick Sight.

**Topics**
+ [

## Paso 1: configuración de permisos
](#embedded-dashboards-for-authenticated-users-step-1)
+ [

## Paso 2: generación de la URL con el código de autenticación adjunto
](#embedded-dashboards-for-authenticated-users-step-2)
+ [

## Paso 3 integración de la URL del panel
](#embedded-dashboards-for-authenticated-users-step-3)

## Paso 1: configuración de permisos
Paso 1: configuración de permisos

En la siguiente sección, puede encontrar cómo configurar los permisos de la aplicación de backend o del servidor web. Esta tarea requiere acceso administrativo a IAM.

Cada usuario que accede a un panel de control asume una función que le da acceso a Amazon Quick Sight y permisos para acceder al panel. Para que esto sea posible, cree un rol de IAM en su. Cuenta de AWS Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma. El rol de IAM debe proporcionar permisos para recuperar la incrustación de un grupo URLs de usuarios específico. Con la ayuda del carácter comodín *\$1*, puede conceder los permisos para generar una URL para todos los usuarios de un espacio de nombres específico, o para un subconjunto de usuarios de espacios de nombres específicos. Para ello, añada `quicksight:GenerateEmbedUrlForRegisteredUser`.

Puede crear una condición en su política de IAM que limite los dominios que los desarrolladores pueden incluir en el parámetro `AllowedDomains` de una operación de la API `GenerateEmbedUrlForRegisteredUser`. El parámetro `AllowedDomains` es opcional. Como desarrollador, tiene la opción de anular los dominios estáticos que están configurados en el menú **Gestionar Amazon Quick Sight**. En su lugar, puede enumerar hasta tres dominios o subdominios que pueden acceder a la URL generada. A continuación, esta URL se integra en el sitio web que cree. Solo los dominios que aparecen en el parámetro pueden acceder al elemento visual integrado. Sin esta condición, usted puede incluir cualquier dominio de Internet en el parámetro `AllowedDomains`. 

Para limitar los dominios que los desarrolladores pueden usar con este parámetro, añada una condición `AllowedEmbeddingDomains` a su política de IAM. Para obtener más información sobre el `AllowedDomains` parámetro, consulte la *referencia [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)de la API de Amazon Quick Sight*.

**Prácticas recomendadas de seguridad para los operadores de condiciones de IAM**  
Los operadores de condiciones de IAM configurados incorrectamente pueden permitir el acceso no autorizado a los recursos rápidos integrados mediante variaciones de URL. Cuando utilices la clave de `quicksight:AllowedEmbeddingDomains` condición en tus políticas de IAM, utiliza operadores de condiciones que permitan dominios específicos o denieguen todos los dominios que no estén específicamente permitidos. Para obtener más información sobre los operadores de condiciones de IAM, consulte [Elementos de la política JSON de IAM: operadores de condiciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la Guía del usuario de IAM.  
Muchas variaciones de URL diferentes pueden apuntar al mismo recurso. Por ejemplo, URLs todo lo siguiente se traduce en el mismo contenido:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Si su política utiliza operadores que no tienen en cuenta estas variaciones de URL, un atacante puede eludir sus restricciones proporcionando variaciones de URL equivalentes.  
Debe comprobar que su política de IAM utiliza los operadores de condiciones adecuados para evitar que se eludan las vulnerabilidades y garantizar que solo los dominios a los que va destinados puedan acceder a los recursos integrados.

La siguiente política de ejemplo ofrece estos permisos.

Además, si va a crear usuarios primerizos que vayan a ser lectores de Amazon Quick Sight, asegúrese de añadir el `quicksight:RegisterUser` permiso en la política.

El siguiente ejemplo de política proporciona permiso para recuperar una URL incrustada para los usuarios primerizos que vayan a ser lectores de Amazon Quick Sight.

Finalmente, la identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que cuando un usuario accede a su aplicación, esta puede asumir la función en nombre del usuario y aprovisionar al usuario en Amazon Quick Sight. En el siguiente ejemplo, se muestra una muestra de política de confianza. 

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

------

Para obtener más información sobre las políticas de confianza para la autenticación de OpenID Connect o SAML, consulte las siguientes secciones de la *Guía del usuario de IAM: *
+ [Creación de un rol para identidades federadas web u OpenID Connect (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Creación de un rol para una federación SAML 2.0 (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## Paso 2: generación de la URL con el código de autenticación adjunto
Paso 2: generación de la URL

En la siguiente sección, puede obtener información sobre cómo autenticar el usuario y obtener la URL del panel integrable en el servidor de su aplicación. Si planea incrustar paneles para los tipos de identidad de IAM o Amazon Quick Sight, comparta el panel con los usuarios.

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Al realizar estos pasos, se garantiza que cada visor del panel de control se aprovisione de forma única en Amazon Quick Sight. También aplica la configuración por usuario, como la seguridad de nivel de fila y los valores predeterminados dinámicos de los parámetros.

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario. Este código se ejecuta en el servidor de aplicaciones.

### Java


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

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

        private final AmazonQuickSight quickSightClient;

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

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

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

            final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

### JavaScript


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

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

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

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

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

### Python3


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

sts = boto3.client('sts')

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

### Node.js


El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


Para asumir la función, elija una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar a su usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Usa esta operación cuando utilices SAML para autenticar a tus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GenerateEmbedUrlForRegisteredUser` habilitados. Si opta por añadir usuarios just-in-time la primera vez que abren un panel de control, el rol también necesita tener habilitados los permisos. `quicksight:RegisterUser`

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. Si utiliza un equipo con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_dashboard_role/john.doe@example.com`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario. También evitará la limitación del acceso de los usuarios. *La limitación* es una función de seguridad que impide que el mismo usuario acceda a Amazon Quick Sight desde varios lugares. 

El ID de sesión del rol también se convierte en el nombre de usuario en Amazon Quick Sight. Puede utilizar este patrón para aprovisionar a sus usuarios en Amazon Quick Sight con antelación o para aprovisionarlos la primera vez que accedan al panel de control. 

En el siguiente ejemplo, se muestra el comando de la CLI que puede utilizar para incluir a un usuario. Para obtener más información sobre [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html)y otras operaciones de la API de Amazon Quick Sight, consulte la [referencia de la API de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/APIReference/Welcome.html). [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.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
```

Si el usuario se ha autenticado a través de Microsoft AD, no es necesario utilizar `RegisterUser` para configurarlo. En su lugar, deberían suscribirse automáticamente la primera vez que accedan a Amazon Quick Sight. En el caso de los usuarios de Microsoft AD, puede utilizar `DescribeUser` para obtener el ARN del usuario.

La primera vez que un usuario accede a Amazon Quick Sight, también puedes añadir este usuario al grupo con el que se comparte el panel. En el siguiente ejemplo, se muestra el comando de la CLI para añadir un usuario a un grupo.

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

Ahora tienes un usuario de tu aplicación que también es usuario de Amazon Quick Sight y que tiene acceso al panel de control. 

Por último, para obtener una URL firmada para el panel, llame a `generate-embed-url-for-registered-user` desde el servidor de aplicaciones. Esta operación devuelve la URL del panel integrable. En el siguiente ejemplo, se muestra cómo generar la URL de un panel integrado mediante una llamada desde el servidor para los usuarios autenticados mediante un inicio de sesión único ( AWS Managed Microsoft AD 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}
```

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Puede utilizar esta y otras operaciones de la API en su propio código.

## Paso 3 integración de la URL del panel
Paso 3: integración de la URL

En la siguiente sección, encontrará información sobre cómo utilizar el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) para incrustar la URL del panel de control del paso 3 en su sitio web o página de aplicación. Con el SDK, puede hacer lo siguiente: 
+ Coloque el panel en una página HTML.
+ Transferir los parámetros al panel.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llamar a la operación de la API `GenerateEmbedUrlForRegisteredUser` para generar la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida hasta 10 horas. La operación de la API proporciona la URL con un `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
    }
```

Inserta este panel en tu página web mediante el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. Con el SDK de incrustación de Amazon Quick Sight, también puede controlar los parámetros del panel de control y recibir llamadas en términos de errores o de finalización de la carga de la página. 

El dominio que va a alojar paneles integrados deben estar incluido en la *lista de permitidos*, la lista de dominios aprobados de la suscripción a Quick . Este requisito protege los datos impidiendo que dominios no aprobados alojen paneles integrados. Para obtener más información sobre cómo añadir dominios para los paneles integrados, consulte [Permitir la publicación de dominios en tiempo de ejecución con la API de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html).

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código se genera en el servidor de aplicaciones.

### SDK 2.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

Para que este ejemplo funcione, asegúrese de utilizar el SDK de incrustación de Amazon Quick Sight para cargar el panel integrado en su sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

# Incorporación de paneles de Amazon Quick Sight para usuarios anónimos (no registrados)
Integración de paneles para usuarios anónimos

**importante**  
Amazon Quick Sight tiene nuevas operaciones de API para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando las operaciones `GetDashboardEmbedUrl` y las de la `GetSessionEmbedUrl` API para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener más información sobre la incrustación mediante las operaciones de API antiguas, consulte [Incrustar análisis mediante las GetDashboardEmbedURL](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html) operaciones de API y. GetSessionEmbedURL


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En las siguientes secciones, encontrará información detallada sobre cómo configurar los paneles de Amazon Quick Sight integrados para usuarios anónimos (no registrados).

**Topics**
+ [

## Paso 1: configuración de permisos
](#embedded-analytics-dashboards-with-anonymous-users-step-1)
+ [

## Paso 2: generación de la URL con el código de autenticación adjunto
](#embedded-analytics-dashboards-with-anonymous-users-step-2)
+ [

## Paso 3 integración de la URL del panel
](#embedded-analytics-dashboards-with-anonymous-users-step-3)

## Paso 1: configuración de permisos
Paso 1: configuración de permisos


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En la siguiente sección, puede encontrar cómo configurar los permisos de la aplicación de backend o del servidor web. Esta tarea requiere acceso administrativo a IAM.

Cada usuario que accede a un panel de control asume un rol que le da acceso a Amazon Quick Sight y permisos para acceder al panel. Para que esto sea posible, cree un rol de IAM en su. Cuenta de AWS Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma.

Puede crear una condición en su política de IAM que limite los dominios que los desarrolladores pueden incluir en el parámetro `AllowedDomains` de una operación de la API `GenerateEmbedUrlForAnonymousUser`. El parámetro `AllowedDomains` es opcional. Como desarrollador, tiene la opción de anular los dominios estáticos que están configurados en el menú **Gestionar Amazon Quick Sight**. En su lugar, puede enumerar hasta tres dominios o subdominios que pueden acceder a una URL generada. A continuación, esta URL se integra en el sitio web que cree. Solo los dominios que aparecen en el parámetro pueden acceder al panel integrado. Sin esta condición, usted puede incluir cualquier dominio de Internet en el parámetro `AllowedDomains`. 

Para limitar los dominios que los desarrolladores pueden usar con este parámetro, añada una condición `AllowedEmbeddingDomains` a su política de IAM. Para obtener más información sobre el `AllowedDomains` parámetro, consulte la *referencia [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)de la API de Amazon Quick Sight*.

**Prácticas recomendadas de seguridad para los operadores de condiciones de IAM**  
Los operadores de condiciones de IAM configurados incorrectamente pueden permitir el acceso no autorizado a los recursos rápidos integrados mediante variaciones de URL. Cuando utilices la clave de `quicksight:AllowedEmbeddingDomains` condición en tus políticas de IAM, utiliza operadores de condiciones que permitan dominios específicos o denieguen todos los dominios que no estén específicamente permitidos. Para obtener más información sobre los operadores de condiciones de IAM, consulte [Elementos de la política JSON de IAM: operadores de condiciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la Guía del usuario de IAM.  
Muchas variaciones de URL diferentes pueden apuntar al mismo recurso. Por ejemplo, URLs todo lo siguiente tiene el mismo contenido:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Si su política utiliza operadores que no tienen en cuenta estas variaciones de URL, un atacante puede eludir sus restricciones proporcionando variaciones de URL equivalentes.  
Debe comprobar que su política de IAM utiliza los operadores de condiciones adecuados para evitar que se eludan las vulnerabilidades y garantizar que solo los dominios a los que va destinados puedan acceder a los recursos integrados.

La siguiente política de ejemplo ofrece estos permisos para usar con `GenerateEmbedUrlForAnonymousUser`. Para que este enfoque funcione, también necesita un paquete de sesiones, o un precio por capacidad de sesión, para su Cuenta de AWS. De lo contrario, cuando un usuario intenta acceder al panel de control, se devuelve el error `UnsupportedPricingPlanException`. 

La identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que, cuando un usuario accede a su aplicación, esta puede asumir el rol en nombre del usuario para abrir el panel. En el siguiente ejemplo, se muestra una muestra de política de confianza.

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

------

Para obtener más información sobre las políticas de confianza, consulte [Credenciales de seguridad temporales en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) en la *Guía del usuario de IAM*.

## Paso 2: generación de la URL con el código de autenticación adjunto
Paso 2: generación de la URL


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En la siguiente sección, puede obtener información sobre cómo autenticarse en nombre del visitante anónimo y obtener la URL del panel integrable en el servidor de su aplicación. 

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario. Transfiere un identificador como ID de sesión de rol único. Este código se ejecuta en el servidor de aplicaciones.

### Java


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


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

        private final AmazonQuickSight quickSightClient;

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

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

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

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

            GenerateEmbedUrlForAnonymousUserResult dashboardEmbedUrl = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

            return dashboardEmbedUrl.getEmbedUrl();
        }

    }
```

### JavaScript


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

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

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

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

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

### Python3


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

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

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

### Node.js


El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


Para asumir la función, elija una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar a su usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Utilice esta operación cuando utilice el lenguaje de marcado de aserciones de seguridad (SAML) para autenticar a sus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GenerateEmbedUrlForAnonymousUser` habilitados. 

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. Si utiliza un equipo con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_dashboard_role/QuickSightEmbeddingAnonymousPolicy`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario visitante. También mantiene cada sesión separada y distinta. Si utiliza una serie de servidores web, por ejemplo, para equilibrar la carga, y una sesión se vuelve a conectar a un servidor diferente, se inicia una nueva sesión.

Para obtener una URL firmada para el panel, llame a `generate-embed-url-for-anynymous-user` desde el servidor de aplicaciones. Esta operación devuelve la URL del panel integrable. En el siguiente ejemplo, se muestra cómo generar la URL de un panel integrado mediante una llamada desde el servidor para los usuarios que realizan visitas anónimas a su portal web o aplicación.

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

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html). Puede utilizar esta y otras operaciones de la API en su propio código. 

## Paso 3 integración de la URL del panel
Paso 3: integración de la URL


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En la siguiente sección, encontrará información sobre cómo utilizar el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) para incrustar la URL del panel de control del paso 2 en su sitio web o página de aplicación. Con el SDK, puede hacer lo siguiente: 
+ Coloque el panel en una página HTML.
+ Transferir los parámetros al panel.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llamar a la operación de la API `GenerateEmbedUrlForAnynymousUser` para generar la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida durante 10 horas. La operación de la API proporciona la URL con un `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
        }
```

Inserte este panel en su página web mediante el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. Con el SDK de incrustación de Amazon Quick Sight, también puede controlar los parámetros del panel de control y recibir llamadas en términos de errores o de finalización de la carga de la página. 

El dominio que va a alojar paneles integrados deben estar incluido en la *lista de permitidos*, la lista de dominios aprobados de la suscripción a Quick . Este requisito protege los datos impidiendo que dominios no aprobados alojen paneles integrados. Para obtener más información sobre cómo añadir dominios para los paneles integrados, consulte [Permitir la publicación de dominios en tiempo de ejecución con la API de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html).

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código reside en el servidor de aplicaciones.

### SDK 2.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

Para que este ejemplo funcione, asegúrese de utilizar el SDK de incrustación de Amazon Quick Sight para cargar el panel integrado en su sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación de Amazon Quick Sight desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usa `npm` para JavaScript dependencias, descárguelo e instálelo ejecutando el siguiente comando.

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

# Activación de resúmenes ejecutivos en paneles incrustados
Activación de resúmenes ejecutivos


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

Puede activar los resúmenes ejecutivos en los paneles incrustados. Cuando está habilitada, los usuarios registrados pueden generar resúmenes ejecutivos que proporcionan un resumen de toda la información que Amazon Quick Sight ha generado para el panel de control. Los resúmenes ejecutivos facilitan a los lectores la búsqueda de información y datos clave sobre un panel. Para obtener más información sobre cómo los usuarios generan un resumen ejecutivo de un panel, consulte [Generar un resumen ejecutivo de un panel de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/use-executive-summaries.html).

**nota**  
Los resúmenes ejecutivos solo están disponibles en los paneles incrustados para los usuarios registrados y no se pueden activar en los paneles incrustados para los usuarios anónimos o no registrados.

**Activación de los resúmenes ejecutivos en paneles incrustados para usuarios registrados**
+ Siga los pasos que se indican en [Incrustar paneles de Amazon Quick Sight para que los usuarios registrados puedan](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-dashboards-for-authenticated-users.html) incrustar un panel con los siguientes cambios:

  1. Al generar la URL en el paso 2, defina el `ExecutiveSummary` parámetro `Enabled: true` en [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)o, tal y [GenerateEmbedUrlForRegisteredUserWithIdentity](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUserWithIdentity.html)como se muestra en el siguiente ejemplo:

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

  1. Al incrustar la URL del panel con el SDK de incrustación de Amazon Quick Sight en el paso 3, `executiveSummary: true` configúrelo`contentOptions`, como se muestra en el siguiente ejemplo:

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

# Integración de imágenes de Amazon Quick Sight con Amazon Quick Sight APIs
Integración de elementos visuales

Puede incrustar imágenes individuales que formen parte de un panel publicado en su aplicación con la API Amazon Quick Sight.

**Topics**
+ [

# Incrustar imágenes de Amazon Quick Sight para usuarios registrados
](embedded-analytics-visuals-for-authenticated-users.md)
+ [

# Incrustar imágenes de Amazon Quick Sight para usuarios anónimos (no registrados)
](embedded-analytics-visuals-for-everyone.md)

# Incrustar imágenes de Amazon Quick Sight para usuarios registrados
Integración de elementos visuales para usuarios registrados


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En las siguientes secciones, encontrará información detallada sobre cómo configurar las imágenes integradas de Amazon Quick Sight para los usuarios registrados de Amazon Quick Sight.

**Topics**
+ [

## Paso 1: configuración de permisos
](#embedded-visuals-for-authenticated-users-step-1)
+ [

## Paso 2: generación de la URL con el código de autenticación adjunto
](#embedded-visuals-for-authenticated-users-step-2)
+ [

## Paso 3: integración de la URL del elemento visual
](#embedded-visuals-for-authenticated-users-step-3)

## Paso 1: configuración de permisos
Paso 1: configuración de permisos

En la siguiente sección, puede encontrar cómo configurar los permisos de la aplicación de backend o del servidor web. Esta tarea requiere acceso administrativo a IAM.

Cada usuario que accede a una imagen asume una función que le da acceso a Amazon Quick Sight y permisos para acceder a la imagen. Para que esto sea posible, cree un rol de IAM en su. Cuenta de AWS Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma. El rol de IAM debe proporcionar permisos para recuperar la incrustación de un grupo URLs de usuarios específico. Con la ayuda del carácter comodín *\$1*, puede conceder los permisos para generar una URL para todos los usuarios de un espacio de nombres específico, o para un subconjunto de usuarios de espacios de nombres específicos. Para ello, añada `quicksight:GenerateEmbedUrlForRegisteredUser`.

Puede crear una condición en su política de IAM que limite los dominios que los desarrolladores pueden incluir en el parámetro `AllowedDomains` de una operación de la API `GenerateEmbedUrlForAnonymousUser`. El parámetro `AllowedDomains` es opcional. Como desarrollador, tiene la opción de anular los dominios estáticos que están configurados en el menú **Gestionar Amazon Quick Sight**. En su lugar, puede enumerar hasta tres dominios o subdominios que pueden acceder a una URL generada. A continuación, esta URL se integra en el sitio web que cree. Solo los dominios que aparecen en el parámetro pueden acceder al panel integrado. Sin esta condición, usted puede incluir cualquier dominio de Internet en el parámetro `AllowedDomains`. 

Para limitar los dominios que los desarrolladores pueden usar con este parámetro, añada una condición `AllowedEmbeddingDomains` a su política de IAM. Para obtener más información sobre el `AllowedDomains` parámetro, consulte la *referencia [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)de la API de Amazon Quick Sight*.

**Prácticas recomendadas de seguridad para los operadores de condiciones de IAM**  
Los operadores de condiciones de IAM configurados incorrectamente pueden permitir el acceso no autorizado a los recursos rápidos integrados mediante variaciones de URL. Cuando utilices la clave de `quicksight:AllowedEmbeddingDomains` condición en tus políticas de IAM, utiliza operadores de condiciones que permitan dominios específicos o denieguen todos los dominios que no estén específicamente permitidos. Para obtener más información sobre los operadores de condiciones de IAM, consulte [Elementos de la política JSON de IAM: operadores de condiciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la Guía del usuario de IAM.  
Muchas variaciones de URL diferentes pueden apuntar al mismo recurso. Por ejemplo, URLs todo lo siguiente tiene el mismo contenido:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Si su política utiliza operadores que no tienen en cuenta estas variaciones de URL, un atacante puede eludir sus restricciones proporcionando variaciones de URL equivalentes.  
Debe comprobar que su política de IAM utiliza los operadores de condiciones adecuados para evitar que se eludan las vulnerabilidades y garantizar que solo los dominios a los que va destinados puedan acceder a los recursos integrados.

La siguiente política de ejemplo ofrece estos permisos.

Además, si va a crear usuarios primerizos que vayan a ser lectores de Amazon Quick Sight, asegúrese de añadir el `quicksight:RegisterUser` permiso en la política.

El siguiente ejemplo de política proporciona permiso para recuperar una URL incrustada para los usuarios primerizos que vayan a ser lectores de Amazon Quick Sight.

Finalmente, la identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que cuando un usuario accede a su aplicación, esta puede asumir la función en nombre del usuario y aprovisionar al usuario en Amazon Quick Sight. En el siguiente ejemplo, se muestra una muestra de política de confianza.

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

------

Para obtener más información sobre las políticas de confianza para la autenticación de OpenID Connect o SAML, consulte las siguientes secciones de la *Guía del usuario de IAM: *
+ [Creación de un rol para identidades federadas web u OpenID Connect (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Creación de un rol para una federación SAML 2.0 (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## Paso 2: generación de la URL con el código de autenticación adjunto
Paso 2: generación de la URL

En la siguiente sección, encontrarás información sobre cómo autenticar a tu usuario de Amazon Quick Sight y obtener la URL visual integrable en tu servidor de aplicaciones. Si planea incrustar imágenes para los tipos de identidad de IAM o Amazon Quick Sight, comparta las imágenes con los usuarios de Amazon Quick Sight.

Cuando un usuario de Amazon Quick Sight accede a tu aplicación, la aplicación asume la función de IAM en nombre del usuario de Amazon Quick Sight. A continuación, añade el usuario a Amazon Quick Sight, si ese usuario de Amazon Quick Sight aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Al realizar los pasos descritos, se garantiza que cada espectador de la imagen se aprovisione de forma única en Amazon Quick Sight. También aplica la configuración por usuario, como la seguridad de nivel de fila y los valores predeterminados dinámicos de los parámetros.

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario de Amazon Quick Sight. Este código se ejecuta en el servidor de aplicaciones.

### Java


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

import java.util.List;

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

    private final AmazonQuickSight quickSightClient;

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

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

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

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

### JavaScript


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

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

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

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

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

### Python3


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

sts = boto3.client('sts')

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

### Node.js


El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


Para asumir la función, elija una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar a su usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Usa esta operación cuando utilices SAML para autenticar a tus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GenerateEmbedUrlForRegisteredUser` habilitados. Si opta por añadir usuarios just-in-time la primera vez que abren un panel de control, el rol también necesita tener habilitados los permisos. `quicksight:RegisterUser`

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. Si utiliza un equipo con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_visual_role/john.doe@example.com`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario. También evitará la limitación del acceso de los usuarios. *La limitación* es una función de seguridad que impide que el mismo usuario acceda a Amazon Quick Sight desde varios lugares. 

El ID de sesión del rol también se convierte en el nombre de usuario en Amazon Quick Sight. Puede utilizar este patrón para aprovisionar a sus usuarios en Amazon Quick Sight con antelación o para aprovisionarlos la primera vez que accedan al panel de control. 

En el siguiente ejemplo, se muestra el comando de la CLI que puede utilizar para incluir a un usuario. Para obtener más información sobre [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html)y otras operaciones de la API de Amazon Quick Sight, consulte la [referencia de la API de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/APIReference/Welcome.html). [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.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
```

Si el usuario se ha autenticado a través de Microsoft AD, no es necesario utilizar `RegisterUser` para configurarlo. En su lugar, deberían suscribirse automáticamente la primera vez que accedan a Amazon Quick Sight. En el caso de los usuarios de Microsoft AD, puede utilizar `DescribeUser` para obtener el ARN del usuario.

La primera vez que un usuario accede a Amazon Quick Sight, también puede añadir este usuario al grupo con el que se comparte la imagen. En el siguiente ejemplo, se muestra el comando de la CLI para añadir un usuario a un grupo.

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

Ahora tienes un usuario de tu aplicación que también es usuario de Amazon Quick Sight y que tiene acceso a lo visual. 

Por último, para obtener una URL firmada para el elemento visual, llame a `generate-embed-url-for-registered-user` desde el servidor de aplicaciones. Esta operación devuelve la URL del elemento visual integrable. En el siguiente ejemplo, se muestra cómo generar la URL de un elemento visual incrustado mediante una llamada desde el servidor para los usuarios autenticados mediante AWS Managed Microsoft AD un inicio de sesión único (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}}'
```

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Puede utilizar esta y otras operaciones de la API en su propio código.

## Paso 3: integración de la URL del elemento visual
Paso 3: integración de la URL

En la siguiente sección, encontrará información sobre cómo utilizar el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) para incrustar la URL visual del paso 3 en su sitio web o página de aplicación. Con el SDK, puede hacer lo siguiente: 
+ Coloque el elemento visual en una página HTML.
+ Pase los parámetros al elemento visual.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llamar a la operación de la API `GenerateEmbedUrlForRegisteredUser` para generar la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida hasta 10 horas. La operación de la API proporciona la URL con un `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `generate-embed-url-for-registered-user`. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

Inserta esta imagen en tu página web mediante el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. Con el SDK de incrustación de Amazon Quick Sight, también puede controlar los parámetros visuales y recibir llamadas en función de la finalización de la carga de la página y de los errores. 

El dominio que alojará las imágenes y los paneles integrados debe figurar en la *lista de dominios permitidos*, es decir, los dominios aprobados para la suscripción. Quick Este requisito protege los datos impidiendo que dominios no aprobados alojen elementos visuales y paneles integrados. Para obtener más información sobre cómo añadir dominios para imágenes y paneles integrados, consulte [Permitir la publicación de dominios en tiempo de ejecución con la API Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html).

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código se genera en el servidor de aplicaciones.

### SDK 2.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

Para que este ejemplo funcione, asegúrese de utilizar el SDK de incrustación de Amazon Quick Sight para cargar el elemento visual incrustado en su sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

# Incrustar imágenes de Amazon Quick Sight para usuarios anónimos (no registrados)
Integración de elementos visuales para usuarios anónimos


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En las siguientes secciones, encontrará información detallada sobre cómo configurar las imágenes integradas de Amazon Quick Sight para usuarios anónimos (no registrados).

**Topics**
+ [

## Paso 1: configuración de permisos
](#embedded-analytics-visuals-with-anonymous-users-step-1)
+ [

## Paso 2: generación de la URL con el código de autenticación adjunto
](#embedded-analytics-visuals-with-anonymous-users-step-2)
+ [

## Paso 3: integración de la URL del elemento visual
](#embedded-analytics-visuals-with-anonymous-users-step-3)

## Paso 1: configuración de permisos
Paso 1: configuración de permisos


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En la siguiente sección, puede encontrar cómo configurar los permisos de la aplicación de backend o del servidor web. Esta tarea requiere acceso administrativo a IAM.

Cada usuario que accede a una imagen asume una función que le da acceso a Amazon Quick Sight y permisos para acceder a la imagen. Para que esto sea posible, cree un rol de IAM en su. Cuenta de AWS Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma.

Puede crear una condición en su política de IAM que limite los dominios que los desarrolladores pueden incluir en el parámetro `AllowedDomains` de una operación de la API `GenerateEmbedUrlForAnonymousUser`. El parámetro `AllowedDomains` es opcional. Como desarrollador, tiene la opción de anular los dominios estáticos que están configurados en el menú **Gestionar Amazon Quick Sight**. En su lugar, puede enumerar hasta tres dominios o subdominios que pueden acceder a una URL generada. A continuación, esta URL se integra en el sitio web que cree. Solo los dominios que aparecen en el parámetro pueden acceder al panel integrado. Sin esta condición, usted puede incluir cualquier dominio de Internet en el parámetro `AllowedDomains`. 

Para limitar los dominios que los desarrolladores pueden usar con este parámetro, añada una condición `AllowedEmbeddingDomains` a su política de IAM. Para obtener más información sobre el `AllowedDomains` parámetro, consulte la *referencia [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)de la API de Amazon Quick Sight*.

**Prácticas recomendadas de seguridad para los operadores de condiciones de IAM**  
Los operadores de condiciones de IAM configurados incorrectamente pueden permitir el acceso no autorizado a los recursos rápidos integrados mediante variaciones de URL. Cuando utilices la clave de `quicksight:AllowedEmbeddingDomains` condición en tus políticas de IAM, utiliza operadores de condiciones que permitan dominios específicos o denieguen todos los dominios que no estén específicamente permitidos. Para obtener más información sobre los operadores de condiciones de IAM, consulte [Elementos de la política JSON de IAM: operadores de condiciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la Guía del usuario de IAM.  
Muchas variaciones de URL diferentes pueden apuntar al mismo recurso. Por ejemplo, URLs todo lo siguiente se traduce en el mismo contenido:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Si su política utiliza operadores que no tienen en cuenta estas variaciones de URL, un atacante puede eludir sus restricciones proporcionando variaciones de URL equivalentes.  
Debe comprobar que su política de IAM utiliza los operadores de condiciones adecuados para evitar que se eludan las vulnerabilidades y garantizar que solo los dominios a los que va destinados puedan acceder a los recursos integrados.

La identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que, cuando un usuario accede a su aplicación, esta puede asumir el rol en nombre del usuario para abrir el elemento visual. En el siguiente ejemplo, se muestra una muestra de política de confianza.

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

------

Para obtener más información sobre las políticas de confianza, consulte [Credenciales de seguridad temporales en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) en la *Guía del usuario de IAM*.

## Paso 2: generación de la URL con el código de autenticación adjunto
Paso 2: generación de la URL


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En la siguiente sección, puede obtener información sobre cómo autenticar el usuario y obtener la URL del elemento visual integrable en el servidor de su aplicación.

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario. Transfiere un identificador como ID de sesión de rol único. Este código se ejecuta en el servidor de aplicaciones.

### Java


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

import java.util.List;

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

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

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

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

        final GenerateEmbedUrlForAnonymousUserResult generateEmbedUrlForAnonymousUserResult
            = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

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

### JavaScript


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

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

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

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

### Python3


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

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

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

### Node.js


El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


Para asumir la función, elija una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar a su usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Utilice esta operación cuando utilice el lenguaje de marcado de aserciones de seguridad (SAML) para autenticar a sus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GenerateEmbedUrlForAnonymousUser` habilitados. 

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. Si utiliza un equipo con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_visual_role/QuickSightEmbeddingAnonymousPolicy`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario visitante. También mantiene cada sesión separada y distinta. Si utiliza una serie de servidores web, por ejemplo, para equilibrar la carga, y una sesión se vuelve a conectar a un servidor diferente, se inicia una nueva sesión.

Para obtener una URL firmada para el elemento visual, llame a `generate-embed-url-for-anynymous-user` desde el servidor de aplicaciones. Esta operación devuelve la URL del elemento visual integrable. En el siguiente ejemplo, se muestra cómo generar la URL de un elemento visual integrado mediante una llamada desde el servidor para los usuarios que realizan visitas anónimas a su portal web o aplicación.

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

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html). Puede utilizar esta y otras operaciones de la API en su propio código. 

## Paso 3: integración de la URL del elemento visual
Paso 3: integración de la URL


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En la siguiente sección, encontrará información sobre cómo utilizar el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) para incrustar la URL visual del paso 2 en su sitio web o página de aplicación. Con el SDK, puede hacer lo siguiente: 
+ Coloque el elemento visual en una página HTML.
+ Pase los parámetros al elemento visual.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llamar a la operación de la API `GenerateEmbedUrlForAnonymousUser` para generar la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida durante 10 horas. La operación de la API proporciona la URL con un código de autorización (auth) que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `generate-embed-url-for-anonymous-user`. La `quicksightdomain` de este ejemplo es la URL que utilizas para acceder a tu cuenta de Amazon Quick Sight.

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

Inserte este elemento visual en su página web mediante el [SDK de incrustación](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) de Amazon Quick Sight o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño responsivo que se modifica a medida que cambia el tamaño de la ventana. Con el SDK de incrustación de Amazon Quick Sight, también puede controlar los parámetros visuales y recibir llamadas en función de la finalización de la carga visual y de los errores. 

El dominio que va a alojar elementos visuales integrados debe estar incluido en *allowlist*, la lista de dominios aprobados de la suscripción a Quick . Este requisito protege los datos impidiendo que dominios no aprobados alojen elementos visuales y paneles integrados. Para obtener más información sobre cómo añadir dominios para imágenes y paneles integrados, consulte [Permitir la publicación de dominios en tiempo de ejecución con la API Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html).

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código reside en el servidor de aplicaciones.

### SDK 2.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

Para que este ejemplo funcione, asegúrese de utilizar el SDK de incrustación de Amazon Quick Sight para cargar el elemento visual incrustado en su sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK QuickSight de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

# Incorporar todas las funciones de la consola Amazon Quick Sight para los usuarios registrados
Integración de la consola Amazon Quick Sight

**importante**  
Amazon Quick Sight tiene nuevas operaciones de API para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando las operaciones `GetDashboardEmbedUrl` y las de la `GetSessionEmbedUrl` API para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener más información sobre la incrustación mediante las operaciones de API antiguas, consulte [Incrustar análisis mediante las GetDashboardEmbedURL](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html) operaciones de API y. GetSessionEmbedURL


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

Con la edición Enterprise, además de ofrecer paneles de solo lectura, también puedes ofrecer la experiencia de la consola Amazon Quick Sight en un portal de creación personalizado. Con este enfoque, permite a sus usuarios crear orígenes de datos, conjuntos de datos y análisis. En la misma interfaz, pueden crear, publicar y ver paneles. Si desea restringir algunos de esos permisos, también puede hacerlo.

Los usuarios que acceden a Amazon Quick Sight a través de una consola integrada deben pertenecer al grupo de seguridad del autor o del administrador. Los lectores no tienen acceso suficiente para utilizar la consola Amazon Quick Sight para la creación, independientemente de si está integrada o forma parte de la Consola de administración de AWS. Sin embargo, los autores y los administradores pueden seguir accediendo a los paneles integrados. Si desea restringir los permisos a algunas de las funciones de creación, puede añadir un perfil de permisos personalizado al usuario con la operación de la [UpdateUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateUser.html)API. Utilice la operación de [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html)API para añadir un nuevo usuario con un perfil de permisos personalizado adjunto. Para obtener más información, consulte las siguientes secciones:
+ Para obtener información sobre la creación de funciones personalizadas mediante la definición de permisos de consola personalizados, consulte [Personalización del acceso a la consola Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/customizing-permissions-to-the-quicksight-console.html).
+ Para obtener información sobre el uso de espacios de nombres para aislar usuarios, grupos y activos de Amazon Quick Sight de varios usuarios, consulte Espacios de nombres de [Amazon](https://docs.aws.amazon.com/quicksight/latest/APIReference/controlling-access.html#namespaces.html) Quick Sight.
+ Para obtener información sobre cómo añadir su propia marca a una consola Amazon Quick Sight integrada, consulte [Uso de temas en Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/themes-in-quicksight.html) y [Operaciones de la API de QuickSight temas](https://docs.aws.amazon.com/quicksight/latest/APIReference/qs-assets.html#themes). 

En las siguientes secciones, encontrará información detallada sobre cómo configurar los paneles de Amazon Quick Sight integrados para los usuarios registrados.

**Topics**
+ [

## Paso 1: configuración de permisos
](#embedded-analytics-full-console-for-authenticated-users-step-1)
+ [

## Paso 2: generación de la URL con el código de autenticación adjunto
](#embedded-analytics-full-console-for-authenticated-users-step-2)
+ [

## Paso 3: integración de la URL de la sesión de consola
](#embedded-analytics-full-console-for-authenticated-users-step-3)
+ [

# Activación de características de BI generativa en consolas incrustadas para usuarios registrados
](embedding-consoles-genbi.md)

## Paso 1: configuración de permisos
Paso 1: configuración de permisos

En la siguiente sección, puede encontrar cómo configurar los permisos de la aplicación de backend o del servidor web. Esta tarea requiere acceso administrativo a IAM.

Cada usuario que accede a Amazon Quick Sight asume un rol que le otorga acceso a Amazon Quick Sight y permisos para acceder a la sesión de consola. Para que esto sea posible, cree un rol de IAM en su AWS cuenta. Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma. Añada `quicksight:RegisterUser` permisos para garantizar que el lector pueda acceder a Amazon Quick Sight en modo de solo lectura y no tenga acceso a ningún otro dato o función de creación. La función de IAM también debe proporcionar permisos para recuperar la sesión de la consola. URLs Para ello, añada `quicksight:GenerateEmbedUrlForRegisteredUser`.

Puede crear una condición en su política de IAM que limite los dominios que los desarrolladores pueden incluir en el parámetro `AllowedDomains` de una operación de la API `GenerateEmbedUrlForAnonymousUser`. El parámetro `AllowedDomains` es opcional. Como desarrollador, tiene la opción de anular los dominios estáticos que están configurados en el menú **Gestionar Amazon Quick Sight**. En su lugar, puede enumerar hasta tres dominios o subdominios que pueden acceder a una URL generada. A continuación, esta URL se integra en el sitio web que cree. Solo los dominios que aparecen en el parámetro pueden acceder al panel integrado. Sin esta condición, usted puede incluir cualquier dominio de Internet en el parámetro `AllowedDomains`. 

**Práctica recomendada de seguridad para los operadores de condiciones de IAM**  
Los operadores de condiciones de IAM configurados incorrectamente pueden permitir el acceso no autorizado a los recursos rápidos integrados mediante variaciones de URL. Cuando utilices la clave de `quicksight:AllowedEmbeddingDomains` condición en tus políticas de IAM, utiliza operadores de condiciones que permitan dominios específicos o denieguen todos los dominios que no estén específicamente permitidos. Para obtener más información sobre los operadores de condiciones de IAM, consulte [Elementos de la política JSON de IAM: operadores de condiciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la Guía del usuario de IAM.  
Muchas variaciones de URL diferentes pueden apuntar al mismo recurso. Por ejemplo, URLs todo lo siguiente tiene el mismo contenido:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Si su política utiliza operadores que no tienen en cuenta estas variaciones de URL, un atacante puede eludir sus restricciones proporcionando variaciones de URL equivalentes.  
Debe comprobar que su política de IAM utiliza los operadores de condiciones adecuados para evitar que se eludan las vulnerabilidades y garantizar que solo los dominios a los que va destinados puedan acceder a los recursos integrados.

La siguiente política de ejemplo ofrece estos permisos. 

El siguiente ejemplo de política proporciona permiso para recuperar la URL de una sesión de consola. Puede utilizar la política sin `quicksight:RegisterUser` si va a crear usuarios antes de que accedan a una sesión integrada.

Finalmente, la identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que cuando un usuario accede a su aplicación, esta puede asumir la función en nombre del usuario y aprovisionar al usuario en Amazon Quick Sight. En el siguiente ejemplo, se muestra una muestra de política de confianza. 

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

------

Para obtener más información sobre las políticas de confianza para la autenticación de OpenID Connect o SAML, consulte las siguientes secciones de la *Guía del usuario de IAM: *
+ [Creación de un rol para identidades federadas web u OpenID Connect (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Creación de un rol para una federación SAML 2.0 (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## Paso 2: generación de la URL con el código de autenticación adjunto
Paso 2: generación de la URL

En la siguiente sección, puede obtener información sobre cómo autenticar el usuario y obtener la URL del la sesión de consola integrable en el servidor de su aplicación. 

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Al realizar los pasos descritos, se garantiza que cada espectador de la sesión de consola se aprovisione de forma exclusiva en Amazon Quick Sight. También aplica la configuración por usuario, como la seguridad de nivel de fila y los valores predeterminados dinámicos de los parámetros.

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario. Este código se ejecuta en el servidor de aplicaciones.

### Java


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

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

    private final AmazonQuickSight quickSightClient;

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

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

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

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

### JavaScript


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

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

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

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

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

### Python3


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

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

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

### Node.js


El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para generar la URL de la sesión de consola integrada. Puede utilizar esta URL en su sitio web o aplicación para mostrar la sesión de consola. 

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


El ejemplo siguiente muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para generar la URL de la sesión de consola integrada. Puede utilizar esta URL en su sitio web o aplicación para mostrar la consola. 

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


Para asumir la función, elige una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar a su usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Usa esta operación cuando utilices SAML para autenticar a tus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GenerateEmbedUrlForRegisteredUser` habilitados. Si opta por añadir just-in-time usuarios cuando abren Amazon Quick Sight por primera vez, el rol también necesita tener habilitados los permisos`quicksight:RegisterUser`.

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. Si utiliza un equipo con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_console_session_role/john.doe@example.com`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario. También evitará la limitación del acceso de los usuarios. La limitación es una función de seguridad que impide que el mismo usuario acceda a Amazon Quick Sight desde varios lugares. 

El ID de sesión del rol también se convierte en el nombre de usuario en Amazon Quick Sight. Puede utilizar este patrón para aprovisionar a sus usuarios en Amazon Quick Sight con antelación o para aprovisionarlos la primera vez que accedan a una sesión de consola. 

En el siguiente ejemplo, se muestra el comando de la CLI que puede utilizar para incluir a un usuario. Para obtener más información sobre [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html)y otras operaciones de la API de Amazon Quick Sight, consulte la [referencia de la API de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/APIReference/Welcome.html). [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.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
```

Si el usuario se ha autenticado a través de Microsoft AD, no es necesario utilizar `RegisterUser` para configurarlo. En su lugar, deberían suscribirse automáticamente la primera vez que accedan a Amazon Quick Sight. En el caso de los usuarios de Microsoft AD, puede utilizar `DescribeUser` para obtener el ARN del usuario.

La primera vez que un usuario accede a Amazon Quick Sight, también puede añadir este usuario al grupo correspondiente. En el siguiente ejemplo, se muestra el comando de la CLI para añadir un usuario a un grupo.

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

Ahora tiene un usuario de su aplicación que también es usuario de Amazon Quick Sight y que tiene acceso a la sesión de consola de Amazon Quick Sight. 

Por último, para obtener una URL firmada para la sesión de consola, llame a `generate-embed-url-for-registered-user` desde el servidor de aplicaciones. Esto devuelve la URL de la sesión de consola que se puede integrar. En el siguiente ejemplo, se muestra cómo generar la URL de una sesión de consola integrada mediante una llamada desde el servidor para los usuarios autenticados mediante AWS Managed Microsoft AD un inicio de sesión único (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"}
```

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Puede utilizar esta y otras operaciones de la API en su propio código. 

## Paso 3: integración de la URL de la sesión de consola
Paso 3: integración de la URL

En la siguiente sección, encontrará información sobre cómo utilizar el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) para incrustar la URL de la sesión de la consola del paso 3 en su sitio web o página de aplicación. Con el SDK, puede hacer lo siguiente: 
+ Coloque la sesión de consola en una página HTML.
+ Pase los parámetros a la sesión de consola.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llamar a la operación de la API `GenerateEmbedUrlForRegisteredUser` para generar la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida hasta 10 horas. La operación de la API proporciona la URL con un `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
}
```

Inserte esta sesión de consola en su página web mediante el [SDK de incrustación](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) de Amazon Quick Sight o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. Al utilizar el SDK de incrustación de Amazon Quick Sight, también puede controlar los parámetros de la sesión de consola y recibir llamadas en función de la finalización de la carga de la página y de los errores. 

El dominio que alojará los paneles integrados debe estar en la lista de dominios *permitidos, la lista* de dominios aprobados para su suscripción. Quick Este requisito protege los datos impidiendo que dominios no aprobados alojen paneles integrados. Para obtener más información sobre cómo añadir dominios para una consola integrada, consulte [Permitir publicar dominios en tiempo de ejecución con la API Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-run-time.html).

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código se genera en el servidor de aplicaciones.

### SDK 2.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

</html>
```

Para que este ejemplo funcione, asegúrese de utilizar el SDK de incrustación de Amazon Quick Sight para cargar la sesión de consola integrada en su sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

# Activación de características de BI generativa en consolas incrustadas para usuarios registrados
Activación de características de BI generativa


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

Puede activar las siguientes características de BI generativa en su consola incrustada:
+ Resúmenes ejecutivos: cuando están habilitados, los usuarios registrados de Author Pro y Reader Pro pueden generar resúmenes ejecutivos que proporcionan un resumen de toda la información que Amazon Quick Sight ha generado para que el panel de control pueda descubrir fácilmente la información clave.
+ Creación: al activarla, los usuarios Autor profesional pueden usar BI generativa para crear campos calculados, así como crear y perfeccionar elementos visuales.
+ Preguntas y respuestas: al activarlas, los usuarios Autor profesional y Lector profesional pueden utilizar las preguntas y respuestas basadas en IA para sugerir y responder preguntas relacionadas con sus datos.
+ Historias basadas en datos: al activarlas, los usuarios Autor profesional y Lector profesional pueden proporcionar detalles para generar rápidamente un primer borrador de su historia basada en datos.

**Cómo activar características de BI generativa en consolas incrustadas para usuarios registrados**
+ Siga los pasos que se indican en [Integrar todas las funciones de la consola Amazon Quick Sight para que los usuarios registrados puedan](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-full-console-for-authenticated-users.html) integrar una consola con los siguientes cambios:

  1. Al generar la URL en el paso 2, `Enabled: true` defina el `FeatureConfigurations` parámetro para cada una de las funciones que desee activar en [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)o [GenerateEmbedUrlForRegisteredUserWithIdentity](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUserWithIdentity.html) APIs, como se muestra en el siguiente ejemplo. Si no se proporciona ninguna configuración, las características están desactivadas de manera predeterminada.

     ```
     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. Al incrustar la URL de la consola con el SDK de incrustación de Amazon Quick Sight en el paso 3, defina los valores del siguiente ejemplo como desee. Si no se proporciona ninguna configuración, las características están desactivadas de manera predeterminada.
**nota**  
No existe ninguna opción de SDK para activar las historias basadas en datos. Si las historias basadas en datos están activadas con la API como se muestra en el paso anterior, estarán disponibles para los usuarios registrados.

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

# Integración de Amazon Q en la experiencia generativa de preguntas y respuestas de Amazon Quick Sight
Incrustación de la experiencia de preguntas y respuestas generativas


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En las siguientes secciones, puede encontrar información detallada sobre cómo configurar una experiencia de preguntas y respuestas generativas integrada que utilice las capacidades de NLQ mejoradas impulsadas por. LLMs La experiencia de preguntas y respuestas generativas es el sustituto recomendado de la barra de búsqueda Q incrustada y proporciona a los usuarios una experiencia de BI actualizada.

**Topics**
+ [

## Integración de Amazon Q en Amazon Quick Sight: una experiencia generativa de preguntas y respuestas para usuarios registrados
](#embedded-analytics-gen-bi-authenticated-users)
+ [

## Integración de Amazon Q en la experiencia de preguntas y respuestas de Quick Generative para usuarios anónimos (no registrados)
](#embedded-analytics-gen-bi-anonymous-users)

## Integración de Amazon Q en Amazon Quick Sight: una experiencia generativa de preguntas y respuestas para usuarios registrados
Incrustación de la experiencia de preguntas y respuestas generativas para los usuarios registrados

En las siguientes secciones, encontrará información detallada sobre cómo configurar una experiencia de preguntas y respuestas generativas integrada para los usuarios registrados de Amazon Quick Sight.

**Topics**
+ [

### Paso 1: configuración de permisos
](#embedded-analytics-gen-bi-authenticated-users-step-1)
+ [

### Paso 2: generación de la URL con el código de autenticación adjunto
](#embedded-analytics-gen-bi-authenticated-users-step-2)
+ [

### Paso 3: incrustación de la URL de la experiencia de preguntas y respuestas generativas
](#embedded-analytics-gen-bi-authenticated-users-step-3)
+ [

### Funcionalidades opcionales de la experiencia de preguntas y respuestas generativas incrustada
](#embedded-analytics-gen-bi-authenticated-users-step-4)

### Paso 1: configuración de permisos
Paso 1: configuración de permisos

En la siguiente sección, encontrará información sobre cómo configurar los permisos de la aplicación de backend o del servidor web para incrustar la experiencia de preguntas y respuestas generativas. Esta tarea requiere acceso administrativo a AWS Identity and Access Management (IAM).

Cada usuario que accede a una experiencia de preguntas y respuestas generativas asume un rol que le otorga acceso y permisos a Amazon Quick Sight. Para ello, cree un rol de IAM en su Cuenta de AWS. Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma. La función de IAM debe proporcionar permisos para recuperar la incrustación URLs de un grupo de usuarios específico. 

Con la ayuda del carácter comodín *\$1*, puede conceder los permisos necesarios para generar una URL para todos los usuarios de un espacio de nombres específico. También puede conceder permisos para generar una URL para un subconjunto de usuarios en espacios de nombres específicos. Para ello, añada `quicksight:GenerateEmbedUrlForRegisteredUser`.

Puede crear una condición en su política de IAM que limite los dominios que los desarrolladores pueden incluir en el parámetro `AllowedDomains` de una operación de la API `GenerateEmbedUrlForRegisteredUser`. El parámetro `AllowedDomains` es opcional. Ofrece a los desarrolladores la opción de anular los dominios estáticos que están configurados en el menú **Administrar Amazon Quick Sight** y, en su lugar, enumerar hasta tres dominios o subdominios que pueden acceder a una URL generada. A continuación, esta URL se integra en el sitio web del desarrollador. Solo los dominios que aparecen en el parámetro pueden acceder a la experiencia de preguntas y respuestas generativas. Sin esta condición, los desarrolladores pueden incluir cualquier dominio de Internet en el parámetro `AllowedDomains`. 

Para limitar los dominios que los desarrolladores pueden usar con este parámetro, añada una condición `AllowedEmbeddingDomains` a su política de IAM. Para obtener más información sobre el `AllowedDomains` parámetro, consulte la *referencia [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)de la API de Amazon Quick Sight*.

**Prácticas recomendadas de seguridad para los operadores de condiciones de IAM**  
Los operadores de condiciones de IAM configurados incorrectamente pueden permitir el acceso no autorizado a los recursos rápidos integrados mediante variaciones de URL. Cuando utilices la clave de `quicksight:AllowedEmbeddingDomains` condición en tus políticas de IAM, utiliza operadores de condiciones que permitan dominios específicos o denieguen todos los dominios que no estén específicamente permitidos. Para obtener más información sobre los operadores de condiciones de IAM, consulte [Elementos de la política JSON de IAM: operadores de condiciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la Guía del usuario de IAM.  
Muchas variaciones de URL diferentes pueden apuntar al mismo recurso. Por ejemplo, URLs todo lo siguiente tiene el mismo contenido:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Si su política utiliza operadores que no tienen en cuenta estas variaciones de URL, un atacante puede eludir sus restricciones proporcionando variaciones de URL equivalentes.  
Debe comprobar que su política de IAM utiliza los operadores de condiciones adecuados para evitar que se eludan las vulnerabilidades y garantizar que solo los dominios a los que va destinados puedan acceder a los recursos integrados.

La siguiente política de ejemplo ofrece estos permisos.

Además, si vas a crear usuarios primerizos que vayan a ser lectores de Amazon Quick Sight, asegúrate de añadir el `quicksight:RegisterUser` permiso en la política.

El siguiente ejemplo de política proporciona permiso para recuperar una URL incrustada para los usuarios primerizos que vayan a ser lectores de Amazon Quick Sight.

Finalmente, la identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que cuando un usuario accede a su aplicación, esta puede asumir la función en nombre del usuario y aprovisionar al usuario en Amazon Quick Sight. 

En el siguiente ejemplo, se muestra una muestra de política de confianza.

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

------

Para obtener más información sobre las políticas de confianza para la autenticación de OpenID Connect o lenguaje de marcado para confirmaciones de seguridad (SAML), consulte las siguientes secciones de la *Guía de usuario de IAM:*
+ [Creación de un rol para identidades web o de OpenID Connect Federation (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Creación de un rol para una federación SAML 2.0 (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

### Paso 2: generación de la URL con el código de autenticación adjunto
Paso 2: generación de la URL

En la siguiente sección, encontrará cómo autenticar a su usuario y obtener la URL del tema de Q integrable en su servidor de aplicaciones. Si planea integrar la experiencia de preguntas y respuestas generativas para los tipos de identidad de IAM o Amazon Quick Sight, comparta el tema Q con los usuarios.

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, la aplicación añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Al realizar los pasos descritos, se garantiza que cada espectador del tema Q se aprovisione de forma exclusiva en Amazon Quick Sight. También aplica la configuración por usuario, como la seguridad de nivel de fila y los valores predeterminados dinámicos de los parámetros. La seguridad de filas basada en etiquetas puede utilizarse para la incrustación de usuarios anónimos en la barra de Q.

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario. Este código se ejecuta en el servidor de aplicaciones.

#### Java


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

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

    private final AmazonQuickSight quickSightClient;

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

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

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

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

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

#### JavaScript


**nota**  
La generación de URL incrustadas APIs no se puede invocar directamente desde los navegadores. En su lugar, consulte el ejemplo de Node.JS.

#### Python3


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

sts = boto3.client('sts')

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

#### Node.js


El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para generar la URL de la sesión de la barra de búsqueda de Q. Puede utilizar esta URL en su sitio web o aplicación para mostrar la barra de búsqueda de 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


Para asumir la función, elija una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar al usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Utilice esta operación cuando utilice SAML para autenticar a sus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GenerateEmbedUrlForRegisteredUser` habilitados. Si opta por añadir just-in-time usuarios cuando utilizan un tema en la barra de búsqueda de Q, el rol también necesita tener habilitados los permisos. `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
```

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. En un ordenador con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_q_search_bar_role/john.doe@example.com`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario. También evitará la limitación del acceso de los usuarios. *La limitación* es una función de seguridad que impide que el mismo usuario acceda a Amazon Quick Sight desde varios lugares. 

El ID de sesión del rol también se convierte en el nombre de usuario en Amazon Quick Sight. Puede utilizar este patrón para aprovisionar a sus usuarios en Amazon Quick Sight con antelación o para aprovisionarlos la primera vez que accedan a la experiencia de preguntas y respuestas generativas. 

En el siguiente ejemplo, se muestra el comando de la CLI que puede utilizar para incluir a un usuario. Para obtener más información sobre [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html)y otras operaciones de la API de Amazon Quick Sight, consulte la [referencia de la API de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/APIReference/Welcome.html). [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.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
```

Si el usuario se ha autenticado a través de Microsoft AD, no es necesario utilizar `RegisterUser` para configurarlo. En su lugar, deberían suscribirse automáticamente la primera vez que accedan a Amazon Quick Sight. En el caso de los usuarios de Microsoft AD, puede utilizar `DescribeUser` para obtener el Nombre de recurso de Amazon (ARN) del usuario.

La primera vez que un usuario accede a Amazon Quick Sight, también puedes añadir este usuario al grupo con el que se comparte el panel. En el siguiente ejemplo, se muestra el comando de la CLI para añadir un usuario a un grupo.

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

Ahora tienes un usuario de tu aplicación que también es usuario de Amazon Quick Sight y que tiene acceso al panel de control. 

Por último, para obtener una URL firmada para el panel, llame a `generate-embed-url-for-registered-user` desde el servidor de aplicaciones. Esta operación devuelve la URL del panel integrable. En el siguiente ejemplo, se muestra cómo generar la URL de un panel integrado mediante una llamada desde el servidor para los usuarios autenticados mediante un inicio de sesión único ( AWS Managed Microsoft AD 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
```

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Puede utilizar esta y otras operaciones de la API en su propio código.

### Paso 3: incrustación de la URL de la experiencia de preguntas y respuestas generativas
Paso 3: integración de la URL

En la siguiente sección, encontrará información sobre cómo incrustar la URL de la experiencia de preguntas y respuestas generativas en su sitio web o página de la aplicación. Esto se hace con el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript). Con el SDK, puede hacer lo siguiente: 
+ Colocar la experiencia de preguntas y respuestas generativas en una página HTML.
+ Personalizar el diseño y la apariencia de la experiencia incrustada para adaptarla a las necesidades de su aplicación.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llame a la operación de la API `GenerateEmbedUrlForRegisteredUser` para generar la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida hasta 10 horas. La operación de la API proporciona la URL con un valor `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
}
```

Incorpore la experiencia de preguntas y respuestas generativas en su página web mediante el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. 

Asegúrese de que el dominio que alojará la experiencia de preguntas y respuestas generativas integrada esté en la lista de dominios *permitidos, la lista* de dominios aprobados para su suscripción a Amazon Quick Sight. Este requisito protege los datos impidiendo que dominios no aprobados alojen paneles integrados. Para obtener más información sobre cómo agregar dominios para la experiencia de preguntas y respuestas generativas incrustada, consulte [Administrar dominios](manage-domains.md).

Puede utilizar el SDK de incrustación Quick Sight de Amazon para personalizar el diseño y la apariencia de la experiencia de preguntas y respuestas generativas integrada para adaptarla a su aplicación. Use la propiedad `panelType` para configurar el estado inicial de la experiencia de preguntas y respuestas generativas cuando se muestre en su aplicación. Establezca la propiedad `panelType` en `'FULL'` para que represente el panel completo de la experiencia de preguntas y respuestas generativas. Este panel se parece a la experiencia que tienen los usuarios de Amazon Quick Sight en la consola Amazon Quick Sight. La altura del marco del panel no cambia en función de la interacción del usuario y respeta el valor establecido en la propiedad `frameOptions.height`. La siguiente imagen muestra el panel de la experiencia de preguntas y respuestas generativas que se representa cuando se establece el valor `panelType` en `'FULL'`.

Establezca la propiedad `panelType` en `'SEARCH_BAR'` para que represente la experiencia de preguntas y respuestas generativas como una barra de búsqueda. Esta barra de búsqueda se parece a la forma en que se representa la barra de búsqueda de Q cuando está incrustada en una aplicación. La barra de búsqueda preguntas y respuestas generativas se expande hasta convertirse en un panel más grande que muestra las opciones de selección de temas, la lista de sugerencias de preguntas, el panel de respuestas o el tablón de anuncios.

La altura mínima predeterminada de la barra de búsqueda de preguntas y respuestas generativas se representa cuando se carga el recurso incrustado. Se recomienda establecer el valor `frameOptions.height` en `"38px"` para optimizar la experiencia de la barra de búsqueda. Use la propiedad `focusedHeight` para establecer el tamaño óptimo del menú desplegable de selección de temas y de la lista de sugerencias de preguntas. Utilice la propiedad `expandedHeight` para establecer el tamaño óptimo del panel de respuestas y del tablón de anuncios. Si elige la opción `'SEARCH_BAR'`, se recomienda diseñar el contenedor principal con una posición (absoluta) para evitar que contenido no deseado se desplace en la aplicación. La siguiente imagen muestra la barra de búsqueda de la experiencia de preguntas y respuestas generativas que se representa cuando se establece el valor `panelType` en `'SEARCH_BAR'`.

Tras configurar la `panelType` propiedad, utilice el SDK de incrustación de Amazon Quick Sight para personalizar las siguientes propiedades de la experiencia de preguntas y respuestas generativas.
+ El título del panel de preguntas y respuestas generativas (solo se aplica a la opción `panelType: FULL`). 
+ El texto del marcador de posición de la barra de búsqueda.
+ Si se permite la selección de temas.
+ Si se muestran u ocultan los nombres de los temas.
+ Si se muestra u oculta el icono de Amazon Q (solo se aplica a la opción `panelType: FULL`).
+ Si muestra u oculta el tablón de anuncios.
+ Si los usuarios pueden maximizar el panel de preguntas y respuestas generativas a pantalla completa.
+ El tema del panel de preguntas y respuestas generativas. Se puede pasar un ARN de tema personalizado al SDK para cambiar la apariencia del contenido del marco. Los temas de inicio de Amazon Quick Sight no son compatibles con los paneles de BI generativa integrados. Para usar un tema de inicio de Amazon Quick Sight, guárdalo como tema personalizado en Amazon Quick Sight.

Cuando utilizas el SDK de incrustación Quick Sight de Amazon, la experiencia de preguntas y respuestas generativas de tu página cambia de tamaño de forma dinámica en función del estado. Al utilizar el SDK de incrustación Quick Sight de Amazon, también puede controlar los parámetros de la experiencia de preguntas y respuestas generativas y recibir llamadas en términos de finalización de la carga de la página, cambios de estado y errores. 

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código se genera en el servidor de aplicaciones.

#### SDK 2.0


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

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

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

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

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

</html>
```

Para que este ejemplo funcione, asegúrate de usar el SDK de incrustación de Amazon Quick Sight para cargar la experiencia de preguntas y respuestas generativas integrada en tu sitio web. JavaScript Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

### Funcionalidades opcionales de la experiencia de preguntas y respuestas generativas incrustada
Funcionalidades opcionales

A continuación se detallan las funcionalidades opcionales que están disponibles para la experiencia de preguntas y respuestas generativas con el SDK de incrustación. 

#### Invocación de acciones de la barra de preguntas y respuestas generativas

+ Establecer una pregunta: esta característica envía una pregunta a la experiencia de preguntas y respuestas generativas y consulta la pregunta de inmediato.

  ```
  embeddedGenerativeQnExperience.setQuestion('show me monthly revenue');
  ```
+ Cerrar el panel de respuestas (se aplica a la opción de la barra de búsqueda preguntas y respuestas generativas): esta característica cierra el panel de respuestas y devuelve el iframe al estado original de la barra de búsqueda.

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

Para obtener más información, consulte el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk).

## Integración de Amazon Q en la experiencia de preguntas y respuestas de Quick Generative para usuarios anónimos (no registrados)
Incrustación de la experiencia de preguntas y respuestas generativas para usuarios anónimos


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En las secciones siguientes, encontrará información detallada sobre cómo configurar una experiencia de preguntas y respuestas generativas incrustada para usuarios anónimos (no registrados).

**Topics**
+ [

### Paso 1: configuración de permisos
](#embedded-analytics-gen-bi-anonymous-users-step-1)
+ [

### Paso 2: generación de la URL con el código de autenticación adjunto
](#embedded-analytics-gen-bi-anonymous-users-step-2)
+ [

### Paso 3: incrustación de la URL de la experiencia de preguntas y respuestas generativas
](#embedded-analytics-gen-bi-anonymous-users-step-3)
+ [

### Funcionalidades opcionales de la experiencia de preguntas y respuestas generativas incrustada
](#embedded-analytics-gen-bi-anonymous-users-step-4)

### Paso 1: configuración de permisos
Paso 1: configuración de permisos

En la siguiente sección, encontrará información sobre cómo configurar los permisos de la aplicación de backend o del servidor web para incrustar la experiencia de preguntas y respuestas generativas. Esta tarea requiere acceso administrativo a AWS Identity and Access Management (IAM).

Cada usuario que accede a una experiencia de preguntas y respuestas generativas asume un rol que le otorga acceso y permisos a Amazon Quick Sight. Para ello, cree un rol de IAM en su Cuenta de AWS. Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma. La función de IAM debe proporcionar permisos para recuperar la incrustación URLs de un grupo de usuarios específico. 

Con la ayuda del carácter comodín *\$1*, puede conceder los permisos necesarios para generar una URL para todos los usuarios de un espacio de nombres específico. También puede conceder permisos para generar una URL para un subconjunto de usuarios en espacios de nombres específicos. Para ello, añada `quicksight:GenerateEmbedUrlForAnonymousUser`.

Puede crear una condición en su política de IAM que limite los dominios que los desarrolladores pueden incluir en el parámetro `AllowedDomains` de una operación de la API `GenerateEmbedUrlForAnonymousUser`. El parámetro `AllowedDomains` es opcional. Ofrece a los desarrolladores la opción de anular los dominios estáticos que están configurados en el menú **Administrar Amazon Quick Sight** y, en su lugar, enumerar hasta tres dominios o subdominios que pueden acceder a una URL generada. A continuación, esta URL se integra en el sitio web del desarrollador. Solo los dominios que aparecen en el parámetro pueden acceder a la barra de búsqueda de Q. Sin esta condición, los desarrolladores pueden incluir cualquier dominio de Internet en el parámetro `AllowedDomains`. 

Para limitar los dominios que los desarrolladores pueden usar con este parámetro, añada una condición `AllowedEmbeddingDomains` a su política de IAM. Para obtener más información sobre el `AllowedDomains` parámetro, consulte la *referencia [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)de la API de Amazon Quick Sight*.

**Prácticas recomendadas de seguridad para los operadores de condiciones de IAM**  
Los operadores de condiciones de IAM configurados incorrectamente pueden permitir el acceso no autorizado a los recursos rápidos integrados mediante variaciones de URL. Cuando utilices la clave de `quicksight:AllowedEmbeddingDomains` condición en tus políticas de IAM, utiliza operadores de condiciones que permitan dominios específicos o denieguen todos los dominios que no estén específicamente permitidos. Para obtener más información sobre los operadores de condiciones de IAM, consulte [Elementos de la política JSON de IAM: operadores de condiciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la Guía del usuario de IAM.  
Muchas variaciones de URL diferentes pueden apuntar al mismo recurso. Por ejemplo, URLs todo lo siguiente tiene el mismo contenido:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Si su política utiliza operadores que no tienen en cuenta estas variaciones de URL, un atacante puede eludir sus restricciones proporcionando variaciones de URL equivalentes.  
Debe comprobar que su política de IAM utiliza los operadores de condiciones adecuados para evitar que se eludan las vulnerabilidades y garantizar que solo los dominios a los que va destinados puedan acceder a los recursos integrados.

La identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que, cuando un usuario accede a su aplicación, esta puede asumir el rol en nombre del usuario para cargar la experiencia de preguntas y respuestas generativas. En el siguiente ejemplo, se muestra una muestra de política de confianza.

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

------

Para obtener más información sobre las políticas de confianza, consulte [Credenciales de seguridad temporales en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) en la *Guía del usuario de IAM*

### Paso 2: generación de la URL con el código de autenticación adjunto
Paso 2: generación de la URL

En la siguiente sección, encontrará cómo autenticar a su usuario y obtener la URL del tema de Q integrable en su servidor de aplicaciones.

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, la aplicación añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

#### Java


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

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

    private final AmazonQuickSight quickSightClient;

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

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

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

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

        GenerateEmbedUrlForAnonymousUserResult result = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

        return result.getEmbedUrl();
    }

}
```

#### JavaScript


**nota**  
 APIs No se puede acceder directamente a la generación de URL incrustadas desde los navegadores. En su lugar, consulte el ejemplo de Node.JS.

#### Python3


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

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

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

#### Node.js


El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para generar la URL de la sesión de la barra de búsqueda de Q. Puede utilizar esta URL en su sitio web o aplicación para mostrar la barra de búsqueda de 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


Para asumir la función, elija una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar al usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Utilice esta operación cuando utilice SAML para autenticar a sus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GenerateEmbedUrlForAnonymousUser` habilitados.

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. En un ordenador con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_q_search_bar_role/QuickSightEmbeddingAnonymousPolicy`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario. También evitará la limitación del acceso de los usuarios. *La limitación* es una función de seguridad que impide que el mismo usuario acceda a Amazon Quick Sight desde varios lugares. Además, mantiene cada sesión separada y distinta. Si utiliza una serie de servidores web, por ejemplo, para equilibrar la carga, y una sesión se vuelve a conectar a un servidor diferente, se inicia una nueva sesión.

Para obtener una URL firmada para el panel, llame a `generate-embed-url-for-anynymous-user` desde el servidor de aplicaciones. Esta operación devuelve la URL del panel integrable. En el siguiente ejemplo, se muestra cómo generar la URL de un panel integrado mediante una llamada desde el servidor para los usuarios que realizan visitas anónimas a su portal web o aplicación.

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

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html). Puede utilizar esta y otras operaciones de la API en su propio código.

### Paso 3: incrustación de la URL de la experiencia de preguntas y respuestas generativas
Paso 3: integración de la URL

En la siguiente sección, encontrará información sobre cómo incrustar la URL de la experiencia de preguntas y respuestas generativas en su sitio web o página de la aplicación. Esto se hace con el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript). Con el SDK, puede hacer lo siguiente: 
+ Colocar la experiencia de preguntas y respuestas generativas en una página HTML.
+ Personalizar el diseño y la apariencia de la experiencia incrustada para adaptarla a las necesidades de su aplicación.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llame a la operación de la API `GenerateEmbedUrlForAnonymousUser` para generar la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida hasta 10 horas. La operación de la API proporciona la URL con un valor `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
}
```

Incorpore la experiencia de preguntas y respuestas generativas en su página web con el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. 

Asegúrese de que el dominio en el que se alojará la experiencia de preguntas y respuestas generativas esté en la lista de dominios *permitidos, la lista* de dominios aprobados para su suscripción a Amazon Quick Sight. Este requisito protege los datos al impedir que dominios no aprobados alojen experiencias de preguntas y respuestas generativas incrustadas. Para obtener más información sobre cómo agregar dominios para la experiencia de preguntas y respuestas generativas incrustada, consulte [Administrar dominios](manage-domains.md).

Puede utilizar el SDK de incrustación Quick Sight de Amazon para personalizar el diseño y la apariencia de la experiencia de preguntas y respuestas generativas integrada para adaptarla a su aplicación. Use la propiedad `panelType` para configurar el estado inicial de la experiencia de preguntas y respuestas generativas cuando se muestre en su aplicación. Establezca la propiedad `panelType` en `'FULL'` para que represente el panel completo de la experiencia de preguntas y respuestas generativas. Este panel se parece a la experiencia que tienen los usuarios de Amazon Quick Sight en la consola Amazon Quick Sight. La altura del marco del panel no cambia en función de la interacción del usuario y respeta el valor establecido en la propiedad `frameOptions.height`. La siguiente imagen muestra el panel de la experiencia de preguntas y respuestas generativas que se representa cuando se establece el valor `panelType` en `'FULL'`.

Establezca la propiedad `panelType` en `'SEARCH_BAR'` para que represente la experiencia de preguntas y respuestas generativas como una barra de búsqueda. Esta barra de búsqueda se parece a la forma en que se representa la barra de búsqueda de Q cuando está incrustada en una aplicación. La barra de búsqueda preguntas y respuestas generativas se expande hasta convertirse en un panel más grande que muestra las opciones de selección de temas, la lista de sugerencias de preguntas, el panel de respuestas o el tablón de anuncios.

La altura mínima predeterminada de la barra de búsqueda de preguntas y respuestas generativas se representa cuando se carga el recurso incrustado. Se recomienda establecer el valor `frameOptions.height` en `"38px"` para optimizar la experiencia de la barra de búsqueda. Use la propiedad `focusedHeight` para establecer el tamaño óptimo del menú desplegable de selección de temas y de la lista de sugerencias de preguntas. Utilice la propiedad `expandedHeight` para establecer el tamaño óptimo del panel de respuestas y del tablón de anuncios. Si elige la opción `'SEARCH_BAR'`, se recomienda diseñar el contenedor principal con una posición (absoluta) para evitar que contenido no deseado se desplace en la aplicación. La siguiente imagen muestra la barra de búsqueda de la experiencia de preguntas y respuestas generativas que se representa cuando se establece el valor `panelType` en `'SEARCH_BAR'`.

Tras configurar la `panelType` propiedad, utilice el SDK de incrustación de Amazon Quick Sight para personalizar las siguientes propiedades de la experiencia de preguntas y respuestas generativas.
+ El título del panel de preguntas y respuestas generativas (solo se aplica a la opción `panelType: FULL`). 
+ El texto del marcador de posición de la barra de búsqueda.
+ Si se permite la selección de temas.
+ Si se muestran u ocultan los nombres de los temas.
+ Si se muestra u oculta el icono de Amazon Q (solo se aplica a la opción `panelType: FULL`).
+ Si muestra u oculta el tablón de anuncios.
+ Si los usuarios pueden maximizar el panel de preguntas y respuestas generativas a pantalla completa.
+ El tema del panel de preguntas y respuestas generativas. Se puede pasar un ARN de tema personalizado al SDK para cambiar la apariencia del contenido del marco. Los temas de inicio de Amazon Quick Sight no son compatibles con los paneles de BI generativa integrados. Para usar un tema de inicio de Amazon Quick Sight, guárdalo como tema personalizado en Amazon Quick Sight.

Cuando utilizas el SDK de incrustación Quick Sight de Amazon, la experiencia de preguntas y respuestas generativas de tu página cambia de tamaño de forma dinámica en función del estado. Con el SDK de incrustación Quick Sight de Amazon, también puede controlar los parámetros de la experiencia de preguntas y respuestas generativas y recibir llamadas en términos de finalización de la carga de la página, cambios de estado y errores. 

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código se genera en el servidor de aplicaciones.

#### SDK 2.0


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

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

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

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

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

</html>
```

Para que este ejemplo funcione, asegúrate de usar el SDK de incrustación de Amazon Quick Sight para cargar la experiencia de preguntas y respuestas generativas integrada en tu sitio web. JavaScript Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

### Funcionalidades opcionales de la experiencia de preguntas y respuestas generativas incrustada
Funcionalidades opcionales

A continuación se detallan las funcionalidades opcionales que están disponibles para la experiencia de preguntas y respuestas generativas con el SDK de incrustación. 

#### Invocación de acciones de la barra de preguntas y respuestas generativas

+ Establecer una pregunta: esta característica envía una pregunta a la experiencia de preguntas y respuestas generativas y consulta la pregunta de inmediato.

  ```
  embeddedGenerativeQnExperience.setQuestion('show me monthly revenue');
  ```
+ Cerrar el panel de respuestas (se aplica a la opción de la barra de búsqueda preguntas y respuestas generativas): esta característica cierra el panel de respuestas y devuelve el iframe al estado original de la barra de búsqueda.

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

Para obtener más información, consulte el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk).

# Incrustar la barra de búsqueda Quick Sight Q de Amazon (clásica)
Incrustar la barra de búsqueda Quick Sight Q de Amazon (clásica)


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

Utilice los siguientes temas para obtener información sobre cómo incrustar la barra de búsqueda de Amazon Quick Sight Q en Amazon Quick Sight APIs.

**Topics**
+ [

# Incrustar la barra de búsqueda Quick Sight Q de Amazon para usuarios registrados
](embedded-analytics-q-search-bar-for-authenticated-users.md)
+ [

# Incrustar la barra de búsqueda Quick Sight Q de Amazon para usuarios anónimos (no registrados)
](embedded-analytics-q-search-bar-for-anonymous-users.md)

# Incrustar la barra de búsqueda Quick Sight Q de Amazon para usuarios registrados
Integración de la barra de búsqueda de Q para usuarios registrados


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

En las siguientes secciones, encontrará información detallada sobre cómo configurar una barra de búsqueda integrada de Amazon Quick Sight Q para los usuarios registrados de Amazon Quick Sight.

**Topics**
+ [

## Paso 1: configuración de permisos
](#embedded-q-bar-for-authenticated-users-step-1)
+ [

## Paso 2: generación de la URL con el código de autenticación adjunto
](#embedded-q-bar-for-authenticated-users-step-2)
+ [

## Paso 3: integración de la URL de la barra de búsqueda de Q
](#embedded-q-bar-for-authenticated-users-step-3)
+ [

## Funcionalidades opcionales de incrustación en la barra de búsqueda Quick Sight Q de Amazon
](#embedded-q-bar-for-authenticated-users-step-4)

## Paso 1: configuración de permisos
Paso 1: configuración de permisos

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

En la siguiente sección, puede encontrar información sobre cómo configurar los permisos de la aplicación de backend o del servidor web para integrar la barra de búsqueda de Q. Esta tarea requiere acceso administrativo a (IAM). AWS Identity and Access Management 

Cada usuario que accede a un panel de control asume una función que le da acceso a Amazon Quick Sight y permisos para acceder al panel. Para que esto sea posible, cree un rol de IAM en su. Cuenta de AWS Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma. El rol de IAM debe proporcionar permisos para recuperar la incrustación de un grupo URLs de usuarios específico. 

Con la ayuda del carácter comodín *\$1*, puede conceder los permisos necesarios para generar una URL para todos los usuarios de un espacio de nombres específico. También puede conceder permisos para generar una URL para un subconjunto de usuarios en espacios de nombres específicos. Para ello, añada `quicksight:GenerateEmbedUrlForRegisteredUser`.

Puede crear una condición en su política de IAM que limite los dominios que los desarrolladores pueden incluir en el parámetro `AllowedDomains` de una operación de la API `GenerateEmbedUrlForRegisteredUser`. El parámetro `AllowedDomains` es opcional. Ofrece a los desarrolladores la opción de anular los dominios estáticos que están configurados en el menú **Administrar Amazon Quick Sight** y, en su lugar, enumerar hasta tres dominios o subdominios que pueden acceder a una URL generada. A continuación, esta URL se integra en el sitio web del desarrollador. Solo los dominios que aparecen en el parámetro pueden acceder a la barra de búsqueda de Q. Sin esta condición, los desarrolladores pueden incluir cualquier dominio de Internet en el parámetro `AllowedDomains`. 

Para limitar los dominios que los desarrolladores pueden usar con este parámetro, añada una condición `AllowedEmbeddingDomains` a su política de IAM. Para obtener más información sobre el `AllowedDomains` parámetro, consulte la *referencia [GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)de la API de Amazon Quick Sight*.

**Prácticas recomendadas de seguridad para los operadores de condiciones de IAM**  
Los operadores de condiciones de IAM configurados incorrectamente pueden permitir el acceso no autorizado a los recursos rápidos integrados mediante variaciones de URL. Cuando utilices la clave de `quicksight:AllowedEmbeddingDomains` condición en tus políticas de IAM, utiliza operadores de condiciones que permitan dominios específicos o denieguen todos los dominios que no estén específicamente permitidos. Para obtener más información sobre los operadores de condiciones de IAM, consulte [Elementos de la política JSON de IAM: operadores de condiciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la Guía del usuario de IAM.  
Muchas variaciones de URL diferentes pueden apuntar al mismo recurso. Por ejemplo, URLs todo lo siguiente se traduce en el mismo contenido:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Si su política utiliza operadores que no tienen en cuenta estas variaciones de URL, un atacante puede eludir sus restricciones proporcionando variaciones de URL equivalentes.  
Debe comprobar que su política de IAM utiliza los operadores de condiciones adecuados para evitar que se eludan las vulnerabilidades y garantizar que solo los dominios a los que va destinados puedan acceder a los recursos integrados.

La siguiente política de ejemplo ofrece estos permisos.

Además, si vas a crear usuarios primerizos que vayan a ser lectores de Amazon Quick Sight, asegúrate de añadir el `quicksight:RegisterUser` permiso en la política.

El siguiente ejemplo de política proporciona permiso para recuperar una URL incrustada para los usuarios primerizos que vayan a ser lectores de Amazon Quick Sight.

Finalmente, la identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que cuando un usuario accede a su aplicación, esta puede asumir la función en nombre del usuario y aprovisionar al usuario en Amazon Quick Sight. 

En el siguiente ejemplo, se muestra una muestra de política de confianza.

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

------

Para obtener más información sobre las políticas de confianza para la autenticación de OpenID Connect o lenguaje de marcado para confirmaciones de seguridad (SAML), consulte las siguientes secciones de la *Guía de usuario de IAM:*
+ [Creación de un rol para identidades web o de OpenID Connect Federation (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Creación de un rol para una federación SAML 2.0 (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

## Paso 2: generación de la URL con el código de autenticación adjunto
Paso 2: generación de la URL

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

En la siguiente sección, encontrará cómo autenticar a su usuario y obtener la URL del tema de Q integrable en su servidor de aplicaciones. Si planea incrustar la barra Q para los tipos de identidad de IAM o Amazon Quick Sight, comparta el tema Q con los usuarios.

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, la aplicación añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Al realizar los pasos descritos, se garantiza que cada espectador del tema Q se aprovisione de forma exclusiva en Amazon Quick Sight. También aplica la configuración por usuario, como la seguridad de nivel de fila y los valores predeterminados dinámicos de los parámetros.

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario. Este código se ejecuta en el servidor de aplicaciones.

### Java


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

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

            private final AmazonQuickSight quickSightClient;

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

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

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

        final GenerateEmbedUrlForRegisteredUserResult generateEmbedUrlForRegisteredUserResult = quickSightClient.generateEmbedUrlForRegisteredUser(generateEmbedUrlForRegisteredUserRequest);

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

### JavaScript


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

function generateEmbedUrlForRegisteredUser(
    accountId,
    topicId, // Topic ID to embed
    openIdToken, // Cognito-based token
    userArn, // registered user arn
    roleArn, // IAM user role to use for embedding
    sessionName, // Session name for the roleArn assume role
    allowedDomains, // Runtime allowed domain for embedding
    getEmbedUrlCallback, // GetEmbedUrl success callback method
    errorCallback // GetEmbedUrl error callback method
    ) {
    const stsClient = new AWS.STS();
    let stsParams = {
        RoleSessionName: sessionName,
        WebIdentityToken: openIdToken,
        RoleArn: roleArn
        }
    
    stsClient.assumeRoleWithWebIdentity(stsParams, function(err, data) {
        if (err) {
            console.log('Error assuming role');
            console.log(err, err.stack);
            errorCallback(err);
        } else {
            const getQSearchBarParams = {
        "AwsAccountId": accountId,
                "ExperienceConfiguration": {
                    "QSearchBar": {
                        "InitialTopicId": topicId
                    }
                },
                "UserArn": userArn,
        "AllowedDomains": allowedDomains,
        "SessionLifetimeInMinutes": 600
    };

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

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

### Python3


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

sts = boto3.client('sts')

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

### Node.js


El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para generar la URL de la sesión de la barra de búsqueda de Q. Puede utilizar esta URL en su sitio web o aplicación para mostrar la barra de búsqueda de 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


Para asumir la función, elija una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar al usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Utilice esta operación cuando utilice SAML para autenticar a sus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GenerateEmbedUrlForRegisteredUser` habilitados. Si opta por añadir just-in-time usuarios cuando utilizan un tema en la barra de búsqueda de Q, también es necesario activar los permisos para el rol. `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
```

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. En un ordenador con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_q_search_bar_role/john.doe@example.com`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario. También evitará la limitación del acceso de los usuarios. *La limitación* es una función de seguridad que impide que el mismo usuario acceda a Amazon Quick Sight desde varios lugares. 

El ID de sesión del rol también se convierte en el nombre de usuario en Amazon Quick Sight. Puede utilizar este patrón para aprovisionar a sus usuarios en Amazon Quick Sight con antelación o para aprovisionarlos la primera vez que accedan a la barra de búsqueda Q. 

En el siguiente ejemplo, se muestra el comando de la CLI que puede utilizar para incluir a un usuario. Para obtener más información sobre [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html)y otras operaciones de la API de Amazon Quick Sight, consulte la [referencia de la API de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/APIReference/Welcome.html). [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.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
```

Si el usuario se ha autenticado a través de Microsoft AD, no es necesario utilizar `RegisterUser` para configurarlo. En su lugar, deberían suscribirse automáticamente la primera vez que accedan a Amazon Quick Sight. En el caso de los usuarios de Microsoft AD, puede utilizar `DescribeUser` para obtener el Nombre de recurso de Amazon (ARN) del usuario.

La primera vez que un usuario accede a Amazon Quick Sight, también puedes añadir este usuario al grupo con el que se comparte el panel. En el siguiente ejemplo, se muestra el comando de la CLI para añadir un usuario a un grupo.

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

Ahora tienes un usuario de tu aplicación que también es usuario de Amazon Quick Sight y que tiene acceso al panel de control. 

Por último, para obtener una URL firmada para el panel, llame a `generate-embed-url-for-registered-user` desde el servidor de aplicaciones. Esta operación devuelve la URL del panel integrable. En el siguiente ejemplo, se muestra cómo generar la URL de un panel integrado mediante una llamada desde el servidor para los usuarios autenticados mediante un inicio de sesión único ( AWS Managed Microsoft AD 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}
```

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Puede utilizar esta y otras operaciones de la API en su propio código.

## Paso 3: integración de la URL de la barra de búsqueda de Q
Paso 3: integración de la URL

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

En la siguiente sección, puede encontrar cómo integrar la URL de la barra de búsqueda Q del paso 3 en su sitio web o página de la aplicación. Esto se hace con el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript). Con el SDK, puede hacer lo siguiente: 
+ Colocar la barra de búsqueda de Q en una página HTML.
+ Pasar los parámetros a la barra de búsqueda de Q.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llame a la operación de la API `GenerateEmbedUrlForRegisteredUser` para generar la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida hasta 10 horas. La operación de la API proporciona la URL con un valor `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
}
```

Inserta la barra de búsqueda Q en tu página web mediante el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. 

Para ello, asegúrate de que el dominio que alojará la barra de búsqueda Q integrada esté en la *lista de dominios permitidos*, la lista de dominios aprobados para tu suscripción a Amazon Quick Sight. Este requisito protege los datos impidiendo que dominios no aprobados alojen paneles integrados. Para obtener más información sobre cómo añadir dominios a una barra de búsqueda Q integrada, consulte [Gestión de dominios e incrustación.](https://docs.aws.amazon.com/quicksight/latest/user/manage-qs-domains-and-embedding.html)

Cuando utilizas el SDK de incrustación Quick Sight de Amazon, la barra de búsqueda Q de tu página cambia de tamaño de forma dinámica en función del estado. Al utilizar el SDK de incrustación Quick Sight de Amazon, también puedes controlar los parámetros de la barra de búsqueda Q y recibir llamadas en función de la finalización de la carga de la página y de los errores. 

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código se genera en el servidor de aplicaciones.

### SDK 2.0


```
<!DOCTYPE html>
<html>

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

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

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

                const contentOptions = {
                    hideTopicName: false, 
                    theme: '<YOUR_THEME_ID>',
                    allowTopicSelection: true,
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                console.log("Do something when Q Search content expanded");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                console.log("Do something when Q Search content collapsed");
                                break;
                            }
                            case 'Q_SEARCH_SIZE_CHANGED': {
                                console.log("Do something when Q Search size changed");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something when the Q Search is loaded.");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when the Q Search fails loading.");
                                break;
                            }
                        }
                    }
                };
                const embeddedDashboardExperience = await embeddingContext.embedQSearchBar(frameOptions, contentOptions);
            };
        </script>
    </head>

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

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

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

</html>
```

Para que este ejemplo funcione, asegúrese de utilizar el SDK de incrustación de Amazon Quick Sight para cargar el panel integrado en su sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

## Funcionalidades opcionales de incrustación en la barra de búsqueda Quick Sight Q de Amazon
Funcionalidades opcionales

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

Las siguientes funcionalidades opcionales están disponibles para la barra de búsqueda de Q integrada mediante el SDK de integración. 

### Invocación de las acciones de la barra de búsqueda de Q


Las siguientes opciones solo son compatibles con la integración de la barra de búsqueda de Q. 
+ Establecer una pregunta en la barra de búsqueda de Q: esta característica envía una pregunta a la barra de búsqueda de Q e inmediatamente la consulta. También abre automáticamente la ventana emergente de Q.

  ```
  qBar.setQBarQuestion('show me monthly revenue');
  ```
+ Cerrar la ventana emergente de Q: esta característica cierra la ventana emergente de Q y devuelve el iframe al tamaño original de la barra de búsqueda de Q.

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

Para obtener más información, consulte el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk).

# Incrustar la barra de búsqueda Quick Sight Q de Amazon para usuarios anónimos (no registrados)
Incrustar la barra de búsqueda Quick Sight Q de Amazon para usuarios anónimos


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

En las siguientes secciones, encontrará información detallada sobre cómo configurar una barra de búsqueda integrada de Amazon Quick Sight Q para usuarios anónimos (no registrados).

**Topics**
+ [

## Paso 1: configuración de permisos
](#embedded-q-bar-for-anonymous-users-step-1)
+ [

## Paso 2: generación de la URL con el código de autenticación adjunto
](#embedded-q-bar-for-anonymous-users-step-2)
+ [

## Paso 3: integración de la URL de la barra de búsqueda de Q
](#embedded-q-bar-for-anonymous-users-step-3)
+ [

## Funcionalidades opcionales de incrustación en la barra de búsqueda Quick Sight Q de Amazon
](#embedded-q-bar-for-anonymous-users-step-4)

## Paso 1: configuración de permisos
Paso 1: configuración de permisos

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

En la siguiente sección, puede encontrar información sobre cómo configurar los permisos de la aplicación de backend o del servidor web para integrar la barra de búsqueda de Q. Esta tarea requiere acceso administrativo a (IAM). AWS Identity and Access Management 

Cada usuario que accede a una barra de búsqueda Q asume un rol que le da acceso a Amazon Quick Sight y permisos para acceder a la barra de búsqueda Q. Para que esto sea posible, cree un rol de IAM en su. Cuenta de AWS Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma. El rol de IAM debe proporcionar permisos para recuperar la incrustación de un grupo URLs de usuarios específico. 

Con la ayuda del carácter comodín *\$1*, puede conceder los permisos necesarios para generar una URL para todos los usuarios de un espacio de nombres específico. También puede conceder permisos para generar una URL para un subconjunto de usuarios en espacios de nombres específicos. Para ello, añada `quicksight:GenerateEmbedUrlForAnonymousUser`.

Puede crear una condición en su política de IAM que limite los dominios que los desarrolladores pueden incluir en el parámetro `AllowedDomains` de una operación de la API `GenerateEmbedUrlForAnonymousUser`. El parámetro `AllowedDomains` es opcional. Ofrece a los desarrolladores la opción de anular los dominios estáticos que están configurados en el menú **Administrar Amazon Quick Sight** y, en su lugar, enumerar hasta tres dominios o subdominios que pueden acceder a una URL generada. A continuación, esta URL se integra en el sitio web del desarrollador. Solo los dominios que aparecen en el parámetro pueden acceder a la barra de búsqueda de Q. Sin esta condición, los desarrolladores pueden incluir cualquier dominio de Internet en el parámetro `AllowedDomains`. 

Para limitar los dominios que los desarrolladores pueden usar con este parámetro, añada una condición `AllowedEmbeddingDomains` a su política de IAM. Para obtener más información sobre el `AllowedDomains` parámetro, consulte la *referencia [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com//quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)de la API de Amazon Quick Sight*.

**Prácticas recomendadas de seguridad para los operadores de condiciones de IAM**  
Los operadores de condiciones de IAM configurados incorrectamente pueden permitir el acceso no autorizado a los recursos rápidos integrados mediante variaciones de URL. Cuando utilices la clave de `quicksight:AllowedEmbeddingDomains` condición en tus políticas de IAM, utiliza operadores de condiciones que permitan dominios específicos o denieguen todos los dominios que no estén específicamente permitidos. Para obtener más información sobre los operadores de condiciones de IAM, consulte [Elementos de la política JSON de IAM: operadores de condiciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la Guía del usuario de IAM.  
Muchas variaciones de URL diferentes pueden apuntar al mismo recurso. Por ejemplo, URLs todo lo siguiente tiene el mismo contenido:  
`https://example.com`
`https://example.com/`
`https://Example.com`
Si su política utiliza operadores que no tienen en cuenta estas variaciones de URL, un atacante puede eludir sus restricciones proporcionando variaciones de URL equivalentes.  
Debe comprobar que su política de IAM utiliza los operadores de condiciones adecuados para evitar que se eludan las vulnerabilidades y garantizar que solo los dominios a los que va destinados puedan acceder a los recursos integrados.

La identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que, cuando un usuario accede a su aplicación, esta puede asumir el rol en nombre del usuario para abrir la barra de búsqueda de Q. En el siguiente ejemplo, se muestra una muestra de política de confianza.

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

------

Para obtener más información sobre las políticas de confianza, consulte [Credenciales de seguridad temporales en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) en la *Guía del usuario de IAM*

## Paso 2: generación de la URL con el código de autenticación adjunto
Paso 2: generación de la URL

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

En la siguiente sección, encontrará cómo autenticar a su usuario y obtener la URL del tema de Q integrable en su servidor de aplicaciones.

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, la aplicación añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Para obtener más información, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/AnonymousUserQSearchBarEmbeddingConfiguration.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/AnonymousUserQSearchBarEmbeddingConfiguration.html).

### Java


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


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

            private final AmazonQuickSight quickSightClient;

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

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

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

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

                GenerateEmbedUrlForAnonymousUserResult qSearchBarEmbedUrl = quickSightClient.generateEmbedUrlForAnonymousUser(generateEmbedUrlForAnonymousUserRequest);

                return qSearchBarEmbedUrl.getEmbedUrl();
            }

        }
```

### JavaScript


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

function generateEmbedUrlForAnonymousUser(
    accountId, // YOUR AWS ACCOUNT ID
    initialTopicId, // Q TOPIC ID TO WHICH THE CONSTRUCTED URL POINTS
    quicksightNamespace, // VALID NAMESPACE WHERE YOU WANT TO DO NOAUTH EMBEDDING
    authorizedResourceArns, // Q SEARCHBAR TOPIC ARN LIST TO EMBED
    allowedDomains, // RUNTIME ALLOWED DOMAINS FOR EMBEDDING
    sessionTags, // SESSION TAGS USED FOR ROW-LEVEL SECURITY
    generateEmbedUrlForAnonymousUserCallback, // SUCCESS CALLBACK METHOD
    errorCallback // ERROR CALLBACK METHOD
    ) {
    const experienceConfiguration = {
        "QSearchBar": {
            "InitialTopicId": initialTopicId // TOPIC ID CAN BE FOUND IN THE URL ON THE TOPIC AUTHOR PAGE
        }
    };
    
    const generateEmbedUrlForAnonymousUserParams = {
        "AwsAccountId": accountId,
        "Namespace": quicksightNamespace,
        "AuthorizedResourceArns": authorizedResourceArns,
        "AllowedDomains": allowedDomains,
        "ExperienceConfiguration": experienceConfiguration,
        "SessionTags": sessionTags,
        "SessionLifetimeInMinutes": 600
    };

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

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

### Python3


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

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

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

### Node.js


El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para generar la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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


En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para generar la URL de la sesión de la barra de búsqueda de Q. Puede utilizar esta URL en su sitio web o aplicación para mostrar la barra de búsqueda de 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


Para asumir la función, elija una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar al usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Utilice esta operación cuando utilice SAML para autenticar a sus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GenerateEmbedUrlForAnonymousUser` habilitados.

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. En un ordenador con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_q_search_bar_role/QuickSightEmbeddingAnonymousPolicy`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario. También evitará la limitación del acceso de los usuarios. *La limitación* es una función de seguridad que impide que el mismo usuario acceda a Amazon Quick Sight desde varios lugares. Además, mantiene cada sesión separada y distinta. Si utiliza una serie de servidores web, por ejemplo, para equilibrar la carga, y una sesión se vuelve a conectar a un servidor diferente, se inicia una nueva sesión.

Para obtener una URL firmada para el panel, llame a `generate-embed-url-for-anynymous-user` desde el servidor de aplicaciones. Esta operación devuelve la URL del panel integrable. En el siguiente ejemplo, se muestra cómo generar la URL de un panel integrado mediante una llamada desde el servidor para los usuarios que realizan visitas anónimas a su portal web o aplicación.

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

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html). Puede utilizar esta y otras operaciones de la API en su propio código.

## Paso 3: integración de la URL de la barra de búsqueda de Q
Paso 3: integración de la URL

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

En la siguiente sección, puede encontrar cómo integrar la URL de la barra de búsqueda Q del paso 3 en su sitio web o página de la aplicación. Esto se hace con el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript). Con el SDK, puede hacer lo siguiente: 
+ Colocar la barra de búsqueda de Q en una página HTML.
+ Pasar los parámetros a la barra de búsqueda de Q.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llame a la operación de la API `GenerateEmbedUrlForAnonymousUser` para generar la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida hasta 10 horas. La operación de la API proporciona la URL con un valor `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
}
```

Inserta la barra de búsqueda Q en tu página web mediante el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. 

Para ello, asegúrate de que el dominio que alojará la barra de búsqueda Q integrada esté en la *lista de dominios permitidos*, la lista de dominios aprobados para tu suscripción a Amazon Quick Sight. Este requisito protege los datos impidiendo que dominios no aprobados alojen barras de búsqueda de Q integradas. Para obtener más información sobre cómo añadir dominios a una barra de búsqueda Q integrada, consulte [Gestión de dominios e incrustación.](https://docs.aws.amazon.com/quicksight/latest/user/manage-qs-domains-and-embedding.html)

Cuando utilizas el SDK de incrustación Quick Sight de Amazon, la barra de búsqueda Q de tu página cambia de tamaño de forma dinámica en función del estado. Al utilizar el SDK de incrustación Quick Sight de Amazon, también puedes controlar los parámetros de la barra de búsqueda Q y recibir llamadas en función de la finalización de la carga de la página y de los errores. 

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código se genera en el servidor de aplicaciones.

### SDK 2.0


```
<!DOCTYPE html>
<html>

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

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

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

                const contentOptions = {
                    hideTopicName: false, 
                    theme: '<YOUR_THEME_ID>',
                    allowTopicSelection: true,
                    onMessage: async (messageEvent, experienceMetadata) => {
                        switch (messageEvent.eventName) {
                            case 'Q_SEARCH_OPENED': {
                                console.log("Do something when Q Search content expanded");
                                break;
                            }
                            case 'Q_SEARCH_CLOSED': {
                                console.log("Do something when Q Search content collapsed");
                                break;
                            }
                            case 'Q_SEARCH_SIZE_CHANGED': {
                                console.log("Do something when Q Search size changed");
                                break;
                            }
                            case 'CONTENT_LOADED': {
                                console.log("Do something when the Q Search is loaded.");
                                break;
                            }
                            case 'ERROR_OCCURRED': {
                                console.log("Do something when the Q Search fails loading.");
                                break;
                            }
                        }
                    }
                };
                const embeddedDashboardExperience = await embeddingContext.embedQSearchBar(frameOptions, contentOptions);
            };
        </script>
    </head>

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

</html>
```

### SDK 1.0


```
<!DOCTYPE html>
<html>

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

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

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

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

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

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

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

</html>
```

Para que este ejemplo funcione, asegúrate de usar el SDK de incrustación de Amazon Quick Sight para cargar la barra de búsqueda Q incrustada en tu sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

## Funcionalidades opcionales de incrustación en la barra de búsqueda Quick Sight Q de Amazon
Funcionalidades opcionales

**nota**  
La barra de búsqueda integrada de Amazon Quick Sight Q ofrece la clásica experiencia de preguntas y respuestas de Amazon Quick Sight. Amazon Quick Sight se integra con Amazon Q Business para lanzar una nueva experiencia de preguntas y respuestas generativas. Se recomienda a los desarrolladores usar la nueva experiencia de preguntas y respuestas generativas. Para obtener más información sobre la experiencia de preguntas y respuestas generativas integrada, consulte Cómo [integrar Amazon Q en la experiencia de preguntas y respuestas generativas de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedding-gen-bi.html).

Las siguientes funcionalidades opcionales están disponibles para la barra de búsqueda de Q integrada mediante el SDK de integración. 

### Invocación de las acciones de la barra de búsqueda de Q


Las siguientes opciones solo son compatibles con la integración de la barra de búsqueda de Q. 
+ Establecer una pregunta en la barra de búsqueda de Q: esta característica envía una pregunta a la barra de búsqueda de Q e inmediatamente la consulta. También abre automáticamente la ventana emergente de Q.

  ```
  qBar.setQBarQuestion('show me monthly revenue');
  ```
+ Cerrar la ventana emergente de Q: esta característica cierra la ventana emergente de Q y devuelve el iframe al tamaño original de la barra de búsqueda de Q.

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

Para obtener más información, consulte el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk).

# Integración de análisis mediante las operaciones de la API GetDashboardEmbedURL y GetSessionEmbedURL
Otras operaciones de la API de integración


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

Las siguientes operaciones de API para incrustar los paneles de Amazon Quick Sight y la consola de Amazon Quick Sight se han sustituido por las operaciones de GenerateEmbedUrlForRegisteredUser API GenerateEmbedUrlForAnonymousUser y. Puede seguir utilizándolos para integrar los análisis en su aplicación, pero ya no se mantienen y no contienen las características o funcionalidades de integración más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html)
+ La operación [GetDashboardEmbedUrl](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html)de la API incorpora paneles interactivos.
+ La operación [GetSessionEmbedUrl](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetSessionEmbedUrl.html)de la API incorpora la consola Amazon Quick Sight.

**Topics**
+ [

# Integración de paneles para todos los usuarios mediante GetDashboardEmbedURL (API antigua)
](embedded-analytics-dashboards-with-anonymous-users-get.md)
+ [

# Integración de paneles para usuarios registrados mediante GetDashboardEmbedUrl (API antigua)
](embedded-analytics-dashboards-for-authenticated-users-get.md)
+ [

# Incrustar la consola Amazon Quick Sight mediante GetSessionEmbedUrl (API antigua)
](embedded-analytics-full-console-for-authenticated-users-get.md)

# Integración de paneles para todos los usuarios mediante GetDashboardEmbedURL (API antigua)


**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En las siguientes secciones, encontrará información detallada sobre cómo configurar los paneles de Amazon Quick Sight integrados para todos los usuarios (usuarios no autenticados) que utilicen una URL. GetDashboardEmbed

**Topics**
+ [

# Paso 1: configuración de permisos
](embedded-analytics-dashboards-with-anonymous-users-get-step-1.md)
+ [

# Paso 2: obtención de la URL con el código de autenticación adjunto
](embedded-analytics-dashboards-with-anonymous-users-get-step-2.md)
+ [

# Paso 3 integración de la URL del panel
](embedded-analytics-dashboards-with-anonymous-users-get-step-3.md)

# Paso 1: configuración de permisos
Paso 1: configuración de permisos

**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En la siguiente sección, puede encontrar cómo configurar los permisos de la aplicación de backend o del servidor web. Esta tarea requiere acceso administrativo a IAM.

Cada usuario que accede a un panel de control asume un rol que le da acceso a Amazon Quick Sight y permisos para acceder al panel. Para que esto sea posible, cree un rol de IAM en su AWS cuenta. Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma.

La siguiente política de ejemplo ofrece estos permisos para usar con `IdentityType=ANONYMOUS`. Para que este enfoque funcione, también necesita un paquete de sesiones, o un precio por capacidad de sesión, en su AWS cuenta. De lo contrario, cuando un usuario intenta acceder al panel de control, se devuelve el error `UnsupportedPricingPlanException`. 

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

****  

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

------

La identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que, cuando un usuario accede a su aplicación, esta puede asumir el rol en nombre del usuario para abrir el panel. En el siguiente ejemplo, se muestra un rol denominado `QuickSightEmbeddingAnonymousPolicy`, que cuenta con la política de ejemplo anterior como recurso. 

Para obtener más información sobre las políticas de confianza, consulte [Credenciales de seguridad temporales en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) en la *Guía del usuario de IAM*.

# Paso 2: obtención de la URL con el código de autenticación adjunto
Paso 2: obtención de la URL

**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En la siguiente sección, puede obtener información sobre cómo autenticarse en nombre del visitante anónimo y obtener la URL del panel integrable en el servidor de su aplicación. 

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario. Transfiere un identificador como ID de sesión de rol único. Este código se ejecuta en el servidor de aplicaciones.

------
#### [ 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 ]

El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para obtener la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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

En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para obtener la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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

Para asumir la función, elige una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar al usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Utilice esta operación cuando utilice el lenguaje de marcado de aserciones de seguridad (SAML) para autenticar a sus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GetDashboardEmbedURL` habilitados. 

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. Si utiliza un equipo con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_dashboard_role/QuickSightEmbeddingAnonymousPolicy`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario visitante. También mantiene cada sesión separada y distinta. Si utiliza una serie de servidores web, por ejemplo, para equilibrar la carga, y una sesión se vuelve a conectar a un servidor diferente, se inicia una nueva sesión.

Para obtener una URL firmada para el panel, llame a `get-dashboard-embed-url` desde el servidor de aplicaciones. Esta operación devuelve la URL del panel integrable. En el siguiente ejemplo, se muestra cómo obtener la URL de un panel integrado mediante una llamada desde el servidor para los usuarios que realizan visitas anónimas a su portal web o aplicación.

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

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html). Puede utilizar esta y otras operaciones de la API en su propio código. 

------

# Paso 3 integración de la URL del panel
Paso 3: integración de la URL

**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En la siguiente sección, encontrará información sobre cómo puede utilizar el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) para incrustar la URL del panel de control del paso 2 en su sitio web o página de aplicación. Con el SDK, puede hacer lo siguiente: 
+ Coloque el panel en una página HTML.
+ Transferir los parámetros al panel.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llamar a la operación de la API `GetDashboardEmbedUrl` para obtener la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida durante 10 horas. La operación de la API proporciona la URL con un `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
}
```

Inserte este panel en su página web mediante el [SDK de incrustación](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) de Amazon Quick Sight o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. Con el SDK de incrustación de Amazon Quick Sight, también puede controlar los parámetros del panel de control y recibir llamadas en términos de errores o de finalización de la carga de la página. 

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código reside en el servidor de aplicaciones.

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

Para que este ejemplo funcione, asegúrese de utilizar el SDK de incrustación de Amazon Quick Sight para cargar el panel integrado en su sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK QuickSight de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

# Integración de paneles para usuarios registrados mediante GetDashboardEmbedUrl (API antigua)


**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

En las siguientes secciones, encontrará información detallada sobre cómo configurar los paneles de Amazon Quick Sight integrados para los usuarios registrados que los utilizan`GetDashboardEmbedUrl`.

**Topics**
+ [

# Paso 1: configuración de permisos
](embedded-dashboards-for-authenticated-users-get-step-1.md)
+ [

# Paso 2: obtención de la URL con el código de autenticación adjunto
](embedded-dashboards-for-authenticated-users-get-step-2.md)
+ [

# Paso 3 integración de la URL del panel
](embedded-dashboards-for-authenticated-users-get-step-3.md)

# Paso 1: configuración de permisos
Paso 1: configuración de permisos

**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

En la siguiente sección, puede encontrar cómo configurar los permisos de la aplicación de backend o del servidor web. Esta tarea requiere acceso administrativo a IAM.

Cada usuario que accede a un panel de control asume un rol que le da acceso a Amazon Quick Sight y permisos para acceder al panel. Para que esto sea posible, cree un rol de IAM en su AWS cuenta. Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma. El rol de IAM debe proporcionar permisos para recuperar el panel. URLs Para ello, añada `quicksight:GetDashboardEmbedUrl`.

La siguiente política de ejemplo ofrece estos permisos para usar con `IdentityType=IAM`. 

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

****  

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

------

El siguiente ejemplo de política proporciona permiso para recuperar la URL de un panel. Utiliza la política con `quicksight:RegisterUser` si va a crear usuarios nuevos que vayan a ser lectores de Amazon Quick Sight. 

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

****  

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

------

Si utiliza `QUICKSIGHT` como su `identityType`, y proporciona el Nombre de recurso de Amazon (ARN) del usuario, también debe permitir la acción `quicksight:GetAuthCode` en su política. La siguiente política de ejemplo proporciona este permiso.

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

****  

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

------

La identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que cuando un usuario accede a su aplicación, esta puede asumir la función en nombre del usuario y aprovisionar al usuario en Amazon Quick Sight. En el siguiente ejemplo, se muestra un rol denominado `embedding_quicksight_dashboard_role`, que cuenta con la política de ejemplo anterior como recurso. 

Para obtener más información sobre las políticas de confianza para la autenticación de OpenID Connect o SAML, consulte las siguientes secciones de la *Guía del usuario de IAM: *
+ [Creación de un rol para identidades web o de OpenID Connect Federation (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Creación de un rol para una federación SAML 2.0 (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

# Paso 2: obtención de la URL con el código de autenticación adjunto
Paso 2: obtención de la URL

**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

En la siguiente sección, puede obtener información sobre cómo autenticar el usuario y obtener la URL del panel integrable en el servidor de su aplicación. 

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Al realizar los pasos descritos, se garantiza que cada visor del panel se aprovisione de forma exclusiva en Amazon Quick Sight. También aplica la configuración por usuario, como la seguridad de nivel de fila y los valores predeterminados dinámicos de los parámetros.

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario. Este código se ejecuta en el servidor de aplicaciones.

------
#### [ 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 ]

El siguiente ejemplo muestra el archivo JavaScript (Node.js) que puede usar en el servidor de aplicaciones para obtener la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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

En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para obtener la URL del panel integrado. Puede utilizar esta URL en su sitio web o aplicación para mostrar el panel. 

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

Para asumir la función, elige una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar al usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Utilice esta operación cuando utilice SAML para autenticar a sus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GetDashboardEmbedURL` habilitados. Si opta por añadir usuarios just-in-time la primera vez que abren un panel de control, el rol también necesita tener habilitados los permisos. `quicksight:RegisterUser`

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. Si utiliza un equipo con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_dashboard_role/john.doe@example.com`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario. También evitará la limitación del acceso de los usuarios. *La limitación* es una función de seguridad que impide que el mismo usuario acceda a Amazon Quick Sight desde varios lugares. 

El ID de sesión del rol también se convierte en el nombre de usuario en Amazon Quick Sight. Puede utilizar este patrón para aprovisionar a sus usuarios en Amazon Quick Sight con antelación o para aprovisionarlos la primera vez que accedan al panel de control. 

En el siguiente ejemplo, se muestra el comando de la CLI que puede utilizar para incluir a un usuario. Para obtener más información sobre [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html)y otras operaciones de la API de Amazon Quick Sight, consulte la [referencia de la API de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/APIReference/Welcome.html). [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.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
```

Si el usuario se ha autenticado a través de Microsoft AD, no es necesario utilizar `RegisterUser` para configurarlo. En su lugar, deberían suscribirse automáticamente la primera vez que accedan a Amazon Quick Sight. En el caso de los usuarios de Microsoft AD, puede utilizar `DescribeUser` para obtener el ARN del usuario.

La primera vez que un usuario accede a Amazon Quick Sight, también puedes añadir este usuario al grupo con el que se comparte el panel. En el siguiente ejemplo, se muestra el comando de la CLI para añadir un usuario a un grupo.

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

Ahora tienes un usuario de tu aplicación que también es usuario de Amazon Quick Sight y que tiene acceso al panel de control. 

Por último, para obtener una URL firmada para el panel, llame a `get-dashboard-embed-url` desde el servidor de aplicaciones. Esta operación devuelve la URL del panel integrable. En el siguiente ejemplo, se muestra cómo obtener la URL de un panel integrado mediante una llamada desde el servidor para los usuarios autenticados a través del IAM AWS Managed Microsoft AD 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
```

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html). Puede utilizar esta y otras operaciones de la API en su propio código. 

------

# Paso 3 integración de la URL del panel
Paso 3: integración de la URL

**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

En la siguiente sección, encontrará información sobre cómo puede utilizar el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) para incrustar la URL del panel de control del paso 3 en su sitio web o página de aplicación. Con el SDK, puede hacer lo siguiente: 
+ Coloque el panel en una página HTML.
+ Transferir los parámetros al panel.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llamar a la operación de la API `GetDashboardEmbedUrl` para obtener la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida durante 10 horas. La operación de la API proporciona la URL con un `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
}
```

Inserta este panel en tu página web mediante el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. Con el SDK de incrustación de Amazon Quick Sight, también puede controlar los parámetros del panel de control y recibir llamadas en términos de errores o de finalización de la carga de la página. 

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código se genera en el servidor de aplicaciones.

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

Para que este ejemplo funcione, asegúrese de utilizar el SDK de incrustación de Amazon Quick Sight para cargar el panel integrado en su sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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

# Incrustar la consola Amazon Quick Sight mediante GetSessionEmbedUrl (API antigua)


**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).


|  | 
| --- |
|  Se aplica a: Enterprise Edition  | 


|  | 
| --- |
|    Público objetivo: desarrolladores de Amazon Quick  | 

En las siguientes secciones, encontrará información detallada sobre cómo ofrecer la experiencia de la consola Amazon Quick Sight en un portal de creación con una marca personalizada para los usuarios registrados que utilizan la API. `GetSessionEmbedUrl` 

**Topics**
+ [

# Paso 1: configuración de permisos
](embedded-analytics-full-console-for-authenticated-users-get-step-1.md)
+ [

# Paso 2: obtención de la URL con el código de autenticación adjunto
](embedded-analytics-full-console-for-authenticated-users-get-step-2.md)
+ [

# Paso 3: integración de la URL de la sesión de consola
](embedded-analytics-full-console-for-authenticated-users-get-step-3.md)

# Paso 1: configuración de permisos
Paso 1: configuración de permisos

**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

En la siguiente sección, puede encontrar cómo configurar los permisos de la aplicación de backend o del servidor web. Esta tarea requiere acceso administrativo a IAM.

Cada usuario que accede a Amazon Quick Sight asume un rol que le otorga acceso a Amazon Quick Sight y permisos para acceder a la sesión de consola. Para que esto sea posible, cree un rol de IAM en su AWS cuenta. Asocie una política de IAM al rol para proporcionar permisos a cualquier usuario que lo asuma. Añada `quicksight:RegisterUser` permisos para garantizar que el lector pueda acceder a Amazon Quick Sight en modo de solo lectura y no tenga acceso a ningún otro dato o función de creación. La función de IAM también debe proporcionar permisos para recuperar la sesión de la consola. URLs Para ello, añada `quicksight:GetSessionEmbedUrl`.

La siguiente política de ejemplo ofrece estos permisos para usar con `IdentityType=IAM`. 

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

****  

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

------

El siguiente ejemplo de política proporciona permiso para recuperar la URL de una sesión de consola. Utilice la política sin `quicksight:RegisterUser` si va a crear usuarios antes de que accedan a una sesión integrada.

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

****  

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

------

Si utiliza `QUICKSIGHT` como su `identityType`, y proporciona el Nombre de recurso de Amazon (ARN) del usuario, también debe permitir la acción `quicksight:GetAuthCode` en su política. La siguiente política de ejemplo proporciona este permiso.

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

****  

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

------

La identidad de IAM de su aplicación debe tener asociada una política de confianza para permitir el acceso al rol que acaba de crear. Esto significa que cuando un usuario accede a su aplicación, esta puede asumir la función en nombre del usuario y aprovisionar al usuario en Amazon Quick Sight. En el siguiente ejemplo, se muestra un rol denominado `embedding_quicksight_console_session_role`, que cuenta con la política de ejemplo anterior como recurso. 

Para obtener más información sobre las políticas de confianza para la autenticación de OpenID Connect o SAML, consulte las siguientes secciones de la *Guía del usuario de IAM: *
+ [Creación de un rol para identidades web o de OpenID Connect Federation (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)
+ [Creación de un rol para una federación SAML 2.0 (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)

# Paso 2: obtención de la URL con el código de autenticación adjunto
Paso 2: obtención de la URL

**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

En la siguiente sección, puede obtener información sobre cómo autenticar el usuario y obtener la URL del la sesión de consola integrable en el servidor de su aplicación. 

Cuando un usuario accede a su aplicación, esta asume el rol de IAM en nombre del usuario. A continuación, añade el usuario a Amazon Quick Sight, si ese usuario aún no existe. A continuación, transfiere un identificador como ID de sesión de rol único. 

Al realizar los pasos descritos, se garantiza que cada espectador de la sesión de consola se aprovisione de forma exclusiva en Amazon Quick Sight. También aplica la configuración por usuario, como la seguridad de nivel de fila y los valores predeterminados dinámicos de los parámetros.

Los siguientes ejemplos realizan la autenticación de IAM en nombre del usuario. Este código se ejecuta en el servidor de aplicaciones.

------
#### [ 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 ]

En el siguiente ejemplo, se muestra el archivo JavaScript (Node.js) que puede utilizar en el servidor de aplicaciones para obtener la URL de la sesión de consola integrada. Puede utilizar esta URL en su sitio web o aplicación para mostrar la sesión de consola. 

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

En el siguiente ejemplo, se muestra el código .NET/C\$1 que puede usar en el servidor de aplicaciones para obtener la URL de la sesión de consola. Puede utilizar esta URL en su sitio web o aplicación para mostrar la consola. 

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

Para asumir la función, elige una de las siguientes AWS Security Token Service (AWS STS) operaciones de API:
+ [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)— Utilice esta operación cuando utilice una identidad de IAM para asumir la función.
+ [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)— Utilice esta operación cuando utilice un proveedor de identidad web para autenticar al usuario. 
+ [AssumeRoleWithSaml](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)— Utilice esta operación cuando utilice SAML para autenticar a sus usuarios.

En el siguiente ejemplo, se muestra el comando de la CLI para definir el rol de IAM. El rol debe tener los permisos de `quicksight:GetSessionEmbedUrl` habilitados. Si opta por añadir just-in-time usuarios cuando abren Amazon Quick Sight por primera vez, el rol también necesita tener habilitados los permisos`quicksight:RegisterUser`.

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

La operación `assume-role` devuelve tres parámetros de salida: la clave de acceso, la clave secreta y el token de sesión. 

**nota**  
Si se produce un error `ExpiredToken` al llamar a la operación `AssumeRole`, probablemente se debe a que el `SESSION TOKEN` anterior aún se encuentra en las variables de entorno. Para retirarlo, establezca las variables siguientes:  
*AWS\$1ACCESS\$1KEY\$1ID* 
*AWS\$1SECRET\$1ACCESS\$1KEY* 
*AWS\$1SESSION\$1TOKEN* 

En el siguiente ejemplo, se muestra cómo definir estos tres parámetros en la CLI. Si utiliza un equipo con Microsoft Windows, utilice `set` en lugar de `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"
```

Al ejecutar estos comandos, se define el ID de sesión del rol del usuario que visita su sitio web como `embedding_quicksight_console_session_role/john.doe@example.com`. El ID de sesión del rol está compuesto por el nombre del rol de `role-arn` y el valor de `role-session-name`. Al utilizar el ID de sesión del rol único para cada usuario, se garantiza que se definan los permisos correspondientes para cada usuario. También evitará la limitación del acceso de los usuarios. La limitación es una función de seguridad que impide que el mismo usuario acceda a Amazon Quick Sight desde varios lugares. 

El ID de sesión del rol también se convierte en el nombre de usuario en Amazon Quick Sight. Puede utilizar este patrón para aprovisionar a sus usuarios en Amazon Quick Sight con antelación o para aprovisionarlos la primera vez que accedan a una sesión de consola. 

En el siguiente ejemplo, se muestra el comando de la CLI que puede utilizar para incluir a un usuario. Para obtener más información sobre [RegisterUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html)y otras operaciones de la API de Amazon Quick Sight, consulte la [referencia de la API de Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/APIReference/Welcome.html). [DescribeUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.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
```

Si el usuario se ha autenticado a través de Microsoft AD, no es necesario utilizar `RegisterUser` para configurarlo. En su lugar, deberían suscribirse automáticamente la primera vez que accedan a Amazon Quick Sight. En el caso de los usuarios de Microsoft AD, puede utilizar `DescribeUser` para obtener el ARN del usuario.

La primera vez que un usuario accede a Amazon Quick Sight, también puede añadir este usuario al grupo correspondiente. En el siguiente ejemplo, se muestra el comando de la CLI para añadir un usuario a un grupo.

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

Ahora tiene un usuario de su aplicación que también es usuario de Amazon Quick Sight y que tiene acceso a la sesión de consola de Amazon Quick Sight. 

Por último, para obtener una URL firmada para la sesión de consola, llame a `get-session-embed-url` desde el servidor de aplicaciones. Esto devuelve la URL de la sesión de consola que se puede integrar. En el siguiente ejemplo, se muestra cómo obtener la URL de una sesión de consola integrada mediante una llamada desde el servidor para los usuarios autenticados mediante AWS Managed Microsoft AD un inicio de sesión único (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
```

Para obtener más información sobre cómo usar esta operación, consulte [https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetSessionEmbedUrl.html](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetSessionEmbedUrl.html). Puede utilizar esta y otras operaciones de la API en su propio código. 

------

# Paso 3: integración de la URL de la sesión de consola
Paso 3: integración de la URL

**importante**  
Amazon Quick Sight tiene novedades APIs para incorporar análisis: `GenerateEmbedUrlForAnonymousUser` y`GenerateEmbedUrlForRegisteredUser`.  
Puede seguir utilizando `GetDashboardEmbedUrl` y `GetSessionEmbedUrl` APIs para incrustar paneles y la consola Amazon Quick Sight, pero no incluyen las capacidades de incrustación más recientes. Para obtener la experiencia de up-to-date incrustación más reciente, consulte [Incrustar los análisis de Amazon Quick Sight en sus aplicaciones](https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html).

En la siguiente sección, encontrará información sobre cómo puede utilizar el [SDK de incrustación de Amazon Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) (JavaScript) para incrustar la URL de la sesión de la consola del paso 3 en su sitio web o página de aplicación. Con el SDK, puede hacer lo siguiente: 
+ Coloque la sesión de consola en una página HTML.
+ Pase los parámetros a la sesión de consola.
+ Resolver los estados de error con mensajes que se personalizan en su aplicación.

Llamar a la operación de la API `GetSessionEmbedUrl` para obtener la dirección URL que puede integrar en la aplicación. Esta URL es válida durante 5 minutos, y la sesión resultante es válida durante 10 horas. La operación de la API proporciona la URL con un `auth_code` que permite una sesión con inicio único. 

El siguiente es un ejemplo de respuesta de `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"
}
```

Inserte esta sesión de consola en su página web mediante el [SDK de incrustación](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk) de Amazon Quick Sight o añadiendo esta URL a un iframe. Si estableces un número fijo de altura y anchura (en píxeles), Amazon Quick Sight los usará y no cambiará la imagen a medida que la ventana cambie de tamaño. Si establece un porcentaje relativo de altura y anchura, Amazon Quick Sight proporciona un diseño adaptable que se modifica a medida que cambia el tamaño de la ventana. Al utilizar el SDK de incrustación de Amazon Quick Sight, también puede controlar los parámetros de la sesión de consola y recibir llamadas en función de la finalización de la carga de la página y de los errores. 

En el siguiente ejemplo, se muestra cómo utilizar la URL generada. Este código se genera en el servidor de aplicaciones.

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

Para que este ejemplo funcione, asegúrese de utilizar el SDK de incrustación de Amazon Quick Sight para cargar la sesión de consola integrada en su sitio web utilizando JavaScript. Para obtener su copia, siga uno de estos pasos:
+ Descargue el [SDK de incrustación de Amazon Quick Sight](https://github.com/awslabs/amazon-quicksight-embedding-sdk#step-3-create-the-quicksight-session-object) desde GitHub. Este repositorio lo mantiene un grupo de desarrolladores de Amazon Quick Sight.
+ Descargue la última versión del SDK de incrustación desde [https://www.npmjs.com/package/amazon-quicksight-embedding-sdk](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk).
+ Si lo usas `npm` para JavaScript dependencias, descárgalo e instálalo ejecutando el siguiente comando.

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