피드로 돌아가기
Cloud SQL IAM auth on Cloud Run with Postgres.js (without the connector package in your app)
Dev.toDev.to
Infrastructure

Cloud SQL Connector 제거를 통한 종속성 최소화 및 IAM 기반 동적 인증 구현

Cloud SQL IAM auth on Cloud Run with Postgres.js (without the connector package in your app)

mrberrysome2026년 4월 21일5intermediate

Context

Cloud Run 환경에서 Cloud SQL 연결 시 관습적으로 사용하는 Connector 패키지로 인한 불필요한 앱 계층 종속성 발생. 기존 IAM 인증 방식의 1시간 토큰 만료 문제로 인해 런타임 중 연결 실패가 발생하는 아키텍처적 한계 존재.

Technical Solution

  • Cloud Run의 --add-cloudsql-instances 옵션을 통한 Unix Socket 직접 마운트로 네트워크 전송 계층 단순화
  • Postgres.js의 password 필드에 문자열 대신 async 함수를 전달하여 연결 생성 시점에 GCP Metadata Server에서 최신 OAuth2 토큰을 동적으로 획득하는 구조 설계
  • max_lifetime 설정을 45분(2700초)으로 제한하여 IAM 토큰 만료 시간인 1시간 이전에 Connection Pool 내 커넥션을 강제 재순환시키는 전략 채택
  • Drizzle ORM과 Postgres.js 조합을 통해 정적 패스워드 없이 IAM Service Account 기반의 인증 흐름 구축
  • 로컬 개발 환경과 운영 환경의 클라이언트 생성 로직을 분리하여 환경별 최적화된 연결 방식 제공

1. Cloud Run 사용 시 Connector 패키지 대신 Unix Socket 마운트 검토

2. IAM DB 인증 도입 시 토큰 갱신 로직이 부팅 시점이 아닌 연결 생성 시점에 작동하는지 확인

3. IAM 토큰 유효 기간(1시간)보다 짧은 Connection max_lifetime 설정 적용 여부 점검

4. Service Account에 roles/cloudsql.client 및 roles/cloudsql.instanceUser 권한 부여 확인

원문 읽기