Spring AI를 위한 오픈소스 보안 가드레일 라이브러리를 개발했습니다.
Spring AI Privacy Guardrails
GitHub: https://github.com/ultramancode/spring-ai-privacy-guardrails
프로젝트는 Spring 공식 블로그 'This Week in Spring'에서 소개됐고, Spring AI Community의 Awesome Spring AI에도 등재됐습니다.
Spring AI, Presidio, vLLM, Dify 등 여러 AI 관련 오픈소스에서 컨트리뷰터로 활동하면서, AI 에이전트의 개인정보 보호와 도구 권한 관리에도 관심을 갖게 됐습니다.
최근 개인정보 유출과 보안사고가 잇따르면서, 데이터의 전달 범위와 접근 권한을 통제하는 일이 더욱 중요해지고 있습니다. AI 에이전트에서도 어떤 데이터를 LLM에 전달하고, 어떤 도구에 원문을 넘길 것인지 고민할 필요가 있다고 생각합니다. AI 에이전트는 모델 호출 하나로 끝나지 않습니다. RAG, Chat Memory, 도구, MCP 등 여러 경로를 통해 데이터가 오가기 때문입니다.
예를 들어 개인정보를 LLM에 전달하기 전에 마스킹했더라도, 도구 실행에는 실제 원문이 필요할 수 있습니다. 반대로 도구 실행 결과에 포함된 민감정보가 다시 모델로 전달될 수도 있습니다. 사용자마다 실행할 수 있는 도구가 달라야 하고, 외부 검사 모델에 콘텐츠 검사를 요청할 때도 어떤 데이터가 전달되는지 고려해야 합니다.
이러한 문제를 다루기 위해 세 가지 기능을 구현했습니다.
1. 개인정보 보호 (Privacy Protection)
탐지된 개인정보를 요청 단위의 불투명 토큰으로 치환해 LLM에 전달합니다. 도구 호출 시에는 정책에서 허용한 개인정보 유형만 원문으로 복원하고, 실행 결과에 포함된 민감정보도 다시 보호합니다. MCP뿐 아니라 RAG, Chat Memory를 통해 모델에 전달되는 데이터에도 보호 정책을 적용할 수 있습니다.
2. 도구 권한 제어 (Tool Authorization)
Spring Security와 연동해 사용자 권한에 따라 모델에 노출되는 도구를 제한하고, 실행 직전에 권한을 다시 확인합니다. 개인정보 보호와 함께 사용하면 도구 실행 권한을 확인한 뒤, 해당 도구에 허용된 원문만 복원하도록 구성할 수 있습니다.
3. 콘텐츠 검사 (Content Inspection)
애플리케이션 규칙, 로컬 ONNX 모델, HTTP 검사 모델을 이용해 입력과 출력을 검사합니다. 프롬프트 인젝션이나 부적절한 콘텐츠 등을 검사하는 데 사용할 수 있으며, 개인정보 보호와 조합하면 외부 검사 모델에도 민감정보를 토큰화한 상태로 전달할 수 있습니다.
세 기능은 각각 독립적으로 사용하거나 하나의 Spring AI ChatClient에서 조합할 수 있습니다.
고객 조회 상황을 예로 들면, 고객번호와 전화번호가 포함된 요청에서 LLM에는 두 값 모두 토큰으로 전달하면서 고객 조회 도구에는 고객번호만 복원하도록 설정할 수 있습니다. 도구가 반환한 결과에 개인정보가 포함되어 있다면 다시 보호한 후 모델에 전달합니다.
프로젝트는 Apache 2.0 라이선스로 공개했으며 Maven Central에 배포하고 있습니다.
Spring AI로 애플리케이션이나 AI 에이전트를 개발하고 계신 분들이라면 한번 살펴봐 주세요. 피드백도 환영합니다.
GitHub: https://github.com/ultramancode/spring-ai-privacy-guardrails