我最近继承了管理一个 firebase 项目,我正在尝试重新创建该项目,以便我有一个生产和开发版本可供使用,当我部署我的功能时,我收到以下消息:
Unable to set publicly accessible IAM policy on the following functions:
{insert long list of functions here that have the following format}
projects/{project name}/locations/us-central1/functions/{function name}
Unauthenticated users will not be able access this function.
Some common causes of this:
- You may not have the roles/functions.admin IAM role. Note that roles/functions.developer does not allow you to change IAM policies.
- An organization policy that restricts Network Access on your project.
这是错误消息还是只是说明应用程序的用户需要登录才能使用这些功能?
注意:所有这些函数均已成功创建,并且 firebase 控制台中没有错误消息。是的,我是 firebase 项目的所有者/管理员用户。
TLDR:您需要更高的谷歌云权限才能更改您的功能,以便任何用户都可以触发它们。
为了从服务器、客户端或其他来源调用某个函数,它必须具有“公开访问权限”。当我最初上传这些函数时,我从一个无权设置这些策略的帐户登录,因此我无法修改它们,因此出现错误消息。这些权限是在您的谷歌云仪表板中设置的。以下是如何更改它的一些步骤。
以下内容来自谷歌云:
前往 Google Cloud Console
单击您感兴趣的功能旁边的复选框。
单击屏幕顶部的权限。权限面板 打开。
点击添加成员。
在新成员字段中,输入需要访问您的职能的一个或多个身份。这通常是用户或服务帐户电子邮件。
从选择角色下拉菜单中选择一个或多个角色。您选择的角色将显示在窗格中,并附有其授予的权限的简短说明。
如果您想让所有经过身份验证的用户都可以访问该功能(这通常是大多数应用程序所希望的),请将成员设置为
allUsers
,将角色设置为 Cloud functions invoker
注意:IAM 权限独立于 Firebase 或应用程序权限。它们是触发/修改/查看谷歌云中信息的权限。
这是授权令牌错误/损坏/过期的问题。要使用该功能,应用程序会验证用户密钥/凭据。
将
roles/cloudfunctions.invoker
以及 roles/cloudfunctions.admin
授予正在部署该功能的主体(服务帐户或用户)可以解决该问题。
一旦部署。尝试添加
roles/cloudfunctions.invoker
为会员 allUsers
您将看到一条警告:
将 allUsers 或 allAuthenticatedUsers 添加到此资源将使其 互联网上的任何人都可以公开访问。
如果单击“接受”后您看到此错误:
IAM 策略更新失败状态无效 'projects/PROJECT/locations/REGION/functions/function-name 的 操作因前提条件错误而失败。这通常是因为 系统未处于执行操作所需的状态
这意味着组织政策
Domain Restricted Sharing
正在阻止此操作。您需要暂时豁免该政策才能授予此角色。