Gérer les secrets de fonction

Utilisez des secrets pour fournir des configurations sensibles, telles que des jetons d’accès personnels et des clés API, à vos fonctions. Ne codez jamais en dur des valeurs secrètes dans le code source ni ne les exposez au frontend. Lisez-les à l’exécution en appelant ctx.getSecret().

Prerequisites

  • Une application Fabric avec des fonctions initialisées. Pour les instructions de configuration, voir Utiliser les fonctions dans les applications Fabric.
  • L’application a été déployée au moins une fois avec npx rayfin up. rayfin secret set et rayfin secret list ciblent l’élément déployé actif et échouent lorsqu’aucun point de terminaison distant n’existe.
  • Une valeur secrète requise par votre fonction.

Définir un secret

Depuis la racine de l’application, activez la fonction fonctions et définissez le secret :

npx rayfin secret set API_KEY

La commande vous demande la valeur et masque votre saisie. Pour mettre à jour un secret existant, relancez la même commande. La nouvelle valeur remplace la valeur existante.

Important

N’incluez pas de secret dans la commande et ne l’archivez pas dans le système de gestion de versions.

Lister les secrets

Listez les noms secrets configurés :

npx rayfin secret list

La commande affiche les noms secrets et les horodatages, mais n’affiche jamais les valeurs secrètes.

Accéder à un secret d’une fonction

Appelez ctx.getSecret('NAME') pour récupérer un secret pour l’invocation en cours. La méthode revient undefined lorsque le secret n’est pas configuré, donc gérer explicitement les secrets optionnels ou fournir un défaut non secret approprié.

La fonction suivante obtient un fichier provenant d’un dépôt GitHub. Les dépôts publics ne nécessitent pas de jeton d’accès personnel (PAT). Pour les dépôts privés, la fonction ajoute le GITHUB_PAT secret à la requête :

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();
  },
  [],
);

Le tableau de connexions vide indique que la fonction ne déclare pas d’audience de ressources externe. Un PAT est un secret, pas un jeton de ressource fourni par la plateforme.

Configurez les secrets par environnement

Fournir des valeurs secrètes dans l’environnement où la fonction s’exécute :

  • Développement local : Ajouter des valeurs secrètes à la Values section de rayfin/functions/local.settings.json. L’hôte local des fonctions lit les valeurs de l’environnement des fonctions à partir de ce fichier.
  • Fabric : Configurez les secrets pour l’élément déployé dans le portail Fabric.

Utilisez le même nom secret dans chaque environnement. Par exemple, configurez GITHUB_PAT localement et dans Fabric, puis lisez-le avec ctx.getSecret('API_KEY') dans les deux environnements.

Important

Ne validez pas de valeurs secrètes dans rayfin/functions/local.settings.json ni dans aucun autre fichier du contrôle de code source. Stockez uniquement des exemples non secrets ou des espaces réservés dans les fichiers que vous commitéz.