问题
我定义了几个 Firebase Cloud Functions,并 deploy
到了服务器
但是,每次在 iOS 等 App 里调用都会出现 UNAUTHENTICATED
或者 401 Unauthorized
的 error,反复查找
喷一句:Google Cloud 文档是一坨屎
概念疏理
- Firebase Cloud Function:它本质是部署在 Google Cloud 上的服务,这里就会出现几个新的概念 Cloud Run、Cloud Run function、IAM
- Cloud Run:在 Google Cloud 上运行 Container 的服务
- Cloud Run function:在 Google Cloud 上直接运行 Serverless function 的服务 👈 也是 Firebase Cloud Function 依赖的服务
- IAM:全名 Identity and Access Management,用来管理云服务 access control 和 permission 的服务(在云服务里都很常见)
问题归因
2024年5月3日创建的 Organization,Google Cloud 增加了一些安全规则,即
Note : If your organization was created on or after May 3, 2024, then the
iam.allowedPolicyMemberDomains
predefined constraint is enforced by default, with your domain listed as the only allowed value. 👉 LINK
而一个 cloud function invoker 默认是被限制在这个 constraint 里的,即无法设置 allUsers
或 allAuthenticatedUsers
。即无法被设置为 publicly accessible,也就无法被 App 调用
再说清楚一点:
- Organization policy 自动开启了
iam.allowedPolicyMemberDomains
限制 - Project policy 默认 inherit Organization policy,所以也有限制
- Cloud Functions 默认要遵守这个 Project policy,因此无法被设置
Cloud Run Invoker
permission 到allUsers
或allAuthenticatedUsers
- 无法被 App 正常调用
问题解决
- 在 Project policy 里 override
iam.allowedPolicyMemberDomains
为Allow All
- 在 Cloud Functions 上增加
Cloud Run Invoker
permission 到allUsers
当然, 这里是有点小风险的,后续要解决
AI Agent 能解决吗?
其实比较好的新 AI 工具 Grok 3、Claude 3.7 在思考中都已经把每一步可能的问题思考到了,并引导我去解决,但是:
- 互联网上这个问题被描述清楚的文章很少(Stackoverflow、GitHub)
- 官方 Google Cloud 文档一坨屎
- Google Cloud IAM 权限设置等都很复杂,得和 AI Agent 一步一步地一起解决(我会截图和它 confirm 对不对)
简言之,脑子、逻辑、知识储备都没问题,但会被已有互联网内容的缺失影响,以及功能这种非文本内容的知识要让 AI 怎么学会?
笔记结束:Google Cloud 这种"重"云服务在 AI 生成代码不断轻量简化的时代里大概率要被 Vercel、Bolt.new 取代,包括 Firebase 明显是个套壳怪,不是轻量化、AI 化的本质!