Firebase功能部署失败,访问权限

时间:2018-06-13 16:46:18

标签: firebase google-compute-engine google-cloud-functions

使用firebase-tools v3.18.6,我的帐户中有3个不同的项目模拟dev / qa / prod环境。部署到dev和qa工作正常,但部署到第3个项目失败,出现以下调试输出(屏蔽可能的敏感信息):

firebase --debug --project=prod deploy --only functions
... lots of debug output ...
[2018-06-13T15:36:07.954Z] <<< HTTP RESPONSE 403 x-guploader-uploadid=AEnB2UoLPpYzpkSxyI2w-TCcJeZX8XvBvId1gEIMX1yoTBLqhEyNTR7whmnMV7z9gyVZ14T6QZj9I4GBXjBm_bj_FWgyc-v6hynRxROPl1sIQh_O1d8UWq0, content-type=application/xml; charset=UTF-8, content-length=297, vary=Origin, date=Wed, 13 Jun 2018 15:36:07 GMT, server=UploadServer, alt-svc=quic=":443"; ma=2592000; v="43,42,41,39,35", connection=close
[2018-06-13T15:36:07.955Z] <<< HTTP RESPONSE BODY <?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message><Details>service-XXXXXXXXXXX@gcf-admin-robot.iam.gserviceaccount.com does not have storage.objects.create access to gcf-upload-us-central1-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX.</Details></Error>

我已经关注the google cloud docs并确保:

  1. 启用所有需要的api
  2. 机器人的服务帐户具有CloudFunctions.ServiceAgent角色
  3. 我有项目的编辑/所有者权限
  4. 证明:

    $ gcloud services list --project=prod | grep functions
    cloudfunctions.googleapis.com        Cloud Functions API
    $ gcloud projects get-iam-policy prod | grep -B1 -A1 gcf
    - members:
      - serviceAccount:service-XXXXXXXXXXX@gcf-admin-robot.iam.gserviceaccount.com
      role: roles/cloudfunctions.serviceAgent
    $ gcloud projects get-iam-policy prod | grep -B1 -A1 jorgeg
    - members:
      - user:jorgeg@company.com
      role: roles/owner
    

    此时我确信在我的项目中启用firebase功能apis时内部出了问题,但想知道在我升级支持级别之前是否有人看到了同样的问题。

    TIA

2 个答案:

答案 0 :(得分:2)

我们遇到了同样的问题并通过以下方式解决了这个问题:

  1. 在gcloud存储中创建一个名为foo的存储桶
  2. 使用该存储桶部署gcloud beta的功能:
  3. gcloud beta函数部署myFunction --trigger-http --stage-bucket foo

    1. 修复权限,然后常规firebase部署开始工作

答案 1 :(得分:0)

我不记得那是否与我收到的完全相同的错误信息,但我认为我经历过类似的事情 - 我知道它与云功能有关。我记得我的服务帐户没有获得许可,甚至根本不存在。不幸的是,我无法解决它(我太懒了,无法接触Firebase支持)。

在我的情况下,我很幸运,这是开发环境,所以没有人关心我是否将其删除并制作了新的环境。我导出了我的数据库,删除了有问题的项目,并开始使用新的Firebase项目......并修复了它。我不确定这是否适合你,因为你说它的制作失败了,如果其他人会关心你是否垃圾和放弃重新启动。