已启用GCP Billing仍遇GCS上传403禁用账户错误求助
GCS文件上传403错误排查方案
问题场景
我用以下Python代码上传文件到Google Cloud Storage:
def upload_to_gcs(bucket_name, local_file_path, gcs_file_name): """ Uploads local files to Google Cloud Storage (GCS). :param bucket_name: string :param local_file_path: string :param gcs_file_name: string :return: None """ client = storage.Client() bucket = client.bucket(bucket_name) blob = bucket.blob(gcs_file_name) blob.upload_from_filename(local_file_path)
运行时触发403 Forbidden错误:
Exception has occurred: Forbidden 403 POST https://storage.googleapis.com/upload/storage/v1/b/monzo/o?uploadType=multipart: { "error": { "code": 403, "message": "The billing account for the owning project is disabled in state closed", "errors": [ { "message": "The billing account for the owning project is disabled in state closed", "domain": "global", "reason": "accountDisabled", "locationType": "header", "location": "Authorization" } ] } }
已验证信息
- 项目
miguel-377315的GCP账单已启用,Cloud Shell查询结果:
miguel@cloudshell:~$ gcloud beta billing projects describe miguel-377315 billingAccountName: billingAccounts/0193C3-8A2BD3-44C7DB billingEnabled: true name: projects/miguel-377315/billingInfo projectId: miguel-377315
- 已尝试Stack Overflow同类问题的所有解决方案,联系谷歌客服未获有效帮助。
排查思路
- 确认Bucket所属项目:错误提示中的Bucket是
monzo,先核实该Bucket实际所属的GCP项目,有可能代码指定的Bucket并不属于miguel-377315,而是归属另一个账单已关闭的项目。可在GCS控制台搜索Bucket名称查看所属项目信息。 - 锁定身份验证的项目/账号:代码中
storage.Client()默认初始化会读取本地认证凭据(环境变量、gcloud默认配置、服务账号密钥文件等)。确认代码运行环境的默认项目是否为miguel-377315,可在代码中显式指定项目ID:
同时检查本地gcloud配置:运行client = storage.Client(project="miguel-377315")gcloud config get-value project,查看输出是否为miguel-377315,若不是则切换项目后重新测试。 - 检查服务账号的权限与账单关联:如果代码使用服务账号密钥,确认该服务账号所属项目是否绑定有效账单账号,且服务账号拥有
storage.objects.create权限。另外排查服务账号是否被限制了账单相关操作权限。 - 深挖账单账号状态细节:虽然
billingEnabled显示为true,但需进入GCP账单控制台,查看对应账单账号0193C3-8A2BD3-44C7DB的状态,是否存在未结清账单、支付方式失效、账号处于暂停/限制等隐性状态。 - 核查Bucket访问控制策略:确认Bucket的IAM权限是否允许当前认证账号上传文件,比如是否分配了
Storage Object Creator或Storage Admin角色。同时检查Bucket是否设置了强制组织政策限制上传操作。 - 测试基础API连通性:用gcloud命令直接测试上传文件到目标Bucket:
若同样报错,说明问题出在项目/Bucket配置上;若成功,则说明代码的认证方式存在问题,需排查代码使用的凭据是否正确。echo "test content" > test.txt gsutil cp test.txt gs://monzo/test.txt
内容的提问来源于stack exchange,提问作者mcansado
相关产品推荐
相关产品推荐

