Gerir os segredos da função

Use segredos para fornecer configurações sensíveis, como tokens de acesso pessoais e chaves API, às suas funções. Nunca codifiquem diretamente os valores secretos no código-fonte nem os exponham ao frontend. Leia-os em tempo de execução chamando ctx.getSecret().

Pré-requisitos

  • Uma aplicação Fabric com funções inicializadas. Para instruções de configuração, consulte Usar Funções em Aplicações Fabric.
  • A aplicação foi implementada pelo menos uma vez com npx rayfin up. rayfin secret set e rayfin secret list visam o item ativo implementado e falham quando não existe um endpoint remoto.
  • Um valor secreto exigido pela tua função.

Defina um segredo

A partir da raiz da aplicação, ativa a funcionalidade de funções e define o segredo:

npx rayfin secret set API_KEY

O comando solicita o valor e oculta os caracteres introduzidos. Para atualizar um segredo existente, execute novamente o mesmo comando. O novo valor substitui o valor existente.

Importante

Não incluas um valor secreto no comando nem o guardes no controlo de versões.

Listar segredos

Liste os nomes secretos configurados:

npx rayfin secret list

O comando mostra nomes secretos e carimbos temporais, mas nunca mostra valores secretos.

Aceder a um segredo a partir de uma função

Chame ctx.getSecret('NAME') para obter um segredo para a invocação atual. O método retorna undefined quando o segredo não está configurado, por isso trata explicitamente dos segredos opcionais ou fornece um padrão não secreto apropriado.

A função seguinte obtém um ficheiro de um repositório do GitHub. Os repositórios públicos não requerem um token de acesso pessoal (PAT). Para repositórios privados, a função adiciona o GITHUB_PAT segredo ao pedido:

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

O array vazio de ligações indica que a função não declara um destinatário de recurso externo. Um PAT é um segredo, não um token de recurso fornecido pela plataforma.

Configurar segredos por ambiente

Forneça valores secretos no ambiente onde a função é executada:

  • Desenvolvimento local: Adicionar valores secretos à Values secção de rayfin/functions/local.settings.json. O host local do Functions lê os valores de ambiente da função a partir deste ficheiro.
  • Fabric: Configurar segredos para o item implementado no portal Fabric.

Usa o mesmo nome secreto em cada ambiente. Por exemplo, configure GITHUB_PAT localmente e no Fabric, e leia-o com ctx.getSecret('API_KEY') em ambos os ambientes.

Importante

Não comprometas valores secretos em rayfin/functions/local.settings.json ou qualquer outro ficheiro no controlo de versão. Guarda apenas exemplos não secretos ou marcadores de lugar nos ficheiros que enviares.