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

gcloud storage是否对公共数据传输计费?请求头自动设置问题咨询

问题核心确认

你的理解完全正确:gcloud storage默认会将你配置的项目通过X-Goog-User-Project请求头发送给GCS,这会导致访问未启用请求者付费的公共存储桶时,数据传输费用计入你的项目,而非公共存储桶的所有者。

行为差异与原因

gsutil vs gcloud storage 默认行为

  • gsutil:默认情况下,访问公共存储桶时不会添加X-Goog-User-Project头,费用由存储桶所有者承担。
  • gcloud storage:当你通过gcloud init配置了默认项目后,会自动为所有GCS请求附加X-Goog-User-Project头,无论目标存储桶是否启用请求者付费模式。

文档依据(转述)

  • 针对未启用请求者付费的存储桶:即使请求携带了计费项目头,GCS也会接受该请求,并将相关费用计入请求中指定的项目。
  • X-Goog-User-Project头的作用是指定承担请求费用的项目,不仅适用于请求者付费存储桶,也会作用于公共存储桶的请求。

测试验证

你的测试结果已经明确印证了这一点:

  1. gsutil -d ls gs://gcp-public-data--broad-references的请求头中无X-Goog-User-Project
  2. gcloud --log-http storage ls gs://gcp-public-data--broad-references的请求头自动包含了默认项目作为X-Goog-User-Project
  3. 访问请求者付费存储桶gs://gnomad-public-requester-pays时,gsutil因缺少项目头报错,而gcloud storage自动附加头后成功访问,进一步证明了自动附加行为。
解决方案

要避免为公共数据传输付费,有两种方式:

临时单命令禁用

在执行gcloud storage命令时添加--no-user-project参数,示例:

gcloud storage ls gs://gcp-public-data--broad-references --no-user-project

此命令不会附加X-Goog-User-Project头,费用由公共存储桶所有者承担。

全局配置禁用

如果希望所有gcloud storage请求默认都不附加该头,执行以下配置命令:

gcloud config set storage/user_project_enabled false

配置生效后,后续所有gcloud storage请求都不会自动添加X-Goog-User-Project头,和gsutil的默认行为一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26