【发布时间】:2020-07-24 08:13:34
【问题描述】:
我有一个 GCP 组织下的 Firebase 项目。我有 NodeJS 10 可调用函数,可以在 Firebase 本地模拟器和 GCP 函数测试页面中正常工作,但是当尝试在 webapp 中使用 httpsCallable 在生产中调用它们时,我得到 401 Unauthorized - 您的客户端没有请求的 URL 的权限
我的测试函数几乎没有 - 它只是返回一个硬编码的字符串。调用尝试后日志中没有任何内容。
函数调用尝试是在webapp中通过Firebase身份验证后完成的,在开发中我看到确实将用户传递给了上下文参数。
我使用 Firebase Tools 8.0.2 进行部署。
在 GCP 控制台功能详细信息中,我看到“入口设置 - 允许所有流量”,正如我上面所写,它从那里的测试选项卡成功运行。
我尝试公开该功能,但无法在控制台或 gcloud 中设置权限。当我尝试使用 gcloud 运行以下命令时:
gcloud functions add-iam-policy-binding my-function-name \
--member="allUsers" \
--role="roles/cloudfunctions.invoker"
我明白了:
ERROR: (gcloud.functions.add-iam-policy-binding) ResponseError: status=[403], code=[Forbidden], message=[Permission 'cloudfunctions.functions.setIamPolicy' denied on resource 'projects/my-project-name/locations/us-central1/functions/my-function-name' (or resource may not exist).]
即使我的帐户具有以下角色:项目所有者、云功能管理员、安全管理员、IAP 策略管理员、组织管理员
任何指导将不胜感激。
【问题讨论】:
-
错误信息表示CLI使用的凭证没有权限。仔细检查帐户:
gcloud auth list、您的项目gcloud config list以及分配给您帐户的角色gcloud projects get-iam-policy PROJECT_ID。 -
确实 gcloud 活动帐户不正确,将其设置为正确的帐户允许我设置 IAM 以公开功能。谢谢约翰。我不明白的是,如果在通过 Firebase 身份验证后调用该函数,为什么根本需要这样做。我还尝试设置 allAuthenticatedUsers 而不是 allUsers,但仍然出现相同的错误。我是否混淆了两种类型的用户?
-
发布一个答案,显示您的原始问题的解决方案(包括您如何确定解决方案的步骤)。然后为您的新问题创建一个新问题。尽量不要将评论部分用作其他问题的聊天室。
标签: firebase google-cloud-platform google-cloud-functions