本页面概述了 Cloud Storage 的“请求者付款”功能。
简介
每次用户访问存储桶或对象等 Cloud Storage 资源时,都会产生与发出和执行请求关联的费用。此类费用包括:
通常,资源的项目所有者需支付这些费用;但是,如果请求者随其请求一起提供结算项目,则会针对请求者的项目进行计费。在您的存储桶上启用“请求者付款”功能后,您可以要求请求者在其请求中包含一个结算项目,从而对请求者的项目进行计费。在某些情况下,启用请求者付款功能能够为您带来便利;例如,您想要向用户提供大量数据,但您不希望承担他们访问这些数据所产生的费用,在这种情况下,建议您启用此功能。
未涵盖的费用
数据存储费用(包括提前删除费用)会始终应用于包含存储桶的项目,即使启用了请求者付款功能也是如此。
限制
使用请求者付款功能时,需遵循下列限制:
- 启用了请求者付款功能的存储桶不适用于 Cloud SQL 的导入和导出操作。
- 您无法使用启用了请求者付款功能的存储桶从 Pub/Sub 导出数据。
使用和访问要求
如需为存储桶启用请求者付款功能,请对存储桶启用元数据标志。启用后,只有以下用户可以访问存储桶或其内容:
在请求中包含结算项目的请求者。请求中使用的项目必须信誉良好,而且用户在项目中必须具有角色,此角色包含
serviceusage.services.use
权限。Service Usage Consumer 角色包含所需的权限。没有将结算项目包含在内、但对包含存储桶的项目具有
resourcemanager.projects.createBillingAssignment
权限的请求者。Billing Project Manager 角色包含所需的权限。这些请求产生的访问费用将计入包含存储桶的项目。
对存储桶发出的所有其他请求都会失败并显示一个 400 UserProjectMissing
错误。
除了这些要求之外,请求者还必须具有足够的权限来执行请求的操作。例如,如果在请求中提供了有效结算项目的用户要将对象上传到存储桶中,他们还必须具有与此操作关联的明确权限,例如,对该存储桶或包含该存储桶的项目具有 storage.objects.create
权限。
停用请求者付款功能时,您必须在请求中添加结算项目,或者拥有 resourcemanager.projects.createBillingAssignment
权限。
对来源计费的操作
同时具有源存储桶和目标存储桶的操作(例如复制或重写)将对包含源存储桶的项目收费。在大多数情况下(例如,使用 JSON 和 XML API 执行的直接调用),仅当源存储桶启用了“请求者付款”功能时,您才需要将结算项目包含在内。
在某些情况下(例如,带有 --no-clobber
标志的 gcloud storage cp
),如果源存储桶或目标存储桶(或两者皆有)启用了“请求者付款”功能,则您需要将结算项目包含在内。这是因为,此类操作会在执行操作的过程中同时调用源存储桶和目标存储桶。
多请求操作
对于需要多个请求才能完成的操作,请求中使用结算项目具有以下行为:
对于使用 JSON API 重写和 XML API 部分上传,每个请求可以使用不同的结算项目和先前请求中指定的结算项目不适用于后续请求。
结算
在请求中包含结算项目所产生的费用不会单独显示在您的结算中。例如,假设您从“请求者付款”存储桶中进行了多次下载,并使用项目 my-project
作为请求结算项目。如果 my-project
也包含您从中执行下载的存储桶,则您的账单仅显示下载合并后的总费用。账号不会区分来自您自己的存储桶的下载和来自“请求者付款”存储桶的下载。
如果您想区分自己的 Cloud Storage 资源产生的费用和在请求中加入结算项目产生的费用,则应创建不包含 Cloud Storage 资源的项目:因此,此项目专用于发出对其他项目中的资源(例如请求者付款功能的存储桶)的请求。
后续步骤
- 了解如何使用“请求者付款”功能。
- 公开提供数据。