如何为单个GCS存储桶设置每月100GB的配额上限
GCS 单存储桶月度100GB上传配额实现方案
GCP 原生没有提供直接针对单个存储桶设置月度上传容量配额的功能,你可以通过组合现有 GCP 产品实现需求,常用的可行方案有3种:
方案1:监控告警+自动权限拦截(推荐,实现成本最低)
这个方案无需修改现有业务上传逻辑,适配绝大多数场景:
- 首先为目标存储桶开启 Cloud Monitoring 监控,抓取
storage.googleapis.com/network/received_bytes_count指标,筛选维度指定你的存储桶名称,统计周期设置为自然月 - 配置两级告警阈值:月度累计上传量达到90GB时发预警通知,达到100GB时触发后续拦截动作
- 编写简单的 Cloud Function 逻辑:收到100GB阈值的告警通知后,自动移除存储桶 IAM 规则中所有主体的
storage.objects.create、storage.objects.update上传相关权限;同时配置月度 cron 调度任务,每个自然月1号零点自动恢复对应权限 - 你也可以用以下 gcloud 命令手动校验当月累计上传量:
gcloud logging read "resource.type=gcs_bucket AND resource.labels.bucket_name=替换为你的存储桶名 AND jsonPayload.event_subtype=storage.objects.create" --time_range P30D --format="value(jsonPayload.object_size)" | awk '{sum += $1} END {print sum/1024/1024/1024 " GB"}'
方案2:代理层自定义配额控制(适合精细化管控场景)
如果需要更灵活的配额管控逻辑,比如针对不同用户设置不同配额,可以用这个方案:
- 所有用户的上传请求不直接调用 GCS 原生接口,统一转发到你部署在 Cloud Run/Compute Engine 上的代理服务
- 代理层自行维护该存储桶的月度上传量计数,每收到上传请求后先校验当月累计值,超过100GB直接返回429错误拒绝请求,未超出则转发到GCS执行上传,同时更新计数
方案3:总容量硬限制(仅适合不区分月度周期的场景)
注意:这个方案限制的是存储桶内现存对象的总大小,不是月度上传量,如果你的场景允许删除旧文件,实际月度可上传容量会高于100GB,仅适配不需要按自然月统计配额的场景
- 在存储桶的生命周期规则中添加容量限制规则,当存储桶总容量超过100GB时,禁止新对象写入,或者自动清理最早创建的对象释放空间
注意事项
- 所有方案的计数建议优先以 Cloud Monitoring 原生指标为准,避免自行统计出现流量漏算、重复计算的问题
- 自动拦截后一定要配置次月自动恢复权限的逻辑,避免业务中断
- 如果存储桶的访问主体较多,建议将上传权限统一绑定到自定义IAM角色,调整权限时直接修改角色规则即可,无需逐个调整访问主体的权限
内容的提问来源于stack exchange,提问作者Diganth Sanghvi
相关产品推荐
相关产品推荐

