LLM 보안 & 가드레일

LLM 보안 & 가드레일 (LLM Security & Guardrails)

LLM 기반 애플리케이션에는 다양한 잠재적 안전 위험이 따르는 데, 여기에는 프롬프트 인젝션, 개인 식별 정보(PII) 유출, 유해한 프롬프트 등이 포함돼요. Langfuse는 이러한 보안 위험을 모니터링하고 보호하며, 사고가 발생했을 때 조사하는 데 사용할 수 있어요.

출처: 문서

본문

LLM 보안이란 무엇인가요?

LLM 보안은 LLM과 그 인프라를 무단 접근, 오용, 적대적 공격으로부터 보호하기 위한 예방적 조치를 구현하는 것을 말해요. 모델과 데이터의 무결성과 기밀성을 모두 보장하죠. 이는 AI/ML 시스템에서 윤리적 사용을 유지하고, 프롬프트 인젝션 같은 보안 위험을 방지하며, 안전한 조건에서 안정적인 운영을 보장하는 데 중요해요.

LLM 보안은 어떻게 동작하나요?

LLM 보안은 다음의 조합으로 해결할 수 있어요:

  • 런타임 보안 조치를 위한 LLM 보안 라이브러리
  • 이러한 조치의 효과를 사후(ex-post) 평가하기 위한 Langfuse

1. 런타임 보안 조치

LLM 기반 애플리케이션의 보안 위험을 완화하는 데 사용할 수 있는 인기 있는 보안 라이브러리가 몇 가지 있어요: LLM Guard, Prompt Armor, NeMo Guardrails, Microsoft Azure AI Content Safety, Lakera. 이 라이브러리들은 다음과 같은 방식으로 보안 조치에 도움을 줘요:

  • 모델로 보내기 전에 잠재적으로 유해하거나 부적절한 프롬프트를 잡아내고 차단
  • 모델로 보내기 전에 민감한 PII를 제거(redact)하고 응답에서 다시 복원(un-redact)
  • 런타임에 프롬프트와 응답을 독성, 관련성, 민감한 자료에 대해 평가하고 필요한 경우 응답 차단

2. Langfuse로 보안 조치 모니터링 및 평가

Langfuse 트레이싱을 사용해 보안 메커니즘의 각 단계에 대한 가시성과 확신을 얻으세요. 일반적인 워크플로우는 다음과 같아요:

  • 보안 이슈를 조사하기 위해 트레이스를 수동으로 검사.
  • Langfuse 대시보드에서 시간에 따른 보안 점수를 모니터링.
  • 보안 검증. Langfuse 점수(scores)를 사용해 보안 도구의 효과를 평가할 수 있어요. Langfuse를 팀 워크플로우에 통합하면 어떤 보안 위험이 가장 흔한지 식별하고 해당 특정 이슈를 중심으로 더 견고한 도구를 구축하는 데 도움을 줄 수 있어요. 고려할 주요 워크플로우는 두 가지예요:
    • 주석(UI에서). 프로덕션 트레이스의 일부를 주석으로 표시해 기준선을 확립하면, 보안 도구가 반환한 보안 점수를 이 주석과 비교할 수 있어요.
    • 자동 평가. Langfuse의 모델 기반 평가는 비동기로 실행되며 독성이나 민감성 같은 항목을 트레이스에서 스캔해 잠재적 위험을 플래그하고 LLM 보안 설정의 공백을 식별할 수 있어요. 이러한 평가를 설정하는 방법에 대해선 문서를 참고하세요.
  • 지연 추적. 일부 LLM 보안 검사는 모델을 호출하기 전에 기다려야 하고, 다른 검사는 사용자에게 응답을 차단해요. 따라서 이들은 빠르게 LLM 애플리케이션의 전체 지연을 좌우하는 핵심 요소가 돼요. Langfuse는 트레이스 내에서 이러한 검사의 지연을 분석해 검사가 대기할 가치가 있는지 이해하는 데 도움을 줄 수 있어요.

시작하기

예시: 개인 식별 정보(PII) 익명화

PII를 LLM에 노출하면 계약 의무나 규제 준수 요구사항을 위반하거나, 데이터 유출이나 데이터 침해의 위험을 완화하지 못하는 심각한 보안·프라이버시 위험이 될 수 있어요.

개인 식별 정보(PII)에는 다음이 포함돼요:

  • 신용카드 번호
  • 전체 이름
  • 전화번호
  • 이메일 주소
  • 사회보장번호(SSN)
  • IP 주소

아래 예시는 주어진 법정 기록을 요약하는 간단한 애플리케이션을 보여줘요. 프라이버시 때문에 애플리케이션은 정보가 모델에 들어가기 전에 PII를 익명화하고, 응답을 복원(un-redact)해 일관된 요약을 만들고 싶어해요.

프롬프트 인젝션, 금지 주제, 악성 URL을 포함한 다른 보안 위험에 대해 더 읽으려면 각 라이브러리의 문서를 확인하거나, 더 많은 예시가 있는 보안 쿡북을 읽어보세요.

패키지 설치

이 예시에서는 런타임 보안 검사를 위해 오픈소스 라이브러리 LLM Guard를 사용해요. 모든 예시는 Prompt Armor, NeMo Guardrails, Microsoft Azure AI Content Safety, Lakera 같은 다른 라이브러리로도 쉽게 적용할 수 있어요.

먼저 보안 패키지와 Langfuse 도구를 import해요.

pip install llm-guard langfuse openai
from llm_guard.input_scanners import Anonymize
from llm_guard.input_scanners.anonymize_helpers import BERT_LARGE_NER_CONF
from langfuse.openai import openai # OpenAI integration
from langfuse import observe
from llm_guard.output_scanners import Deanonymize
from llm_guard.vault import Vault

PII 익명화·복원 및 Langfuse로 트레이스하기

프로세스의 각 단계를 자체 함수로 분리해 각 단계를 Langfuse에서 개별적으로 추적할 수 있어요.

함수에 @observe()를 붙이면 프로세스의 각 단계를 트레이스하고 보안 도구가 반환한 위험 점수를 모니터링할 수 있어요. 이를 통해 보안 도구가 얼마나 잘 작동하고 있는지, PII를 기대대로 잡아내고 있는지 확인할 수 있어요.

vault = Vault()

@observe()
def anonymize(input: str):
  scanner = Anonymize(vault, preamble="Insert before prompt", allowed_names=["John Doe"], hidden_names=["Test LLC"],
                    recognizer_conf=BERT_LARGE_NER_CONF, language="en")
  sanitized_prompt, is_valid, risk_score = scanner.scan(prompt)
  return sanitized_prompt

@observe()
def deanonymize(sanitized_prompt: str, answer: str):
  scanner = Deanonymize(vault)
  sanitized_model_output, is_valid, risk_score = scanner.scan(sanitized_prompt, answer)

  return sanitized_model_output

LLM 호출 계측하기

이 예시에서는 네이티브 OpenAI SDK 통합을 사용해 LLM 호출을 계측해요. 이를 통해 토큰 수, 모델 파라미터, 모델로 보낸 정확한 프롬프트를 자동으로 수집할 수 있어요.

참고: Langfuse는 여러 프레임워크(예: LlamaIndex, LangChain, Haystack 등)와 네이티브로 통합되며 SDK로 어떤 LLM이든 쉽게 계측할 수 있어요.

@observe()
def summarize_transcript(prompt: str):
  sanitized_prompt = anonymize(prompt)

  answer = openai.chat.completions.create(
        model="gpt-4o-mini",
        max_tokens=100,
        messages=[
          {"role": "system", "content": "Summarize the given court transcript."},
          {"role": "user", "content": sanitized_prompt}
        ],
    ).choices[0].message.content

  sanitized_model_output = deanonymize(sanitized_prompt, answer)

  return sanitized_model_output

애플리케이션 실행하기

함수를 실행해요. 이 예시에서는 법정 기록의 일부를 입력으로 넣어요. 민감한 정보를 다루는 애플리케이션은 HIPAA나 GDPR 같은 데이터 프라이버시 정책을 준수하기 위해 익명화·복원 기능을 자주 사용해야 해요.

prompt = """
Plaintiff, Jane Doe, by and through her attorneys, files this complaint
against Defendant, Big Corporation, and alleges upon information and belief,
except for those allegations pertaining to personal knowledge, that on or about
July 15, 2023, at the Defendant's manufacturing facility located at 123 Industrial Way, Springfield, Illinois, Defendant negligently failed to maintain safe working conditions,
leading to Plaintiff suffering severe and permanent injuries. As a direct and proximate
result of Defendant's negligence, Plaintiff has endured significant physical pain, emotional distress, and financial hardship due to medical expenses and loss of income. Plaintiff seeks compensatory damages, punitive damages, and any other relief the Court deems just and proper.
"""
summarize_transcript(prompt)

Langfuse에서 트레이스 검사하기

이 트레이스(공개 링크)에서 원고의 이름이 모델로 보내지기 전에 익명화되고 응답에서 다시 복원되는 것을 볼 수 있어요. 이제 Langfuse에서 실행 평가를 돌려 이러한 조치의 효과를 제어할 수 있어요.

더 많은 예시

LLM 보안 모니터링의 더 많은 예시는 쿡북에서 찾아보세요.

쿡북: Observing LLM Security

FAQ

LLM Guard가 무엇인가요?+

LLM Guard는 LLM 애플리케이션에 보안 가드레일을 제공하는 Protect AI의 오픈소스 라이브러리예요. 입력 스캐너(프롬프트 인젝션 감지, PII 익명화, 독성 감지, 주제 금지)와 출력 스캐너(콘텐츠 조정, 편향 감지, 악성 URL 감지, 비익명화)를 포함해요. LLM Guard는 Langfuse와 통합해 각 보안 검사의 효과를 트레이스하고 모니터링할 수 있어요.

LLM을 위한 보안 가드레일이란 무엇인가요?+

보안 가드레일은 LLM 애플리케이션의 입력과 출력을 가로채고 필터링해 오용과 피해를 방지하는 예방 조치예요. 입력 가드레일(프롬프트 인젝션과 악성 입력 차단), 출력 가드레일(유해한 응답 필터링), PII 감지·제거, 콘텐츠 필터링, 주제 제한을 포함해요. 가드레일은 애플리케이션 레이어에서 실행되며 모델 수준의 안전 훈련을 보완해요.

더 알아보기 (Learn more)