Vercel이 OIDC(OpenID Connect) 페더레이션 지원을 출시하여 빌드·Functions에서 사용하던 장기 환경변수 자격증명을 RSA 서명된 단기 JWT 토큰으로 교체할 수 있게 됐다. AWS AssumeRoleWithWebIdentity를 포함한 주요 클라우드 서비스와의 연동 방식 및 내부 동작 원리를 코드 예제와 함께 설명한다.
핵심 포인트- 장기 자격증명(AWS_ACCESS_KEY_ID 등 환경변수) 대신 RSA 서명 단기 JWT로 교체해 탈취 위험 최소화
- Vercel이 OIDC Identity Provider(IdP) 역할 수행, 외부 요청 시 자동으로 서명된 토큰 발급
- `@vercel/functions/oidc`의 `awsCredentialsProvider`로 AWS 서비스 연결 시 코드 2줄 변경만 필요
- AWS `AssumeRoleWithWebIdentity`를 통해 Role ARN 기반 임시 자격증명 자동 교환
- JWT 페이로드에 Vercel 프로젝트·환경·만료일(`exp`) 포함, 디코딩으로 검증 가능
- AWS·Azure·Firebase·GCP 등 주요 클라우드가 Vercel OIDC 토큰 신뢰, 단일 인증 프레임워크 통합 가능
상세 정리- OIDC 동작: IdP(Vercel)와 서비스 제공자 간 신뢰 관계 설정 → 요청 시 서명 토큰 발급 → 수신자가 토큰 검증
- JWT 구조: iss(Vercel OIDC URL), sub(owner:project:environment), aud, exp, iat 포함, RSA 서명
- 기존 방식: `.env`에 `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` 저장 → 정적이고 장기 유효, 탈취 시 피해 지속
- OIDC 방식: `awsCredentialsProvider({ roleArn: process.env.AWS_ROLE_ARN })` 한 줄로 동적 교환
- Vercel Function 실행 시 OIDC 토큰 자동 삽입 → `AssumeRoleWithWebIdentity`로 AWS 임시 자격증명 획득
- 저장되는 것: Role ARN(민감하지 않음)만 환경변수에 보관, 자격증명 자체는 저장 불필요
- S3 연동 예제: `@aws-sdk/client-s3`와 `awsCredentialsProvider`를 조합해 기존 코드 최소 수정
- 토큰 만료: `exp` 필드로 단기 유효 기간 강제, 탈취되어도 악용 가능 시간 제한
- Secure Compute와 조합: 엣지↔백엔드 보안 경계 + OIDC 단기 토큰으로 이중 보호
왜 읽나클라우드 자격증명 관리의 고질적 보안 위험을 환경변수 저장 대신 OIDC 기반 단기 토큰으로 해결하는 실전 패턴을 코드와 함께 확인할 수 있다.