无法使用gcloud和服务帐户运行Firebase测试实验室测试:403,没有storage.objects.create权限。

13

我正在尝试在CircleCi中使用服务帐户以glcoud CLI运行检测测试。 当我运行以下命令时:

gcloud config set project project-name-12345
gcloud auth activate-service-account firebase-testlab-serviceuser@project-name-12345.iam.gserviceaccount.com --key-file ${HOME}/client-secret.json
gcloud firebase test android run --type instrumentation --app debug-app.apk --test debug-test.apk --device model=Nexus6P,version=27,locale=en,orientation=portrait --environment-variables coverage=true,coverageFile=/sdcard/tmp/code-coverage/connected/coverage.ec --directories-to-pull=/sdcard/tmp --timeout 20m

我理解为:

ERROR: (gcloud.firebase.test.android.run) Could not copy [debug-app.apk] to [gs://test-lab-xxxxxxxx-yyyyyyyy/2018-01-18_17:14:09.964449_zPAw/] ResponseError 403: firebase-testlab-serviceuser@project-name-12345.iam.gserviceaccount.com does not have storage.objects.create access to bucket test-lab-xxxxxxxx-yyyyyyyy..

我使用API控制台(https://console.cloud.google.com/iam-admin/iam/project),已经授予我的服务用户所有我认为相关的权限:

  • Firebase 崩溃符号上传程序
  • Firebase 测试实验室管理员
  • 存储管理员
  • 存储对象管理员
  • 存储对象创建者
  • 存储对象查看器
  • Firebase 规则系统

如果有任何帮助将不胜感激。谢谢。

6个回答

13

不,它没有编辑角色,但我看到我通过Firebase页面创建的服务帐户确实具有该角色。所以那可能是问题所在。谢谢。 - etherton
我不得不在谷歌云端删除并重新创建服务帐户,并为项目->编辑权限,以使其正常工作。 - Diederik

6
在 Firebase 控制台和 Google Cloud 控制台上反复点击、查阅 SO、在 Slack 上请求帮助,以及经历了更多我不愿承认的试错后,我发现 Firebase 控制台有一个服务帐号页面:https://console.firebase.google.com/u/0/project/project-name-12345/settings/serviceaccounts/adminsdk。这与 Google Cloud 控制台中的服务帐号页面是不同的:https://console.cloud.google.com/iam-admin/serviceaccounts/project?project-name-12345。事实证明,如果你想要 Firebase 的服务帐号,则无法通过云控制台创建一个。非常、非常令人恼火。

这很有帮助!我在创建具有编辑器角色的新服务帐户时遇到了问题。看到这个答案后,我注意到我已经在Google Cloud控制台页面上拥有了firebase-admin服务帐户。您可以从Google页面或Firebase页面为此服务帐户生成密钥(结果相同)。现在一切都正常工作了。谢谢! - Stephen Ruda

4
我创建密钥的步骤如下:
1. Firebase控制台 https://console.firebase.google.com/
2. 项目设置
3. “服务帐户”选项卡
4. 在“服务帐户”面板内,选择Firebase管理SDK
5. 在“Firebase管理SDK”面板底部,“生成新的私有密钥”
这是 Etherton 回答的内容:
https://dev59.com/wVYM5IYBdhLWcg3wzSog#48327579 即使这样,我仍然有一些错误。 因此,我添加了一堆角色如下。
Firebase测试实验室管理员
Firebase服务管理服务代理
Firebase管理SDK管理员服务代理
服务帐户令牌创建器
存储对象创建者
那也没有解决问题。 所以,最后,我采用P. Davis 的方法,将 Editor 角色添加到服务帐户中。
https://dev59.com/wVYM5IYBdhLWcg3wzSog#48331465 添加 Editor 角色的步骤如下:
1.进入Google Cloud控制台:https://console.cloud.google.com/iam-admin/iam
2.进入"IAM"
3.使用从firebase控制台下载的json文件中的“client_email”查找需要编辑的服务帐户
4.单击右侧的“编辑”图标
5.向下滚动并“添加其他角色”
6.点击输入字段并键入“Editor”进行搜索
7.选择包含副标题“编辑对所有资源的访问权限”的那个
8.保存
9.现在您应该能够使用它。

3
对于那些不想使用强大的项目编辑器角色的人,这里是我为自己的服务帐户使用的角色: Firebase测试实验室角色 我认为Firebase分析查看器角色并不是必需的,因为它主要只是执行测试。我们使用开发者帐户来查看结果,但尚未尝试删除它。

3

这是我在服务账户中添加的角色列表:

  1. Firebase - Firebase管理员(我认为这有些过度了,我可能会稍后更新它)
  2. 项目 - 编辑器
  3. 存储 - 存储对象创建者

无论您是从Firebase还是Google Cloud控制台创建服务账户,只要在服务帐户中拥有这些角色,则应该能够运行Firebase测试实验室。


2
我们遇到了与storage.objects.create相关的权限问题。我们已经添加了这里提到的所有角色,除了我们想要避免的Editor角色,但仍然失败了。我们使用的是服务帐户,并且它肯定拥有适当的权限。
最终,我们的解决方法是手动设置云存储桶,然后在gcloud--results-bucket参数中使用它。请参见此处的文档。这最终为我们解决了问题。

哇,这个可行了,谢谢!很混乱,它称之为“结果桶”的东西也用来存储上传的 APK 文件。 - dshepherd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接