Funktionsgeheimnisse verwalten

Verwenden Sie Geheimnisse, um sensible Konfigurationen, wie persönliche Zugriffstoken und API-Schlüssel, für Ihre Funktionen bereitzustellen. Man sollte niemals geheime Werte im Quellcode fest programmieren oder sie dem Frontend zugänglich machen. Lesen Sie sie zur Laufzeit, indem Sie ctx.getSecret() aufrufen.

Voraussetzungen

  • Eine Fabric-App mit initialisierten Funktionen. Anweisungen zum Einrichten finden Sie unter Use Functions in Fabric Apps.
  • Die App wurde mindestens einmal mit npx rayfin up bereitgestellt. rayfin secret set und rayfin secret list zielt auf das aktiv eingesetzte Element und scheitert, wenn kein entfernter Endpunkt existiert.
  • Ein geheimer Wert, der von Ihrer Funktion benötigt wird.

Festlegen eines Geheimnisses

Im Stammverzeichnis der App aktivieren Sie das Feature „Functions“ und legen das Secret fest:

npx rayfin secret set API_KEY

Der Befehl fordert den Wert an und maskiert deine Eingabe. Um ein bestehendes Geheimnis zu aktualisieren, führe denselben Befehl erneut aus. Der neue Wert ersetzt den bestehenden Wert.

Important

Füge keinen geheimen Wert in den Befehl ein und checke ihn nicht in die Versionsverwaltung ein.

Geheimnisse auflisten

Listen Sie die konfigurierten Geheimnamen auf:

npx rayfin secret list

Der Befehl zeigt geheime Namen und Zeitstempel an, aber nie geheime Werte.

Zugriff auf ein Geheimnis aus einer Funktion

Rufen Sie ctx.getSecret('NAME') auf, um ein Geheimnis für die aktuelle Invocation abzurufen. Die Methode gibt undefined zurück, wenn das Secret nicht konfiguriert ist. Behandeln Sie optionale Secrets daher explizit oder geben Sie einen geeigneten nicht geheimen Standardwert an.

Die folgende Funktion erhält eine Datei aus einem GitHub-Repository. Öffentliche Repositories benötigen keinen persönlichen Zugriffstoken (PAT). Für private Repositorien fügt die Funktion das Geheimnis GITHUB_PAT zur Anfrage hinzu:

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

Das leere Verbindungs-Array zeigt an, dass die Funktion keine externe Ressource-Audience deklariert. Ein PAT ist ein Geheimnis, kein von der Plattform bereitgestellter Ressourcentoken.

Secrets nach Umgebung konfigurieren

Geben Sie geheime Werte in der Umgebung an, in der die Funktion ausgeführt wird:

  • Lokale Entwicklung: Fügen Sie dem Values Abschnitt von rayfin/functions/local.settings.jsonGeheimwerte hinzu. Der lokale Functions-Host liest Funktionsumgebungswerte aus dieser Datei.
  • Fabric: Konfigurieren Sie Geheimnisse für den eingesetzten Gegenstand im Fabric-Portal.

Verwenden Sie in jeder Umgebung denselben Geheimnamen. Konfigurieren Sie GITHUB_PAT beispielsweise lokal und in Fabric, und lesen Sie es dann in beiden Umgebungen mit ctx.getSecret('API_KEY') aus.

Important

Übertragen Sie keine geheimen Werte in rayfin/functions/local.settings.json oder eine andere Datei in die Quellcode. Speichere nur nicht geheime Beispiele oder Platzhalter in Dateien, die du committest.