콘텐츠로 이동
Study NoteLangfuse

10. 보안과 데이터 경계

가장 강한 masking 지점은 Langfuse Worker가 아니라 민감정보가 아직 애플리케이션 안에 있을 때다

이 장에서 처음 나오는 말5개
data minimization
질문에 답하는 데 필요한 최소한의 content와 metadata만 수집하는 원칙이다.
client-side masking
SDK가 network로 보내기 전에 애플리케이션에서 민감정보를 제거하는 방식이다.
server-side masking
Langfuse ingestion pipeline이 중앙 callback으로 event를 가공하는 self-hosted EE 기능이다.
project key
SDK·API 요청을 project에 인증하는 public/secret key 한 쌍이다.
RBACRole-Based Access Control
organization·project role에 따라 UI와 관리 기능 권한을 나누는 방식이다.
PII가 섞일 수 있는 사용자 입력이 앱 경계 masking을 지나 SDK·Web·Worker를 거쳐 ClickHouse와 UI까지 가는 동안 어디서 가려지는지 보여주는 경로

Server-side masking이 ClickHouse 전에 실행돼도 공식 self-host 경로에서는 raw event가 S3에 먼저 놓일 수 있다. “중앙 masking이 있으니 민감정보가 저장되지 않는다”라고 가정하지 않는다.

필드기본 정책예외
model·usage·latency수집model명이 기밀 taxonomy면 alias
prompt/response기본 masking 또는 미수집승인된 workload와 짧은 retention
user id가명화reversible mapping은 별도 보호
session id랜덤/opaque이메일·전화번호 사용 금지
tool argumentsschema별 allowlistcredential·raw document 제거
retrieved contentdocument id·score 중심전문은 별도 승인
metadatakey allowlist자유-form dump 금지

SDK debug mode와 exception stack도 data path다. production에서 debug log가 prompt와 key를 남기지 않는지 확인한다.

층장점한계
client-side민감정보가 app boundary를 떠나지 않음여러 팀의 구현 일관성 필요
server-side callback중앙 정책과 안전망self-hosted EE, callback latency/장애, raw event 선저장 고려

가장 민감한 data는 client에서 제거하고 server callback은 우회·누락을 잡는 safety net으로 쓴다. Server callback의 fail-open은 availability를 지키지만 masking 없이 저장할 수 있고, fail-closed는 privacy를 지키지만 trace를 버릴 수 있다. workload classification에 따라 mode와 alert를 정한다.

  • public key만으로 인증이 끝나지 않는다. secret key와 함께 Basic Auth에 사용한다.
  • frontend/browser에 secret key를 넣지 않는다. backend 또는 collector가 trace를 보낸다.
  • production·staging과 독립 service를 project/key로 분리한다.
  • 한 key를 전사 공용으로 쓰지 않고 workload owner·rotation·last used를 추적한다.
  • key를 log·trace metadata·Helm value repository에 남기지 않는다.
  • rotation은 새 key 배포 → ingest 확인 → old key revoke 순으로 겹쳐서 한다.

Self-hosted는 email/password와 SSO를 지원한다. 조직이 OIDC/SSO를 쓰면 public URL과 NEXTAUTH_URL, callback URL, account linking을 검증하고 username/password 비활성화 여부를 정한다.

계층통제
instance누가 account를 만들 수 있는가
organizationowner·admin·member 역할
projecttrace·prompt·dataset 접근
prompt deploymentproduction label 변경 권한
APIproject key와 관리 API 권한

Enterprise 기능 여부가 role·protected label·SSO 형태에 영향을 줄 수 있으므로 license availability를 도입 version에서 확인한다.

Langfuse container 자체가 TLS termination을 맡지 않는다. Gateway/Load Balancer 또는 service mesh에서 TLS를 처리하고, 다음 hop의 암호화 요구를 정한다.

  • SDK → Gateway: TLS, 사내 CA와 hostname 검증
  • Gateway → Web: 내부 HTTP 허용 또는 mTLS
  • Web/Worker → storage: provider가 지원하는 TLS와 server identity 검증
  • Worker → judge LLM: LiteLLM allowlist와 data zone 보존
  • Admin UI: SSO·CSP·cookie domain과 public trace 기능 통제

NetworkPolicy는 Web과 Worker를 같은 egress rule로 묶지 않는다. Web은 client ingress를 받고, Worker는 queue/storage와 선택적 LLM callback으로 나간다.

공식 문서에서 API key는 SALT로 hash되고 console JWT는 NEXTAUTH_SECRET, 저장된 LLM/integration credential은 ENCRYPTION_KEY로 보호된다. Storage at-rest encryption과 application-level encryption은 서로 대체하지 않는다.

이 key들은 Git이나 일반 ConfigMap이 아니라 Secret manager에 두고 DB backup의 전체 수명만큼 복구 가능하게 보존한다. key rotation 전에 어떤 column을 재암호화해야 하는지 version별 절차를 확인한다.

Trace/session public sharing은 일반 project membership check를 우회하는 의도적 예외다. 내부 production에서는 기본 비활성·승인 정책을 두고, 공개 전에 prompt·tool argument·metadata·media 전체를 확인한다.

Blob export, PostHog/Mixpanel 연동, backup도 새로운 data processor이자 egress다. UI만 private라고 데이터가 사내에 머무는 것이 아니다.

  • canary PII와 fake secret이 client masking 뒤 어디에도 남지 않는가
  • S3 raw event와 error log도 검사했는가
  • project key를 revoke하면 새 ingest가 거절되는가
  • SSO offboarding 뒤 project 접근이 즉시 사라지는가
  • production label을 허용된 role만 바꿀 수 있는가
  • NetworkPolicy가 Worker의 임의 internet egress를 막는가
  • backup restore 후 encryption key로 저장 credential을 읽을 수 있는가
  • public link와 export가 security review 범위에 들어가는가