如何将Backend Bucket连接至私有Cloud Storage Bucket并屏蔽storage.googleapis.com?
解决方案:将Backend Bucket连接到私有Cloud Storage Bucket并隐藏原生API
一、核心实现步骤(替代CDN Private Origins方案)
你可以直接通过Cloud Load Balancer(LB)的原生Backend Bucket功能对接私有Cloud Storage Bucket,完全绕过storage.googleapis.com的直接暴露:
- 将目标Cloud Storage Bucket设置为私有:移除所有公开访问权限(包括
allUsers或allAuthenticatedUsers的权限),确保只有授权实体能访问。 - 创建Backend Bucket时关联私有存储桶:在GCP控制台或通过
gcloud命令创建Backend Bucket时,选择你的私有存储桶,并启用Cloud Storage website configuration选项(若需要使用存储桶的网站特性)。 - 授权LB服务账号访问存储桶:给LB的专属服务账号
service-<你的项目编号>@gcp-sa-cloudloadbalancing.iam.gserviceaccount.com授予roles/storage.objectViewer角色,让LB有权限读取私有桶内的对象。
二、解决响应定制问题
针对你之前遇到的两个痛点,这个方案可以直接解决:
- 存储桶网站配置生效:只要在Backend Bucket中启用了网站配置关联,存储桶设置的默认首页(如
index.html)、自定义404页面等都会直接通过LB生效,无需CNAME重定向。 - 避免暴露存储桶名称:当请求路径指向不存在的对象时,LB会返回你配置的自定义404页面,而非
storage.googleapis.com原生的错误响应(该响应会包含桶名)。确保你已在存储桶的网站设置中指定了自定义404页面即可。
三、定价攻击风险澄清
你的顾虑是合理的,但只要严格按照上述方案配置,就能彻底规避:
- 所有请求都通过你的LB路由,不会暴露
storage.googleapis.com的直接访问路径,第三方无法直接调用原生API消耗你的存储带宽费用。 - 你可以通过LB的速率限制、WAF规则、配额设置进一步控制请求量,防止恶意请求带来的超额费用。
- 只要存储桶保持私有状态,且仅授权LB服务账号访问,就不会出现未授权的直接访问消耗。
内容的提问来源于stack exchange,提问作者Alejandro Barone
相关产品推荐
相关产品推荐

