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

GCS文件夹级短期凭证:签名URL替代方案问询

GCS指定路径短期授权方案

你需要的前缀级短期凭证能力GCS原生提供,完全对标S3 Federation Token、Azure Blob Storage STS Token的使用体验,不需要逐文件生成签名URL,也不需要创建临时服务账号。

核心方案:使用GCP STS缩域令牌(Downscoped Tokens)

这是GCP官方专门为第三方临时授权场景设计的能力,匹配你所有业务要求:

  • 签发逻辑:你方持有的业务服务账号(拥有目标存储桶的写入权限),可直接调用STS接口生成权限被严格收窄的短期OAuth2令牌,整个过程不需要创建额外的云资源,接口响应耗时在百毫秒级,无服务账号创建的延迟问题。
  • 权限约束:生成令牌时可精确限定权限生效范围,仅允许访问指定桶下的单个对象前缀,比如customer/project/uploadId/*,同时仅开放storage.objects.create(上传新对象)权限即可。持有令牌的用户/工具可以在该路径下上传任意数量、任意文件名的对象,完全支持1个清单文件配套数千个分片的上传场景,不需要提前预知文件总数,也不需要逐文件向你方申请授权。
  • 身份要求:令牌本身是不绑定Google账号的匿名可使用凭证,第三方拿到后可以直接用任意支持GCS OAuth认证的工具(gsutil、gcloud CLI、各语言GCS SDK、Redshift/Snowflake等数据库的GCS卸载组件)直传文件,流量不经过你方服务器中转。
  • 安全边界:令牌默认有效期最短15分钟、最长12小时,过期自动失效;且完全无法访问指定前缀之外的桶内资源、其他存储桶的资源,和你现有S3/ABS的路径隔离安全逻辑完全一致。

最小实现参考

以下为Python SDK生成指定前缀上传权限令牌的示例代码:

import google.auth
from google.auth import downscoped
from google.auth.transport import requests as gcp_requests

# 加载你方业务持有的高权限服务账号凭证
source_creds, _ = google.auth.default(
    scopes=["https://www.googleapis.com/auth/cloud-platform"]
)

# 定义权限缩窄规则:仅允许向指定桶的uploadId前缀下写入新对象
access_boundary = downscoped.CredentialAccessBoundary(
    rules=[
        downscoped.AccessBoundaryRule(
            available_resource="//storage.googleapis.com/projects/_/buckets/你的业务桶名",
            available_permissions=["inRole:roles/storage.objectCreator"],
            availability_condition={
                "expression": "resource.name.startsWith('projects/_/buckets/你的业务桶名/objects/customer/project/uploadId/')"
            }
        )
    ]
)

# 生成短期缩域令牌,默认有效期1小时
downscoped_creds = downscoped.Credentials(
    source_credentials=source_creds,
    credential_access_boundary=access_boundary
)

# 刷新获取有效令牌,直接返回给客户端即可使用
downscoped_creds.refresh(gcp_requests.Request())
client_access_token = downscoped_creds.token

特殊场景兼容方案

如果你的对接工具不支持OAuth2令牌认证、仅支持类S3的签名认证方式,不需要退回单文件Signed URL方案,可以使用V4签名POST策略:

  • 你方服务端生成带前缀约束的策略文档并签名,一次签名即可授权客户端在指定前缀下上传任意数量的对象,同样支持任意文件名、任意数量分片的上传场景
  • 该方案兼容GCS的S3兼容接口,你甚至可以复用现有S3侧的客户端上传逻辑,不需要做大规模改造

方案对比说明

你之前排查到的几个方案的局限性确实存在:

  • 单文件Signed URL仅能针对单个对象授权,逐文件申请会大幅增加服务端压力、拖慢上传效率,不适合大量分片的上传场景
  • ACL、临时服务账号方案绑定Google身份,资源创建流程慢,官方不推荐用于高频临时授权场景
  • 缩域令牌是该场景下的官方推荐方案,能力完全对齐你在S3、ABS上的现有实现。

注意:生成令牌时不要授予超出业务需要的权限(比如对象列表、删除、读取权限),仅保留storage.objects.create权限即可最大化安全系数;令牌有效期建议根据实际上传预估时长设置,不需要设置过长。

内容的提问来源于stack exchange,提问作者Tomáš Fejfar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:18:18