GAE环境下Java11 Quarkus应用访问Cloud SQL授权问题排查
问题根因判断
从你提供的审计日志可以看到,cloudsql.instances.connect权限的granted字段为true,说明你给服务账号分配的IAM权限本身没有问题,报错并非出自IAM角色配置缺失,需重点排查以下配置项:
需核对的配置清单
- 检查App Engine的app.yaml配置
标准环境下必须在app.yaml的beta_settings字段中正确声明Cloud SQL实例连接名,格式为[项目ID]:[区域]:[实例名],你的场景下对应的值应为addlogic-foodiefnf-1:europe-west3:quarkus,注意不要写错区域标识,也不要额外添加空格。 - 检查JDBC连接串配置
使用Cloud SQL Socket Factory连接时,JDBC URL需符合规范,参考格式如下:jdbc:postgresql:///[你的数据库名]?cloudSqlInstance=addlogic-foodiefnf-1:europe-west3:quarkus&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=[数据库用户名]&password=[数据库密码]
重点核对cloudSqlInstance参数的值和Cloud SQL控制台给出的实例连接名完全一致,没有多余的前后空格。 - 检查Cloud SQL实例的网络配置
如果你没有使用Cloud SQL Socket Factory,而是直接通过公网IP连接数据库,需要将App Engine的出站IP段添加到Cloud SQL实例的授权网络列表中。更推荐使用官方Socket Factory方案,无需配置授权网络,安全性和稳定性更高。同时确认Cloud SQL实例的公网IP处于启用状态,实例运行正常。 - 检查项目依赖配置
确认项目中已经引入了版本匹配的Cloud SQL Postgres Socket Factory依赖,不存在依赖缺失或版本冲突问题。之前遇到的PostgreSQL10Dialect类加载问题需确认已经完全修复,避免类加载异常触发误判的权限报错。 - 检查实例名拼写
从审计日志中可以看到实例资源名称末尾带有多余空格,需排查所有配置文件中填写的实例名、连接名是否存在多余空格、大小写错误的问题。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

