Keycard로 안전하게, AI 에이전트(AI Agent)로 똑똑하게!

by DD
2개월 전
조회수 22

다양한 업무 도구(Google Calendar, Linear, Gmail 등) 연동을 위해 AI 에이전트(AI Agent) 'Todaygent'를 개발, 업무 계획 자동화(Automated Task Planning) 시도

Keycard를 활용하여 안전한 인증(Secure Authentication) 시스템 구축, OAuth 구현 복잡성(OAuth Implementation Complexity) 감소 및 보안 강화

토큰 기반(Token-Based) 아키텍처를 통해 최소 권한(Least Privilege) 원칙 준수, 에이전트(Agent)의 데이터 접근 권한을 세분화

감사 로그(Audit Log) 기능을 통해 에이전트(Agent)의 활동을 추적, 데이터 접근 투명성(Data Access Transparency) 확보

Keycard를 활용한 인증(Auth) 시스템 설계

본문에서는 다수의 API(API) 연동을 위한 인증(Auth) 문제를 해결하기 위해 Keycard를 도입했다. 기존의 개별 OAuth 구현 방식 대신, Keycard를 중앙 집중형 인증(Centralized Authentication) 제어 평면(Control Plane)으로 활용하여 개발 및 유지보수 비용을 절감했다.

PKCE(PKCE) 방식을 사용한 Google OAuth 로그인: 클라이언트 시크릿(Client Secret) 노출 위험 감소

토큰 중개 백엔드(Token-Mediating Backend) 아키텍처: React 프론트엔드(Frontend)에서 Keycard JWT(JSON Web Token)를 전달, 백엔드(Backend)에서 API 호출 및 결과 반환

RFC 8693 토큰 교환(Token Exchange): Keycard JWT를 API 제공자별 액세스 토큰(Access Token)으로 교환, 최소 권한(Least Privilege) 원칙 준수

토큰 기반(Token-Based) 아키텍처의 장점

Keycard를 사용한 아키텍처는 토큰(Token) 기반 인증 방식을 통해 보안(Security)과 유연성을 동시에 확보한다. 특히, 에이전트(Agent)의 데이터 접근 권한을 세분화하여 보안 사고 발생 시 피해 범위를 최소화한다.

Task-Scoped Credentials: 각 API 호출마다 새로운 토큰 발급, 토큰 재사용(Token Reuse) 방지

Composite Identity: 사용자(User) + 에이전트(Agent) + 리소스(Resource)의 복합적인 신원 정보(Identity Information) 관리

Zero Standing Access: 장기적인 자격 증명(Credential) 보관 금지, 무단 접근(Unauthorized Access) 위험 감소

이러한 설계는 데이터 격리 아키텍처(Data Isolation Architecture)를 구현하고, 에이전트(Agent)의 안전한 운영을 보장한다.

Keycard 감사 로그(Audit Log)를 통한 가시성 확보

Keycard는 상세한 감사 로그(Audit Log) 기능을 제공하여 에이전트(Agent)의 활동을 투명하게 추적할 수 있도록 지원한다. 이를 통해 개발자는 에이전트(Agent)가 어떤 리소스(Resource)에 접근했는지, 어떤 권한(Permission)으로 접근했는지 정확하게 파악할 수 있다.

전체 이벤트(Event) 기록: 모든 토큰 교환, 사용자 인증, 자격 증명 발급, 리소스 접근 기록

Identity Chain: 애플리케이션(Application)과 사용자(User) 간의 관계를 추적, 책임 소재(Accountability) 명확화

세션(Session) 및 권한(Grant) 관리: 특정 세션(Session) 또는 리소스(Resource)에 대한 접근 권한을 개별적으로 제어, 유연한 권한 관리(Flexible Permission Management)

이러한 기능은 데이터 미저장 정책(Zero-Retention Policy)과 함께, 에이전트(Agent)의 안전한 운영을 위한 핵심 요소이다.

Todaygent의 아키텍처 상세

Plan My Today는 MCP(MCP) 서버를 중심으로 설계되었으며, 다양한 외부 API(API)와 연동된다. 각 API 연동은 다음과 같은 단계를 거친다.

Zod 스키마(Zod Schema) 기반 유효성 검사: 데이터 유효성 검증 및 타입 안정성 확보

비동기 핸들러(Async Handler) 실행: API 호출 및 데이터 처리

Keycard 토큰 교환: Keycard를 통해 API 접근 권한 획득

MCP 형식 응답 반환: 통일된 데이터 형식으로 변환

이러한 구조는 API 연동의 일관성(Consistency)을 유지하고, 유지보수성(Maintainability)을 향상시킨다.

성능 최적화 및 트레이드오프

Keycard를 사용한 인증(Auth) 방식은 토큰 교환(Token Exchange) 과정에서 성능 저하(Performance Degradation)를 유발할 수 있다. 하지만, 저자는 병렬 처리(Parallel Processing)를 통해 이러한 문제를 해결했다.

Promise.allSettled() 활용: 모든 토큰 교환을 병렬로 처리, 지연 시간(Latency) 최소화

150-250ms 오버헤드(Overhead): 대시보드(Dashboard) 로딩 시 150-250ms의 추가 시간 소요

Fetch Once, Reason Many Times: 데이터는 한 번만 가져오고, 여러 번 분석하여 토큰 사용량(Token Usage) 절감

결과적으로, 보안(Security)과 성능(Performance) 사이의 합리적인 트레이드오프(Trade-off)를 달성했다.

Todaygent의 안전한 사용을 위한 설계

Todaygent는 최소 권한(Least Privilege) 원칙을 기반으로 설계되어, 에이전트(Agent)의 위험한 행동을 제한한다. 이는 사용자의 데이터를 안전하게 보호하고, 시스템의 안정성을 유지하는 데 기여한다.

Read-Only 접근: 모든 데이터 소스에 대한 읽기 권한만 부여, 데이터 변조(Data Modification) 방지

명시적 승인(Explicit Approval): 특정 작업 수행 전에 사용자의 승인을 받도록 설계, 무단 작업(Unauthorized Operation) 방지

제한된 기능: Linear 상태 변경, GitHub 작업, 이메일(Email) 관련 기능 제한, 의도하지 않은 동작(Unintended Behavior) 방지

이러한 설계는 AI 환각(Hallucination)으로 인한 문제 발생 시 피해를 최소화하고, 사용자 신뢰를 확보하는 데 기여한다.

I Built a Secure Planning Agent with MCP and Keycard