You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot(Cloud Run)通过Unix Socket连接Cloud SQL(IAM认证)报错求助

问题描述

将Spring Boot应用部署在GCP Cloud Run上,计划通过Cloud SQL Proxy的IAM认证方式,使用Unix Socket而非TCP连接Cloud SQL(PostgreSQL)。当前application.yml配置如下:

spring:
    cloud:
        gcp:
            sql:
                jdbc:
                    enabled: false
                database-name: db-name
                enable-iam-auth: true
                instance-connection-name: instance-name
    datasource:
        url: jdbc:postgresql:///db-name?unixSocketPath=/cloudsql/instance-name/.s.PGSQL.5432&socketFactory=com.google.cloud.sql.postgres.SocketFactory&enableIamAuth=true&sslmode=disable&cloudSqlInstance=instance-name
        username: my-username
        password: ""
        type: com.zaxxer.hikari.HikariDataSource
        hikari:
            maximum-pool-size: 10

部署后日志显示已通过Unix Socket连接实例,但出现认证错误:

org.postgresql.util.PSQLException: The server requested password-based authentication, but no password was provided by plugin null

补充信息:若移除JDBC URL并启用GCP SQL自动配置,连接正常,但需求是使用Unix Socket连接。

依赖版本:

  • Spring Cloud:2021.0.2
  • Spring GCP:3.4.7
  • GCP libraries:25.3.0

解决方案

1. 补充Socket Factory依赖

禁用Spring Cloud GCP自动配置后,需手动引入PostgreSQL的Cloud SQL Socket Factory依赖,确保IAM认证逻辑正常运行:

<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>postgres-socket-factory</artifactId>
</dependency>

2. 修正JDBC URL与数据源配置

移除手动指定的unixSocketPath参数(Socket Factory会自动识别Cloud Run中挂载的Unix Socket路径),同时调整密码配置与SSL模式:

spring:
  cloud:
    gcp:
      sql:
        jdbc:
          enabled: false
        database-name: db-name
        enable-iam-auth: true
        instance-connection-name: instance-name
  datasource:
    url: jdbc:postgresql:///db-name?socketFactory=com.google.cloud.sql.postgres.SocketFactory&cloudSqlInstance=instance-name&enableIamAuth=true&sslmode=require
    username: my-username
    password: null
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      maximum-pool-size: 10
  • 将password设为null:避免驱动将空字符串视为无效密码,让Socket Factory自动生成IAM认证所需的临时凭证
  • 调整sslmode为require:PostgreSQL的IAM认证依赖SSL连接,之前的disable会导致认证流程异常

3. 验证Cloud SQL IAM用户配置

确保PostgreSQL实例中已创建对应IAM用户并授予权限:

CREATE USER "my-username" WITH LOGIN;
GRANT cloudsqliamuser TO "my-username";

同时确认该IAM账号拥有Cloud SQL Client角色权限。

4. 检查Cloud Run服务账号权限

部署Cloud Run的服务账号需拥有Cloud SQL Client角色,确保能够生成IAM认证所需的临时凭证。


内容的提问来源于stack exchange,提问作者Heril Muratovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:34:57