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

如何通过密钥访问Google Cloud Storage中的文件

解决方案:GCP Storage 无需登录且通过请求头密钥访问私有资源

首先明确:GCP Cloud Storage 本身不支持直接通过自定义请求头密钥鉴权访问私有对象,但可以通过以下方案实现你的需求:

方案1:修正Bearer令牌使用方式(GCP原生鉴权)

你之前尝试Bearer令牌未生效,大概率是令牌生成或权限配置有误,正确操作步骤如下:

  • 创建仅拥有storage.objects.get权限的服务账户,下载其JSON密钥文件
  • 用gcloud命令生成短期访问令牌:
    gcloud auth application-default print-access-token
    
    或用Python代码生成(适合自动化场景):
    from google.oauth2 import service_account
    import requests
    
    credentials = service_account.Credentials.from_service_account_file(
        '你的密钥文件路径.json',
        scopes=['https://www.googleapis.com/auth/devstorage.read_only']
    )
    token = credentials.token
    
    # 请求示例
    headers = {'Authorization': f'Bearer {token}'}
    response = requests.get('https://storage.googleapis.com/你的桶名/你的对象路径', headers=headers)
    
  • 注意:令牌默认有效期1小时,需定期刷新;务必限制服务账户的权限范围,仅授权访问指定对象或桶

方案2:自定义密钥鉴权 + 中间层转发(完全自定义请求头)

如果必须使用自定义密钥而非GCP原生令牌,可通过Cloud Functions或Cloud Run搭建鉴权中间层:

  1. 创建HTTP触发的Cloud Function,核心逻辑如下(Node.js示例):
    const { Storage } = require('@google-cloud/storage');
    const storage = new Storage();
    
    exports.servePrivateImage = async (req, res) => {
      // 验证请求头中的自定义密钥
      const authKey = req.get('X-Auth-Key');
      if (authKey !== '你预设的自定义密钥') {
        return res.status(403).send('Unauthorized');
      }
    
      // 提取要访问的对象路径(可从请求参数或路径中获取)
      const bucketName = '你的桶名';
      const objectName = req.query.imagePath;
    
      try {
        const file = storage.bucket(bucketName).file(objectName);
        const [content] = await file.download();
        res.set('Content-Type', file.metadata.contentType);
        res.send(content);
      } catch (err) {
        res.status(500).send('获取资源失败');
      }
    };
    
  2. 部署后,用户只需在请求头中携带X-Auth-Key: 你预设的自定义密钥访问Cloud Function的URL,即可获取私有图片,无需登录谷歌账号
  3. 优势:完全自定义密钥规则,有效期可自行控制;劣势:增加了一层转发,会产生少量额外开销

方案3:签名URL(备选,URL参数鉴权)

如果可以接受凭证放在URL参数中,签名URL是更轻量的选择:

  • 用gcloud命令生成带有效期的签名URL:
    gsutil signurl -d 7d 你的密钥文件路径.json gs://你的桶名/你的对象路径
    
  • 生成的URL可自定义有效期(示例为7天),用户无需登录即可访问,且URL泄露后仅在有效期内可访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:16:07