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

从Github Actions部署至GAE时Cloud Build存储桶权限异常排查

问题描述

通过Github Actions部署全新应用到Google App Engine(GAE)时,触发如下错误:
Failed to create cloud build: invalid bucket "<PROJECT_NUMBER>.cloudbuild-logs.googleusercontent.com"; default Cloud Build service account or user-specified service account does not have access to the bucket

已尝试两种修复操作但问题依旧:

  • 用--bucket gs://generic-app指定默认以外的日志存储桶
  • 使用拥有Owner角色的自定义服务账号(已导出密钥并传入credentials_json参数)

完整Workflow配置文件如下:

name: Deploy to Goggle App Engine

on:
  push:
    branches:
      - main
      - staging

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Setup Node.js and yarn
        uses: 'actions/setup-node@v2'
        with:
          node-version: '18'

      - name: Install dependencies
        run: yarn

      - name: Build Node Project
        run: yarn build

      # Production
      - name: Google Cloud Auth Production
        if: github.event_name == 'push' && github.ref == 'refs/heads/main'
        uses: 'google-github-actions/auth@v2'
        with:
          credentials_json: '${{ secrets.GCP_SA_KEY_PRODUCTION }}'
          project_id: ${{ secrets.GCP_PROJECT_ID_PRODUCTION }}

      # Staging
      - name: Google Cloud Auth Staging
        if: github.event_name == 'push' && github.ref == 'refs/heads/staging'
        uses: 'google-github-actions/auth@v2'
        with:
          credentials_json: '${{ secrets.GCP_SA_KEY_STAGING }}'
          project_id: ${{ secrets.GCP_PROJECT_ID_STAGING }}

      - name: Set up Cloud SDK
        uses: 'google-github-actions/setup-gcloud@v2'

      - name: Deploy to Google App Engine
        run: |
          gcloud app deploy app.yaml --quiet --version service-default --no-promote --bucket gs://generic-app
问题原因与解决方案

核心原因

  1. Cloud Build API未启用:全新GAE项目默认不会开启Cloud Build API,而gcloud app deploy部署时会调用该API构建镜像(即便本地已完成构建),API未开启会导致权限验证环节异常,进而抛出存储桶访问错误。
  2. Workflow步骤顺序错误:setup-gcloud步骤在auth步骤之前执行,导致Cloud SDK初始化时未继承已认证的服务账号身份,后续部署使用的是未授权的默认身份。
  3. 自定义存储桶权限不足:指定的gs://generic-app存储桶未对服务账号开放必要的读写权限。

修复步骤

  1. 启用Cloud Build API
    登录GCP控制台,进入对应项目,搜索「Cloud Build API」,点击启用按钮。

  2. 调整Workflow步骤顺序
    将Set up Cloud SDK步骤移至两个Auth步骤之后,确保Cloud SDK使用已认证的服务账号:

    # 保留原Auth步骤
       # Production Auth...
       # Staging Auth...
    
       - name: Set up Cloud SDK
         uses: 'google-github-actions/setup-gcloud@v2'
    
       # 部署步骤紧随其后
    
  3. 配置自定义存储桶权限

    • 打开GCP控制台的存储桶页面,找到gs://generic-app
    • 进入「权限」标签页,点击「添加权限」
    • 输入自定义服务账号邮箱,授予Storage Object Admin角色(或拆分授予Storage Object Creator+Storage Object Viewer)
    • 保存配置
  4. 验证服务账号角色
    确认自定义服务账号已拥有以下必要角色:

    • App Engine Deployer
    • Cloud Build Editor
    • Storage Object Admin(针对日志存储桶)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:17:10