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

Google Cloud Function上传数据至Labelbox遇Forbidden错误排查

解决Google Cloud Function中Labelbox API返回Forbidden认证错误

我编写了一段用于从GCS存储桶读取文件并上传至Labelbox的Google Cloud Function代码,但触发时Labelbox返回Forbidden错误,提示请求认证失败。已确认:

  • Labelbox API密钥正确
  • 密钥具备项目数据上传权限
  • 函数可正常读取GCS存储桶内的数据

代码如下:

import labelbox
from labelbox import Client, Dataset
import os
import uuid
import logging

# Add your API key below
LABELBOX_API_KEY = "my api key"
client = Client(api_key=LABELBOX_API_KEY)

def upload_asset(event, context):
    """Uploads an asset to Catalog when a new asset is uploaded to GCP bucket. 
       If a dataset with bucket_name exists in Catalog, then an asset is added to that dataset. Otherwise, a new dataset is created.
    Args:
         event (dict): Event payload.
         context (google.cloud.functions.Context): Metadata for the event.
    """
    file = event
    bucket_name = file['bucket']
    object_name = file["name"]
    
    try:
        datasets = client.get_datasets(where=Dataset.name == bucket_name)
        dataset = next(datasets, None)
        if not dataset:
            dataset = client.create_dataset(name=bucket_name)
        url = f"gs://{bucket_name}/{object_name}"
        dataset.create_data_row(row_data=url, external_id=object_name )
        logging.getLogger().setLevel(logging.DEBUG)
        return "success"
    except Exception as e:
        print(f"Error: {e}")
        return "failure"

可能的成因

  • API密钥权限范围不匹配:密钥虽有效,但未被授予目标Labelbox项目的写入权限(如创建数据集、添加数据行),或密钥关联的项目并非你要上传的目标项目。
  • 硬编码密钥的部署问题:GCP Function中硬编码密钥可能导致部署时密钥未正确注入,或在版本控制中被意外修改,导致运行时使用无效密钥。
  • Labelbox SDK版本问题:旧版本SDK存在认证逻辑bug,导致请求无法通过Labelbox权限校验。
  • 未指定目标Project ID:Client初始化时未明确指定project_id,默认使用密钥关联的第一个项目,而该项目并非目标操作项目,触发权限校验失败。

解决办法

1. 验证API密钥的权限与关联项目

  • 登录Labelbox控制台,进入Account Settings > API Keys页面。
  • 确认目标API密钥关联的项目是你要上传数据的项目。
  • 检查密钥权限列表,确保包含Create Dataset和Create Data Row等写入权限(自定义权限组需包含对应操作)。

2. 使用环境变量存储API密钥

避免硬编码密钥,改用GCP Function环境变量传递:

  • 在GCP Function配置页面添加环境变量LABELBOX_API_KEY,值为你的Labelbox API密钥。
  • 修改代码中的密钥获取逻辑:
    # 替换硬编码的密钥
    LABELBOX_API_KEY = os.environ.get("LABELBOX_API_KEY")
    if not LABELBOX_API_KEY:
        raise ValueError("LABELBOX_API_KEY environment variable not set")
    client = Client(api_key=LABELBOX_API_KEY)
    

3. 升级Labelbox SDK到最新版本

在Function的requirements.txt中指定最新版本的Labelbox SDK:

labelbox>=3.60.0
google-cloud-storage>=2.14.0

重新部署Function,确保使用最新版SDK。

4. 初始化Client时明确指定Project ID

若API密钥关联多个Labelbox项目,初始化Client时需明确指定目标项目ID:

client = Client(api_key=LABELBOX_API_KEY, project_id="your-target-project-id")

项目ID可在Labelbox项目页面的URL中获取(格式为app.labelbox.com/projects/{project-id})。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:15:01