[Learning Notes][Golang] Authorization Challenges in the AI Agent Era: What is ID-JAG and Why I Re-implemented It in Go

개요

AI Agent 시대의 인증 문제에 대한 ID-JAG(Identity Assertion JWT Authorization Grant) 메커니즘은 Agent가 사용자를 대신하여 리소스에 접근할 때, 각 단계마다 최소한의 권한으로 사용자의 의도를 명확히 증명하고 증명하도록 설계되었습니다.

주요 내용

* ID-JAG의 필요성: AI Agent가 내부 시스템 API를 호출할 때, Agent의 신원이나 사용자 세션을 직접 전달하는 것은 과도한 권한 부여나 감사 추적의 어려움으로 이어질 수 있습니다. ID-JAG는 Agent가 특정 사용자, 특정 시점에 특정 작업을 수행하도록 승인되었음을 증명하고, 이 권한 범위를 최소화하며 유효 기간을 단축하는 것을 목표로 합니다.
* OAuth2 PKCE와의 차이점: PKCE는 "클라이언트 신원 확인" 문제(예: 모바일 앱의 코드 탈취 방지)를 "단일 홉"에서 해결하지만, ID-JAG는 "비인간 서비스 신원이 특정 작업을 위해 해당 인물을 대리할 자격이 있는지"와 "여러 홉에 걸친 권한 위임" 문제를 다룹니다.
* ID-JAG의 기반 RFC: ID-JAG는 RFC 8693 (OAuth 2.0 Token Exchange)과 RFC 7523 (JWT Bearer Grant) 두 가지 표준을 결합하여 작동합니다. RFC 8693은 토큰 교환을, RFC 7523은 JWT 자체를 OAuth 2.0 인증 자격 증명으로 사용하는 것을 정의합니다.
* ID-JAG 토큰 교환 흐름: 사용자가 IdP에 로그인하여 OIDC ID Token을 얻고, AI Client Gateway는 이를 RFC 8693을 사용하여 ID-JAG로 교환합니다. 이후 RFC 7523을 통해 ID-JAG를 Athenz Access Token으로 교환합니다. MCP Server는 이 Access Token을 받아 해당 도구에 필요한 최소 범위의 새 Access Token으로 다시 교환하여 최종 Resource Server에 전달합니다.
* 각 홉(Hop)에서의 권한 축소: ID-JAG는 각 신뢰 경계를 넘을 때마다 토큰이 재검증되고 권한 범위가 좁혀지도록 설계되었습니다. MCP Server는 자체 mTLS 인증서를 사용하여 Athenz ZTS와 토큰을 교환하며, 각 도구가 실제로 필요한 최소한의 권한만을 요청합니다. 이는 코드 검토나 규제가 아닌, 아키텍처 수준에서 최소 권한 원칙을 강제합니다.
* Go 언어로 MCP Server 재구현: 기존 TypeScript 기반 MCP Server의 로직을 Go 언어와 공식 Go SDK를 사용하여 재구현했습니다. 이는 다른 언어에서도 ID-JAG 아키텍처의 논리가 복제될 수 있는지, 그리고 공식 Go SDK의 성능을 확인하기 위한 목적이었습니다.
* 실습 및 테스트: kkdai/id-jag-mcp 프로젝트는 Apache 2.0 라이선스로 공개되어 있으며, mTLS 인증서, Athenz ZTS, 업스트림 API 서버 준비를 통해 실행할 수 있습니다. 환경 변수를 통해 설정을 관리하며, REST 단축 경로를 제공하여 MCP 클라이언트 없이도 테스트가 가능합니다. httptest를 사용하여 ZTS 및 업스트림 API를 시뮬레이션하는 단위 테스트를 통해 전체 토큰 교환 로직의 정확성을 검증할 수 있습니다.

시사점

ID-JAG는 AI Agent가 내부 시스템과 상호 작용할 때 발생하는 보안 및 권한 부여 문제를 해결하기 위한 강력한 아키텍처 패턴으로, 각 단계에서 "모든 홉은 재발급해야 하며, 범위는 좁아져야 한다"는 핵심 원칙을 통해 최소 권한을 강제합니다. 이는 AI Agent의 안전한 도입 및 운영에 중요한 고려사항이 될 수 있습니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions