PII Guard: LLM 기반, 로그 내 개인 식별 정보 탐지 및 보호 도구 (Personally Identifiable Information)

PII Guard 소개

PII Guard는 시스템 로그 내에 포함된 개인 식별 정보(PII, Personally Identifiable Information)를 탐지하고 관리하기 위해 개발된 오픈 소스 도구입니다. 특히 최근 주목받고 있는 소형 거대언어모델(SLM)을 로컬 환경에서 구동하여, 외부로 데이터를 전송하지 않고도 문맥을 파악해 민감한 정보를 식별할 수 있다는 점이 가장 큰 특징입니다. Node.js, Elasticsearch, PostgreSQL, 그리고 Ollama와 같은 최신 기술 스택을 기반으로 구축되어 있어, 기업이나 개발팀이 자체 인프라 내에서 안전하게 개인정보 보호 규정(GDPR 등)을 준수할 수 있도록 돕습니다.

로그 데이터는 시스템 디버깅과 모니터링에 필수적이지만, 이 과정에서 이메일 주소, 전화번호, 신용카드 번호와 같은 민감한 정보가 의도치 않게 기록되는 경우가 많습니다. 이러한 데이터가 암호화되지 않은 채 저장되거나, 권한이 없는 사용자에게 노출될 경우 심각한 보안 사고로 이어질 수 있습니다. 기존의 패턴 매칭 방식은 정형화된 데이터 탐지에는 효과적이지만, 비정형 텍스트 속에 숨어 있는 모호한 개인정보를 찾아내는 데에는 한계가 있었습니다.

PII Guard는 이러한 문제를 해결하기 위해 로컬 LLM(Ollama)을 활용합니다. 로그 데이터를 외부 API로 전송하지 않고 내부망에서 처리함으로써 데이터 주권과 보안을 동시에 확보할 수 있습니다. 개발자와 보안 담당자는 이 도구를 통해 로그 수집 단계에서부터 개인정보 유출 위협을 능동적으로 모니터링하고, 시각화된 대시보드를 통해 탐지된 내역을 직관적으로 검토할 수 있어 보안 규정 준수 비용을 크게 절감할 수 있습니다.

Microsoft Presidio와 비교

Microsoft Presidio는 개인정보 보호 분야에서 가장 널리 알려진 오픈 소스 도구 중 하나입니다. Presidio는 주로 사전 정의된 정규 표현식(Regex)과 기본적인 자연어 처리(NLP) 모델을 결합하여 PII를 탐지합니다. 엔터프라이즈급의 안정성과 다양한 언어 지원이 강점이지만, 복잡한 문맥을 이해해야 하는 비정형 데이터 처리에서는 설정이 까다롭거나 오탐(False Positive)이 발생할 수 있습니다. 또한, Presidio 자체는 탐지 및 비식별화 엔진에 가까워, 로그 수집부터 저장, 시각화까지의 전체 파이프라인을 구축하려면 별도의 작업이 필요합니다.

반면, PII Guard는 '로그 분석'이라는 특정 목적에 맞춰 올인원(All-in-One) 패키지로 구성되어 있습니다. 로그 수집을 위한 API 서버, 메시지 큐, 데이터베이스, 검색 엔진, 그리고 시각화 대시보드가 Docker Compose를 통해 한 번에 배포됩니다. 무엇보다 LLM(Gemma:3b 등)을 핵심 탐지 엔진으로 사용하여, 정해진 패턴이 없는 자연어 로그에서도 "이것이 사람의 이름인지, 혹은 단순한 고유명사인지"를 문맥적으로 파악하는 데 강점을 보입니다. 즉, Presidio가 범용적인 PII 엔진이라면, PII Guard는 로컬 LLM을 활용한 로그 보안 감사 시스템에 더 가깝습니다.

PII Guard의 주요 구성 요소

PII Guard 프로젝트는 확장성과 성능을 고려하여 마이크로서비스 형태의 구성을 취하고 있습니다. 주요 구성 요소는 다음과 같습니다.

  • Log Ingestion API (Node.js): 외부 시스템에서 로그를 전송받는 HTTP 엔드포인트입니다. 대량의 로그가 유입되더라도 안정적으로 처리하기 위해 버퍼링 처리를 수행합니다.
  • Message Queue (RabbitMQ): 수집된 로그를 비동기적으로 처리하여 시스템의 부하를 분산시킵니다. 이를 통해 로그 분석 작업이 전체 시스템 성능에 영향을 주지 않도록 합니다.
  • AI Analysis Engine (Ollama): 로컬에서 실행되는 LLM(기본적으로 Google의 gemma:3b 모델 사용)을 통해 로그 내용을 분석합니다. 이 모델은 로그 텍스트의 문맥을 이해하고 PII를 식별하는 역할을 수행합니다.
  • Storage & Search (PostgreSQL & Elasticsearch): 분석된 원본 로그와 탐지 결과는 PostgreSQL에 저장되며, Elasticsearch를 통해 빠른 검색과 집계가 가능하도록 인덱싱됩니다.
  • Web Dashboard (React): 관리자가 수집된 로그와 탐지된 PII 현황을 시각적으로 확인하고 검토할 수 있는 웹 인터페이스를 제공합니다.

PII Guard의 주요 기능

  • 로컬 LLM 기반 탐지: 클라우드 기반의 AI 서비스를 사용하지 않고, Ollama를 통해 로컬 서버에서 AI 모델을 구동합니다. 이는 민감한 로그 데이터가 외부(OpenAI 등)로 전송되지 않음을 보장하여, 가장 높은 수준의 데이터 프라이버시를 제공합니다.

  • 다양한 PII 유형 식별: 이름, 이메일, 전화번호, 주소와 같은 기본적인 정보뿐만 아니라, 문맥에 따라 달라질 수 있는 민감한 정보들도 LLM의 추론 능력을 통해 식별할 수 있습니다.

  • 간편한 배포: 복잡한 인프라 설정 없이 Docker Compose를 이용하여 전체 스택을 명령어 한 줄로 실행할 수 있습니다. 이는 개발자가 로컬 환경이나 사내 서버에서 즉시 테스트해 볼 수 있는 환경을 제공합니다.

PII Guard의 설치 및 실행

PII Guard는 Docker 환경이 구성되어 있다면 매우 쉽게 실행할 수 있습니다. 저장소를 복제하고 make 명령어를 실행하는 것만으로 모든 서비스가 구동됩니다.

# 저장소 복제(Clone)
git clone https://github.com/rpgeeganage/pII-guard.git
cd pII-guard

# 전체 서비스 실행 (Docker Compose)
make all-in-up

# 서비스 종료 시
make all-in-down

서비스가 정상적으로 실행되면 다음 URL을 통해 접근할 수 있습니다.

  • 웹 대시보드: http://localhost:3000
  • 로그 수집 API: http://localhost:8888/api/jobs

PII Guard 사용 예시

시스템이 구동된 후, REST API를 통해 분석할 로그 데이터를 전송할 수 있습니다. 예를 들어, curl을 사용하여 다음과 같이 로그를 보낼 수 있습니다.

curl -X POST http://localhost:8888/api/jobs \
  -H "Content-Type: application/json" \
  -d '{
    "logs": [
      "User John Doe (john.doe@example.com) requested a password reset from IP 192.168.1.1"
    ]
  }'

전송된 로그는 백그라운드에서 Ollama 모델에 의해 분석되며, 잠시 후 대시보드(http://localhost:3000)에서 "John Doe", "john.doe@example.com", "192.168.1.1" 등의 정보가 PII로 식별된 결과를 확인할 수 있습니다.

:github: PII Guard 프로젝트 GitHub 저장소




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

1개의 좋아요