GCP问题:后端存储桶无法找到公开文件的原因排查
GCP经典负载均衡器后端存储桶无法找到对象问题
简短说明
在负载均衡器上配置后端存储桶映射到/__/auth/路径,存储桶内有公开可访问的handler文件,但访问/__/auth/handler时返回The specified key does not exist.错误XML。
更新
该问题可能与GCP负载均衡器URL重写及后端映射不符合预期有关。
详细说明
在GCP中,尝试通过经典应用负载均衡器的后端存储桶托管Firebase认证文件,以实现同源OAuth重定向。
后端存储桶配置
等效API配置如下:
PUT https://compute.googleapis.com/compute/v1/projects/<My Project>/global/backendBuckets/<My Backend Bucket Name>
请求体:
{ "bucketName": "<My Bucket Name>", "cdnPolicy": { "cacheMode": "CACHE_ALL_STATIC", "clientTtl": 3600, "defaultTtl": 3600, "maxTtl": 86400, "negativeCaching": false, "requestCoalescing": true, "serveWhileStale": 0 }, "compressionMode": "DISABLED", "description": "用于同源OAuth重定向", "enableCdn": true, "name": "<My Backend Bucket Name>", "usedBy": [ { "reference": "https://www.googleapis.com/compute/beta/projects/<My Project>/global/urlMaps/<My URL MAP>" } ] }
URL映射配置
负载均衡器URL映射规则:
pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/<My Project>/global/backendServices/<My Main Backend> name: path-matcher-1 pathRules: - paths: - /__/auth/* service: https://www.googleapis.com/compute/v1/projects/<My Project>/global/backendBuckets/<My Bucket Backend Name>
权限设置
- 存储桶采用统一权限控制(Uniform)
- 已为
allUsers授予Storage Object Viewer角色,控制台显示“对互联网公开”
对象情况
存储桶内有名为handler的对象,类型为application/octet-stream,公开可访问,GS路径为gs://<Bucket Name>/handler。
问题现象
访问/__/auth/handler、/__/auth/<Bucket Name>/handler等URL变体时,均返回相同错误:
<Error> <Code>NoSuchKey</Code> <Message>The specified key does not exist.</Message> </Error>
负载均衡器监控显示流量已路由至后端存储桶,但无法找到对应对象。
核心问题
- 为何后端存储桶无法找到存储的
handler文件?(最高优先级) - 当前OAuth重定向的实现方式是否存在问题?(次要需求)
解决方案
问题1:后端存储桶无法找到对象的原因及修复
原因分析
负载均衡器转发请求到后端存储桶时,默认会保留完整的路径后缀匹配对象。也就是说,访问/__/auth/handler时,负载均衡器会尝试查找存储桶内的/__/auth/handler对象,但你的handler实际存放在桶的根目录,因此返回不存在错误。
修复步骤
需要为后端存储桶添加路径重写规则,移除/__/auth/前缀:
- API方式:编辑后端存储桶配置,新增
urlRewrite字段:
{ // 原有配置保持不变 "urlRewrite": { "pathPrefixRewrite": "/" } }
- 控制台方式:
- 进入负载均衡器的后端存储桶配置页
- 找到「URL重写」选项,设置「路径前缀重写」为
/ - 保存配置并等待负载均衡器更新生效
配置完成后,访问/__/auth/handler会被重写为请求存储桶根目录下的handler对象,即可正常返回文件。
问题2:OAuth重定向实现的合理性验证
当前方案符合同源OAuth重定向的推荐逻辑,但需确保三点:
- 存储桶内的
handler是Firebase Auth所需的正确文件 - 负载均衡器已配置HTTPS(OAuth重定向要求HTTPS环境)
- Firebase Auth控制台已将
https://<你的域名>/__/auth/handler添加为授权重定向URI
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

