Gestionar secretos de funciones

Utiliza secretos para proporcionar configuraciones sensibles, como tokens de acceso personales y claves API, a tus funciones. Nunca codifiques directamente los valores secretos en el código fuente ni los expongas al frontend. Léalas en tiempo de ejecución llamando a ctx.getSecret().

Prerequisites

  • Una aplicación de Fabric con funciones inicializadas. Para las instrucciones de configuración, consulta Usar funciones en aplicaciones de Fabric.
  • La app se desplegó al menos una vez con npx rayfin up. rayfin secret set y rayfin secret list apuntan al elemento desplegado activo y fallan cuando no existe un endpoint remoto.
  • Un valor secreto requerido por tu función.

Establecimiento de un secreto

Desde la raíz de la app, activa la función de funciones y establece el secreto:

npx rayfin secret set API_KEY

El comando solicita el valor y enmascara la entrada. Para actualizar un secreto existente, ejecuta el mismo comando de nuevo. El nuevo valor reemplaza al valor existente.

Important

No incluyas un valor secreto en el comando ni lo incorpores al control de versiones.

Enumerar secretos

Enumera los nombres secretos configurados:

npx rayfin secret list

El comando muestra nombres secretos y marcas de tiempo, pero nunca muestra valores secretos.

Acceder a un secreto desde una función

Llama a ctx.getSecret('NAME') para obtener un secreto de la invocación en curso. El método se devuelve undefined cuando el secreto no está configurado, así que gestiona los secretos opcionales explícitamente o proporciona un valor predeterminado no secreto apropiado.

La siguiente función obtiene un archivo de un repositorio de GitHub. Los repositorios públicos no requieren un token de acceso personal (PAT). Para repositorios privados, la función añade el secreto GITHUB_PAT a la solicitud:

import {
  UserDataFunctions,
  type RayfinContext,
} from '@microsoft/fabric-user-data-functions';

const udf = new UserDataFunctions();

udf.func(
  'getGitHubFile',
  async (
    owner: string,
    repo: string,
    path: string,
    ref: string,
    ctx: RayfinContext,
  ): Promise<string> => {
    const pat = ctx.getSecret('GITHUB_PAT');
    const headers: Record<string, string> = {
      Accept: 'application/vnd.github.raw+json',
      'User-Agent': 'rayfin-app',
    };

    if (pat) {
      headers.Authorization = `Bearer ${pat}`;
    }

    const encodedPath = path
      .split('/')
      .map(encodeURIComponent)
      .join('/');
    const url =
      `https://api.github.com/repos/${encodeURIComponent(owner)}/` +
      `${encodeURIComponent(repo)}/contents/${encodedPath}` +
      `?ref=${encodeURIComponent(ref || 'main')}`;

    const response = await fetch(url, { headers });
    if (!response.ok) {
      throw new Error(`GitHub ${response.status}: ${await response.text()}`);
    }

    return response.text();
  },
  [],
);

El array de conexiones vacías indica que la función no declara una audiencia de recursos externa. Un PAT es un secreto, no un token de recurso proporcionado por la plataforma.

Configurar secretos por entorno

Proporciona valores secretos en el entorno donde se ejecuta la función:

  • Desarrollo local: Añadir valores secretos a la Values sección de rayfin/functions/local.settings.json. El host local de Functions lee los valores del entorno de funciones de este archivo.
  • Fabric: Configurar los secretos para el elemento desplegado en el portal Fabric.

Usa el mismo nombre secreto en cada entorno. Por ejemplo, configure GITHUB_PAT localmente y en Fabric, y luego léalo con ctx.getSecret('API_KEY') en ambos entornos.

Important

No comprometas valores secretos en rayfin/functions/local.settings.json ni ningún otro archivo en el control de versiones. Guarda solo ejemplos que no sean secretos o marcadores de posición en los archivos que confirmes.