関数秘密の管理

個人アクセストークンやAPIキーなどの機密設定を関数に提供するために秘密を使いましょう。 秘密の値をソースコードにハードコードしたり、フロントエンドに露出させたりしてはいけません。 実行時に ctx.getSecret()を呼んで読み取ってください。

前提条件

  • 関数が初期化されたFabricアプリです。 セットアップ手順については「Fabric Appsの関数使用」を参照してください。
  • アプリは少なくとも一度は npx rayfin upと共に展開しました。 rayfin secret set rayfin secret listアクティブ展開されたアイテムをターゲットにし、リモートエンドポイントが存在しない場合に失敗します。
  • 関数に必要な秘密の値です。

シークレットを設定する

アプリのルートから、関数機能を有効にして秘密設定をします:

npx rayfin secret set API_KEY

コマンドプロンプトは値を求め、入力を遮断します。 既存のシークレットを更新するには、同じコマンドを再度実行します。 新しい値は既存の価値に代わるものです。

Important

コマンドに秘密の値を含まなければ、ソース管理にコミットしないでください。

シークレットのリスト

設定された秘密名をリストに挙げます:

npx rayfin secret list

コマンドは秘密の名前とタイムスタンプを表示しますが、秘密の値は表示しません。

関数から秘密にアクセスする

現在の呼び出しの秘密を回収するために ctx.getSecret('NAME') を呼び出せ。 このメソッドはシークレットが設定されていない undefined 返すため、オプションシークレットを明示的に扱うか、適切な非シークレットデフォルトを提供します。

以下の関数はGitHubリポジトリからファイルを取得します。 公開リポジトリはパーソナルアクセストークン(PAT)を必要としません。 プライベートリポジトリの場合、関数はリクエストに GITHUB_PAT 秘密を追加します:

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

empty connections arrayは、関数が外部リソースオーディエンスを宣言していないことを示しています。 PATは秘密であり、プラットフォームが提供するリソーストークンではありません。

環境ごとに秘密を設定する

関数が動作する環境で秘密の値を提供します:

  • 地域開発:rayfin/functions/local.settings.jsonのValuesセクションに秘密の価値を追加してください。 ローカルの関数ホストはこのファイルから関数環境の値を読み込みます。
  • Fabric:Fabricポータルで展開したアイテムの秘密を設定します。

各環境で同じ秘密の名前を使うこと。 例えば、ローカルでGITHUB_PATをFabricに設定し、両方の環境でctx.getSecret('API_KEY')で読み込むという方法です。

Important

rayfin/functions/local.settings.jsonや他のファイルにシークレット値をソース管理にコミットしないでください。 コミットしたファイルには、秘密でない例やプレースホルダーのみを保存してください。