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

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>

负载均衡器监控显示流量已路由至后端存储桶,但无法找到对应对象。

核心问题

  1. 为何后端存储桶无法找到存储的handler文件?(最高优先级)
  2. 当前OAuth重定向的实现方式是否存在问题?(次要需求)

解决方案

问题1:后端存储桶无法找到对象的原因及修复

原因分析

负载均衡器转发请求到后端存储桶时,默认会保留完整的路径后缀匹配对象。也就是说,访问/__/auth/handler时,负载均衡器会尝试查找存储桶内的/__/auth/handler对象,但你的handler实际存放在桶的根目录,因此返回不存在错误。

修复步骤

需要为后端存储桶添加路径重写规则,移除/__/auth/前缀:

  1. API方式:编辑后端存储桶配置,新增urlRewrite字段:
{
  // 原有配置保持不变
  "urlRewrite": {
    "pathPrefixRewrite": "/"
  }
}
  1. 控制台方式:
  • 进入负载均衡器的后端存储桶配置页
  • 找到「URL重写」选项,设置「路径前缀重写」为/
  • 保存配置并等待负载均衡器更新生效

配置完成后,访问/__/auth/handler会被重写为请求存储桶根目录下的handler对象,即可正常返回文件。

问题2:OAuth重定向实现的合理性验证

当前方案符合同源OAuth重定向的推荐逻辑,但需确保三点:

  1. 存储桶内的handler是Firebase Auth所需的正确文件
  2. 负载均衡器已配置HTTPS(OAuth重定向要求HTTPS环境)
  3. Firebase Auth控制台已将https://<你的域名>/__/auth/handler添加为授权重定向URI

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:57:28