> ## Documentation Index
> Fetch the complete documentation index at: https://docs.iru.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Snowflake

> Conecta Snowflake a Iru Compliance con autenticación JWT de par de claves y acceso a ACCOUNT_USAGE para recopilar evidencia de concesiones de roles, usuarios y gobernanza de datos.

### Acerca de Snowflake

Iru recopila el **uso de almacenes y de la cuenta**, los **metadatos de bases de datos y esquemas**, los **roles y concesiones** y el **historial de inicios de sesión y consultas** de Snowflake, principalmente mediante las vistas **`SNOWFLAKE.ACCOUNT_USAGE`**. La autenticación usa **autenticación de par de claves**: **JWT** de corta duración firmados con tu **clave privada RSA**, verificados con la **clave pública** registrada en el **usuario** de Snowflake que usa Iru.

### Cómo funciona

```http lines theme={null}
Authorization: Bearer YOUR_SIGNED_JWT
X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT
```

Los JWT son de **corta duración** (unos **60 segundos**); Iru los vuelve a generar con la clave y los detalles de la cuenta configurados.

| Detalle | Valor |
| - | - |
| **Categoría** | Bases de datos |
| **Autenticación** | JWT de par de claves |

Referencias oficiales: [Key-pair authentication](https://docs.snowflake.com/en/user-guide/key-pair-auth), [Account identifiers](https://docs.snowflake.com/en/user-guide/admin-account-identifier), [REST API](https://docs.snowflake.com/en/developer-guide/snowflake-rest-api/snowflake-rest-api), [ACCOUNT\_USAGE](https://docs.snowflake.com/en/sql-reference/account-usage).

### Requisitos previos

* **`SECURITYADMIN`** (o equivalente) para asignar **`RSA_PUBLIC_KEY`** en un usuario de servicio dedicado.
* **OpenSSL** (u otra herramienta) para generar un par de claves RSA de **2048 bits** (o más).
* Tu **identificador de cuenta** (preferiblemente `orgname-accountname`, o el localizador heredado con región/nube si es necesario).

### Conectar Snowflake a Iru

<Tabs>
  <Tab title="Snowflake">
    <Note>
      Completa esta pestaña antes de conectar la fuente en Compliance.
    </Note>

    <Steps>
      <Step title="Confirma el acceso de administrador de Snowflake">
        Inicia sesión en Snowsight o en la consola clásica con **`SECURITYADMIN`** (o equivalente) para poder ejecutar instrucciones **`ALTER USER`** y **`GRANT`** para el usuario de la integración.
      </Step>

      <Step title="Prepara una estación de trabajo segura">
        Usa un equipo de confianza con **OpenSSL** (u otra herramienta RSA que apruebe tu equipo de seguridad). Guardarás **`snowflake_private_key.pem`** solo en tu almacén seguro. Nunca lo confirmes en git ni lo envíes al soporte de Snowflake.
      </Step>

      <Step title="Genera un par de claves RSA">
        Ejemplo con OpenSSL:

        ```bash lines theme={null}
        openssl genrsa -out snowflake_private_key.pem 2048
        openssl rsa -in snowflake_private_key.pem -pubout -out snowflake_public_key.pem
        ```

        Protege **`snowflake_private_key.pem`**. Nunca lo confirmes en un repositorio ni lo compartas con Snowflake.
      </Step>

      <Step title="Registra la clave pública en un usuario de Snowflake">
        Como administrador, elimina los encabezados PEM y los saltos de línea de **`snowflake_public_key.pem`** para que solo quede el cuerpo en base64 y luego ejecuta:

        ```sql theme={null}
        ALTER USER YOUR_USERNAME SET RSA_PUBLIC_KEY='YOUR_PUBLIC_KEY';
        ```

        Snowflake permite **dos** claves por usuario (`RSA_PUBLIC_KEY` / `RSA_PUBLIC_KEY_2`) para la rotación. Asigna la nueva clave a **`RSA_PUBLIC_KEY_2`**, actualiza Iru y luego elimina la clave anterior.
      </Step>

      <Step title="Genera un JWT para el asistente">
        Usa **Snowflake CLI** o una biblioteca. Por ejemplo:

        ```bash lines theme={null}
        snow connection generate-jwt \
          --account YOUR_ACCOUNT_IDENTIFIER \
          --user YOUR_USERNAME \
          --private-key-path snowflake_private_key.pem
        ```

        Copia la cadena del JWT para el protocolo de enlace inicial con Iru; el producto se encarga de la regeneración continua.
      </Step>

      <Step title="Concede acceso a ACCOUNT_USAGE">
        El usuario de la integración necesita un rol que pueda leer los metadatos compartidos de **`SNOWFLAKE`**, por ejemplo:

        ```sql lines theme={null}
        GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE YOUR_ROLE;
        GRANT ROLE YOUR_ROLE TO USER YOUR_USERNAME;
        ```
      </Step>
    </Steps>

    <Note>
      Continúa en la pestaña [**Iru Compliance**](#iru-compliance).
    </Note>
  </Tab>

  <Tab title="Iru Compliance">
    <Note>
      Primero completa la pestaña [**Snowflake**](#snowflake).
    </Note>

    <Steps>
      <Step title="Abre Sources">
        En Iru Compliance, en la barra de navegación izquierda, expande **Cumplimiento** y selecciona **Fuentes**.

        <Frame>
          <img src="https://mintcdn.com/iru/tI0HDLDwHj8r9Ile/assets/media/images/iru-navigation-compliance-sources.png?fit=max&auto=format&n=tI0HDLDwHj8r9Ile&q=85&s=87dcef15fc17d2fb9a6e53f454e41710" alt="Navegación izquierda: Compliance expandido, Sources seleccionado" width="410" height="1024" data-path="assets/media/images/iru-navigation-compliance-sources.png" />
        </Frame>
      </Step>

      <Step title="Activa Snowflake">
        Busca **Snowflake** (usa **Categoría** o **Buscar por nombre o descripción**). En esa tarjeta, activa el **toggle**. Es posible que se abra una pestaña o ventana del navegador para el asistente del conector.
      </Step>

      <Step title="Introduce la cuenta y el host en el asistente">
        Elige el patrón de host que corresponda a tu cuenta:

        * Estándar: `https://YOUR_ACCOUNT_IDENTIFIER.snowflakecomputing.com`
        * **PrivateLink**: `https://YOUR_ACCOUNT_IDENTIFIER.privatelink.snowflakecomputing.com`

        Introduce **`account_identifier`** y confirma las variables del servidor antes de continuar.
      </Step>

      <Step title="Pega el JWT">
        Cuando se te solicite, pega el **JWT**.
      </Step>

      <Step title="Finaliza la conexión">
        Selecciona **Enviar token de Bearer**. Cuando la conexión se realiza correctamente, el asistente muestra **Conexión configurada**.
      </Step>

      <Step title="Confirma que la fuente está activa">
        Cierra la pestaña del navegador **Iru está solicitando acceso a servicios externos**, luego vuelve a **Cumplimiento** → **Fuentes** y confirma que la tarjeta **Snowflake** está **Activo**.
      </Step>
    </Steps>
  </Tab>
</Tabs>

### Solución de problemas

<AccordionGroup>
  <Accordion title="No se abre nada al activar la fuente">
    Revisa la configuración del **bloqueador de ventanas emergentes** para el sitio de Iru e inténtalo de nuevo.
  </Accordion>

  <Accordion title="Fallaron las variables del servidor">
    La sesión del asistente caducó. Desactiva y vuelve a activar la fuente, y luego inténtalo de nuevo.
  </Accordion>

  <Accordion title="Validación de JWT / 401">
    Ejecuta **`DESCRIBE USER`** para confirmar que la huella digital coincide y que la clave privada forma par con la clave pública registrada.
  </Accordion>

  <Accordion title="Cadena de cuenta incorrecta">
    Es preferible el formato **`org-account`**; los localizadores heredados pueden necesitar el sufijo de **región/nube**.
  </Accordion>

  <Accordion title="PrivateLink">
    Asegúrate de que el tráfico de salida de Iru pueda llegar a tu endpoint; agrégalo a la lista de permitidos si es necesario.
  </Accordion>

  <Accordion title="Falta ACCOUNT_USAGE">
    Concede **`IMPORTED PRIVILEGES`** en **`SNOWFLAKE`** al rol de Iru.
  </Accordion>
</AccordionGroup>

### Consideraciones

<CardGroup cols={2}>
  <Card title="Iru no ejecuta consultas arbitrarias en tus…" icon="circle-info">
    Iru **no** ejecuta consultas arbitrarias en tus tablas. Lee metadatos orientados a la gobernanza y vistas de uso.
  </Card>
</CardGroup>

### Artículos relacionados

<CardGroup cols={2}>
  <Card title="Administración de fuentes" icon="plug" href="/es/compliance/sources-management">
    Explora y administra todas las fuentes de Compliance.
  </Card>

  <Card title="Primeros pasos con Compliance" icon="rocket" href="/es/compliance/getting-started-with-compliance">
    Marcos, acciones y **Artefactos**.
  </Card>

  <Card title="Descripción general de Iru" icon="layer-group" href="/es/iru/platform-overview/iru-overview">
    Cómo encajan Endpoint, Compliance e Identity.
  </Card>

  <Card title="Administración de Artifacts" icon="folder-open" href="/es/compliance/artifacts-management">
    Carga, revisa y organiza la evidencia de fuentes y acciones.
  </Card>
</CardGroup>
