MCP OAuth 인증 구현: AWS Lambda와 WorkOS 활용
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- 대상자: AWS Lambda, API Gateway, OAuth 인증 시스템을 사용하는 개발자 및 DevOps 엔지니어
- 난이도: 중급 이상 (Rust, AWS CDK, Lambda Authorizer 경험 필요)
핵심 요약
- AWS Lambda 기반 MCP 서버 구축:
API Gateway
+Lambda Authorizer
를 활용한 무상태 서버리스 아키텍처 axum
프레임워크 사용,Rust
언어 기반- OAuth 인증 흐름 구현:
.well-known/oauth-authorization-server
엔드포인트 제공 grant_types_supported
,response_types_supported
등 OAuth 2.0 스펙 준수- 인프라 설정: AWS CDK + SAM Local을 통한 Lambda 함수 및 HTTP API Gateway 배포
@cdklabs/aws-lambda-rust
라이브러리 사용
섹션별 세부 요약
1. MCP 서버 아키텍처 설계
- 2개의 Lambda 함수 분리:
- Authorizer
: OAuth 인증 로직 처리
- McpResourceServer
: MCP 리소스 처리 로직
- API Gateway 역할:
- Lambda Authorizer
를 통해 요청 인증
- 리소스 서버는 인증 로직을 알 필요 없음
2. Rust 기반 코드 구현
- Authorizer 함수:
```rust
async fn function_handler(event: LambdaEvent
Ok(Response { isAuthorized: false, context: HashMap::new() })
}
```
- 기본적으로
Unauthorized
응답 반환 - MCP 리소스 서버:
```rust
pub async fn mcp_handler() -> impl IntoResponse {
"hello"
}
```
/mcp
경로에 대한 간단한 테스트 응답 제공
3. 인프라 설정 (AWS CDK)
- Lambda 함수 정의:
```typescript
const authorizer = new RustFunction(this, 'Authorizer', {
entry: '../authorizer/Cargo.toml',
environment: { RUST_LOG: 'info' }
});
```
@cdklabs/aws-lambda-rust
라이브러리 사용- HTTP API Gateway 구성:
```typescript
const httpApi = new cdk.aws_apigatewayv2.HttpApi(this, 'MCP-Auth-API');
httpApi.addRoutes({
path: '/mcp',
authorizer: new cdk.aws_apigatewayv2_authorizers.HttpLambdaAuthorizer('Authorizer', authorizer),
integration: new cdk.aws_apigatewayv2_integrations.HttpLambdaIntegration("mcp-resource", mcpResourceServer)
});
```
4. 테스트 및 확장
- Goose 클라이언트 통합:
```bash
goose configure
```
mcp-remote
패키지 사용하여Streamable HTTP
MCP 서버 테스트.well-known
엔드포인트 구현:
```rust
async fn well_known_handler() -> impl IntoResponse {
Json(WellKnownAnswer {
authorization_endpoint: "https://example.com/auth",
token_endpoint: "https://example.com/token",
...
})
}
```
- OAuth 2.0 스펙에 따른 메타데이터 제공
결론
- 핵심 팁:
- Lambda Authorizer
를 통해 리소스 서버와 인증 로직 분리
- .well-known
엔드포인트 구현 시 OAuth 2.0 스펙 준수
- AWS CDK + SAM Local을 활용한 로컬 테스트 환경 구성 필수
- 문제 해결: MCP 클라이언트의 401 응답 처리 및
/.well-known
엔드포인트 확장 필요