함수 비밀 관리

개인 액세스 토큰이나 API 키와 같은 민감한 구성을 기능에 제공하기 위해 비밀을 사용하세요. 비밀 값을 소스 코드에 하드코딩하거나 프론트엔드에 노출하지 마세요. 런타임에 ctx.getSecret()를 호출하여 읽으세요.

사전 요구 사항

  • 함수가 초기화된 Fabric 앱입니다. 설정 지침은 'Fabric 앱에서 기능 사용'을 참조하세요.
  • 앱이 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();
  },
  [],
);

빈 연결 배열은 해당 함수가 외부 리소스 언디언스를 선언하지 않음을 나타냅니다. PAT은 플랫폼에서 제공하는 자원 토큰이 아니라 비밀 토큰입니다.

환경별로 비밀을 구성

함수가 실행되는 환경에서 비밀 값을 제공하세요:

  • 국소 발전: 의 rayfin/functions/local.settings.json섹션에 Values 비밀 값을 추가합니다. 로컬 함수 호스트는 이 파일에서 함수 환경 값을 읽습니다.
  • Fabric: 배포된 아이템의 비밀을 Fabric 포털에서 설정하세요.

각 환경에서 같은 비밀 이름을 사용하세요. 예를 들어, 로컬과 Fabric에서 GITHUB_PAT를 구성한 다음, 두 환경 모두에서 ctx.getSecret('API_KEY')로 읽어보세요.

Important

소스 컨트롤에 비밀 값 rayfin/functions/local.settings.json 이나 다른 파일을 커밋하지 마세요. 커밋한 파일에는 비밀이 아닌 예제나 자리 표시자만 저장하세요.