Zarządzanie tajemnicami funkcji

Używaj sekretów, aby zapewnić wrażliwą konfigurację, taką jak osobiste tokeny dostępu i klucze API, do swoich funkcji. Nigdy nie koduj na stałe wartości sekretów w kodzie źródłowym ani nie udostępniaj ich frontendowi. Odczytaj je w czasie wykonywania, wywołując ctx.getSecret().

Wymagania wstępne

  • Aplikacja Fabric z zainicjalizowanymi funkcjami. Instrukcje konfiguracji znajdziesz w sekcji Używaj funkcji w Fabric Apps.
  • Aplikacja została wdrożona co najmniej raz z npx rayfin up. rayfin secret set i rayfin secret list odnoszą się do aktywnego wdrożonego elementu i kończą się niepowodzeniem, jeśli nie istnieje zdalny punkt końcowy.
  • Tajna wartość wymagana przez twoją funkcję.

Ustaw tajne

Z rootu aplikacji włącz funkcję funkcji i ustaw sekret:

npx rayfin secret set API_KEY

Polecenie prosi o podanie wartości i maskuje wprowadzane dane. Aby zaktualizować istniejący sekret, uruchom to samo polecenie ponownie. Nowa wartość zastępuje istniejącą.

Ważna

Nie umieszczaj sekretnej wartości w poleceniu ani nie zapisuj jej w systemie kontroli wersji.

Lista tajemnic

Wymień skonfigurowane nazwy sekretów:

npx rayfin secret list

Polecenie wyświetla tajne nazwy i znaczniki czasu, ale nigdy nie pokazuje wartości tajnych.

Uzyskaj dostęp do sekretu z funkcji

Wywołaj ctx.getSecret('NAME'), aby pobrać sekret dla bieżącego wywołania. Metoda zwraca undefined, gdy wpis tajny nie jest skonfigurowany, więc jawnie obsłuż opcjonalne wpisy tajne lub podaj odpowiednią domyślną wartość niejawną.

Następująca funkcja pobiera plik z repozytorium GitHub. Publiczne repozytoria nie wymagają osobistego tokena dostępu (PAT). Dla prywatnych repozytoriów funkcja dodaje wpis GITHUB_PAT secret do żądania:

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

Tablica pustych połączeń wskazuje, że funkcja nie deklaruje zewnętrznej grupy odbiorców zasobów. PAT to sekret, a nie token zasobów dostarczany przez platformę.

Konfiguruj sekrety według środowiska

Podaj tajne wartości w środowisku uruchomieniowym funkcji:

  • Rozwój lokalny: Dodaj sekretne wartości do Values sekcji .rayfin/functions/local.settings.json Lokalny host Functions odczytuje wartości środowiska funkcji z tego pliku.
  • Fabric: Konfiguruj sekrety dla wdrożonego przedmiotu w portalu Fabric.

Używaj tej samej nazwy sekretu w każdym środowisku. Na przykład skonfiguruj GITHUB_PAT lokalnie i w usłudze Fabric, a następnie odczytaj je za pomocą ctx.getSecret('API_KEY') w obu środowiskach.

Ważna

Nie zatwierdzaj tajnych wartości w pliku rayfin/functions/local.settings.json ani w żadnym innym pliku w systemie kontroli wersji. Przechowuj w plikach, które zatwierdzasz, tylko nietajne przykłady lub elementy zastępcze.