A függvény titkos kulcsainak kezelése

Használj titkokat arra, hogy érzékeny konfigurációt biztosíts, például személyes hozzáférési tokeneket és API kulcsokat a funkcióidhoz. Soha ne kódolj titkos értékeket a forráskódban, és ne tegyed fel a frontendben. Olvassa be őket futásidőben a ctx.getSecret() meghívásával.

Prerequisites

  • Inicializált funkciókkal rendelkező Fabric-alkalmazás. A beállítási utasításokért lásd: Használd a funkciókat a Fabric alkalmazásokban.
  • Az alkalmazás legalább egyszer üzembe lett helyezve a következővel: npx rayfin up. rayfin secret set és rayfin secret list célozza meg az aktív telepített elemet, és hibás, ha nincs távoli végpont.
  • Egy titkos érték, amit a funkciód követeli.

Titkos kód beállítása

Az alkalmazás gyökérből engedélyezze a funkciók funkcióját, és állítsa be a titkot:

npx rayfin secret set API_KEY

A parancs megadja az értéket, és elfedi a bemenetedet. Egy meglévő titok frissítéséhez ugyanazt a parancsot újra futtatjuk. Az új érték felváltja a meglévő értéket.

Important

Ne adj meg titkos adatot a parancsban, és ne véglegesítsd azt a forráskód-kezelőbe.

Titkok listázása

Listázd fel a konfigurált titkos neveket:

npx rayfin secret list

A parancs titkos neveket és időbélyegeket jelenít meg, de soha nem mutatja meg a titkos értékeket.

Férjen hozzá egy titokhoz egy funkcióból

Hívja meg a(z) ctx.getSecret('NAME') elemet, hogy lekérjen egy titkot az aktuális meghíváshoz. A metódus akkor tér vissza, undefined ha a titok nincs konfigurálva, ezért kezeld az opcionális titkokat kifejezetten vagy biztosíts megfelelő nem titkos alapértelmezet.

A következő függvény egy fájlt kap egy GitHub tárolóból. A nyilvános tárolókhoz nem kell személyes hozzáférési token (PAT). Privát tárolók esetén a függvény hozzáadja a GITHUB_PAT titkot a kéréshez:

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

Az üres kapcsolatok tömbje azt jelzi, hogy a függvény nem jelöl külső erőforrás-közönséget. A PAT egy titkos, nem egy platform által biztosított erőforrás-token.

Titkok konfigurálása környezet szerint

Biztosítsa a titkos értékeket abban a környezetben, ahol a függvény fut:

  • Helyi fejlesztés: Rejtett Values értékeket adj hozzá a szekcióhoz rayfin/functions/local.settings.json. A helyi Functions hoszt ebből a fájlból olvassa fel a függvénykörnyezet értékeit.
  • Fabric: Konfiguráld a titkokat a telepített elemhez a Fabric portálban.

Használd ugyanazt a titkos nevet minden környezetben. Például konfiguráld a GITHUB_PAT elemet helyileg és a Fabricben, majd olvasd be a ctx.getSecret('API_KEY') elemmel mindkét környezetben.

Important

Ne véglegesítsen titkos adatokat a verziókezelőbe a(z) rayfin/functions/local.settings.json vagy bármely más fájlban. Csak nem titkos példákat vagy helyjelölőket tárolj azokban a fájlokban, amelyeket bekötsz.