App Engine部署Spring Boot报缺少OAuth2访问凭证错误
问题场景
- 项目为定位API服务的App Engine后端应用,已稳定运行1年,此前部署流程无异常
- 故障从某次部署前一日开始出现,部署的新版本与2个月前可正常运行的版本相比几乎无代码变更,部署后日志持续输出固定错误,进而触发连锁报错
- 已尝试多轮服务账号配置调整,问题未解决,暂无明确排查思路
- 项目为纯后端服务,无前端组件,为Android、iOS端提供API服务,对接MySQL数据库,已实现基于JWT令牌的身份认证逻辑,查阅Web应用OAuth身份认证相关文档后,未找到适配纯后端场景的对应配置方案
核心报错日志
初始根因报错
报错来自Cloud Debugger Java探针,请求GCE元数据服务获取默认服务账号令牌时返回500错误,为所有后续报错的触发点:
{ "textPayload": "java.io.IOException: Server returned HTTP response code: 500 for URL: http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token\n\tat java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1924)\n\tat java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)\n\tat com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.readResponse(Unknown Source)\n\tat com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.queryMetadataAttribute(Unknown Source)\n\tat com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.lazyQueryAccessToken(Unknown Source)\n\tat com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.getAccessToken(Unknown Source)\n\tat com.google.devtools.cdbg.debuglets.java.GcpHubClient.openConnection(Unknown Source)\n\tat com.google.devtools.cdbg.debuglets.java.GcpHubClient.registerDebuggee(Unknown Source)", "insertId": "62b07762000723c9146921dc", "resource": { "type": "gae_app", "labels": { "version_id": "20220620t152333", "module_id": "default", "zone": "europe-west2-3", "project_id": "family-gift-174ff" } }, "timestamp": "2022-06-20T13:34:26.467913Z", "severity": "ERROR", "labels": { "clone_id": "00c61b117c2cc69d1d383473699b064aeebb51ac76765d2c519588a83959e70d06404d5c7072810a3875ad50b8b30b42120cb49fc83ed242292e" }, "logName": "projects/family-gift-174ff/logs/%2Fvar%2Flog%2Fcdbg_java_agent.localhost.www-data.log.INFO.20220620-133415.10", "receiveTimestamp": "2022-06-20T13:34:26.635895729Z" }
一级连锁报错
因无法获取有效访问令牌,探针向Cloud Debugger服务注册调试实例时返回401未授权错误:
{ "textPayload": "java.io.IOException: Server returned HTTP response code: 401 for URL: https://clouddebugger.googleapis.com/v2/controller/debuggees/register\n\tat java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1924)\n\tat java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)\n\tat java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:250)\n\tat com.google.devtools.cdbg.debuglets.java.GcpHubClient.registerDebuggee(Unknown Source)", "insertId": "62b0776200072f646724c018", "resource": { "type": "gae_app", "labels": { "zone": "europe-west2-3", "version_id": "20220620t152333", "module_id": "default", "project_id": "family-gift-174ff" } }, "timestamp": "2022-06-20T13:34:26.470884Z", "severity": "ERROR", "labels": { "clone_id": "00c61b117c2cc69d1d383473699b064aeebb51ac76765d2c519588a83959e70d06404d5c7072810a3875ad50b8b30b42120cb49fc83ed242292e" }, "logName": "projects/family-gift-174ff/logs/%2Fvar%2Flog%2Fcdbg_java_agent.localhost.www-data.log.INFO.20220620-133415.10", "receiveTimestamp": "2022-06-20T13:34:26.635895729Z" }
二级衍生报错
探针初始化阻塞拖慢应用启动流程,进而触发数据库连接池初始化失败等更多业务层错误:
java.sql.SQLNonTransientConnectionException: Could not create connection to database server. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) ~[mysql-connector-java-8.0.25.jar!/:8.0.25] // 其余堆栈省略,后续存在大量同类关联报错
排查与解决方案
此前调整服务账号配置的排查方向存在偏差,前两类报错与业务代码逻辑、自行实现的JWT认证、面向Web应用的OAuth配置无关联,属于Google Cloud平台侧组件初始化异常引发的连锁问题,按以下优先级处理:
- 优先验证根因:在App Engine配置文件app.yaml中添加环境变量
CDBG_DISABLE=1,临时禁用Cloud Debugger Java探针后重新部署。若部署后探针相关的两类报错消失,数据库连接大概率同步恢复。该类问题最常见的诱因是部署对应时段europe-west2区域的GCE元数据服务临时故障,导致探针初始化逻辑阻塞,抢占业务启动资源、拖慢启动流程,连带数据库连接池初始化超时失败。 - 若禁用探针后元数据服务500错误仍存在,核查App Engine默认服务账号状态:确认项目下
{project-id}@appspot.gserviceaccount.com服务账号未被误禁用、误删除,且绑定了App Engine default service account基础角色,无需额外配置前端类OAuth参数。 - 数据库连接异常属于启动流程阻塞导致的衍生问题,无需单独调整数据库连接参数,解决探针初始化、元数据服务访问异常后,连接逻辑会自动恢复。
- 若确认为平台侧元数据服务临时故障导致的问题,待平台故障恢复后,移除
CDBG_DISABLE配置项重新部署,即可恢复Cloud Debugger的正常使用。
内容的提问来源于stack exchange,提问作者Trempette
相关产品推荐
相关产品推荐

