Gerencie segredos de função

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

Pré-requisitos

  • Um aplicativo Fabric com funções inicializadas. Para instruções de configuração, veja Usar Funções em Apps Fabric.
  • O aplicativo foi implantado pelo menos uma vez com npx rayfin up. rayfin secret set e rayfin secret list miram no item ativo implantado e falham quando não existe um endpoint remoto.
  • Um valor secreto exigido pela sua função.

Definir um segredo

A partir da raiz do app, ative o recurso de funções e defina o segredo:

npx rayfin secret set API_KEY

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

Important

Não inclua um valor secreto no comando nem o comprometa no controle de versão.

Listar segredos

Liste os nomes secretos configurados:

npx rayfin secret list

O comando exibe nomes secretos e carimbos de data, mas nunca exibe valores secretos.

Acesse um segredo de uma função

Ligue ctx.getSecret('NAME') para recuperar um segredo da invocação atual. O método retorna undefined quando o segredo não está configurado, então lide explicitamente com segredos opcionais ou forneça um padrão não secreto apropriado.

A função a seguir recebe um arquivo de um repositório do GitHub. Repositórios públicos não exigem 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 de conexões vazias indica que a função não declara uma audiência externa de recursos. 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 roda:

  • Desenvolvimento local: Adicionar valores secretos à Values seção de rayfin/functions/local.settings.json. O host local do Functions lê os valores de ambiente das funções deste arquivo.
  • Fabric: Configure os segredos do item implantado no portal do Fabric.

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

Important

Não comprometa valores secretos em rayfin/functions/local.settings.json ou qualquer outro arquivo no controle de versão. Armazene apenas exemplos não secretos ou marcadores de lugar nos arquivos que você enviar.