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

Can't run Firebase Test Lab tests using gcloud and service account: 403, does not have storage.objects.create

我正在尝试 运行 使用 glcoud CLI 作为 CircleCi 中的服务帐户进行检测测试。当我 运行:

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 控制台和 Google 云控制台、阅读 SO、在 Slack 上寻求帮助以及比我愿意承认的更多的试验和错误之后,我发现 Firebase 控制台具有服务帐户页面:

https://console.firebase.google.com/u/0/project/project-name-12345/settings/serviceaccounts/adminsdk

这与 Google Cloud Console

中的服务帐户页面不同

https://console.cloud.google.com/iam-admin/serviceaccounts/project?project-name-12345

原来你想要Firebase服务账号,你无法通过云控制台创建一个。超级超级烦人

您应该能够使用在 Google Cloud Console 中创建的服务帐户。您的服务帐户是否具有所需的项目 编辑者 角色? (如本文档中所述:https://firebase.google.com/docs/test-lab/continuous

这是我放入我的服务帐户的角色列表:

  1. Firebase - Firebase 管理员(我认为这太过分了。我可能会稍后更新)
  2. 项目 - 编辑器
  3. 存储 - 存储对象创建器

无论您是从 Firebase 还是从 google 云控制台创建服务帐户都没有关系。只要您的服务帐户中拥有这些角色,您就应该能够 运行 Firebase 测试实验室。

我创建密钥的步骤如下:
1. Firebase 控制台 https://console.firebase.google.com/
2.项目设置
3. "Service Accounts" 选项卡
4. 在 "Service Accounts" 面板内,Firebase Admin SDK
5. 在 "Firebase Admin SDK" 面板的底部,"Generate new private key"

这就是 Etherton 的回答

即使在那之后,我仍然有一些错误。所以,我添加了一堆角色如下。

Firebase 测试实验室管理员
Firebase 服务管理服务代理
Firebase Admin SDK 管理员服务代理
服务帐户令牌创建者
存储对象创建者

这也没有解决。所以,最后,我申请了 P。 Davis 通过向服务帐户添加 Editor 角色来回答。

添加编辑角色的步骤如下
1. 转到 google 云控制台 https://console.cloud.google.com/iam-admin/iam
2.进入"IAM"
3. 使用从 firebase 控制台下载的 json 文件中的 "client_email" 找到您需要编辑的服务帐户
4.点击右边的"Edit"图标
5. 向下滚动并 "Add Another Role"
6. 单击输入框并输入 "Editor" 以搜索
7. 选择字幕"Edit access to all resource"
8.保存
9.现在你应该可以使用了

对于偶然发现这一点并且不想使用所有强大的项目编辑器角色的人,以下是我为我的服务帐户使用的角色: Firebase Test Lab Roles

我认为 Firebase Analytics Viewer 角色不是必需的,因为它主要只是执行测试。为了查看结果,我们改用开发者帐户,但还没有尝试删除它。

我们 运行 遇到与 storage.objects.create 相同的权限问题。我们已经添加了这里提到的所有角色,除了我们想要避免的 Editor 角色,但它仍然失败了。我们使用的是服务帐户,它绝对具有适当的权限。

最后,我们的解决方法是手动设置云存储桶,然后在 gcloud--results-bucket 参数中使用它。请参阅文档 here。这终于为我们修好了。