集成Stripe的Google Firebase云函数安全权限配置咨询
GCP Cloud Function 对接Stripe的最小安全权限配置方案
核心权限逻辑说明
Cloud Function的权限完全隔离,你首先要明确三类权限的差异:
- 调用函数执行:对应
roles/cloudfunctions.invoker角色,仅能触发函数运行,无法读取/修改函数代码和配置 - 读取函数代码/配置:对应
roles/cloudfunctions.viewer及更高权限角色 - 修改函数代码/配置:对应
roles/cloudfunctions.developer、roles/editor、roles/owner等权限角色
具体配置步骤
- 第一步:清理现有公开风险权限
进入Cloud Function的权限配置页,移除allUsers、allAuthenticatedUsers两个公共主体下的所有权限,确保公共主体没有viewer、developer、editor、owner等高权限角色,从根源避免公开读写代码的风险。 - 第二步:拆分函数降低攻击面(推荐)
将两个业务逻辑拆分为独立的Cloud Function,避免权限交叉:- 函数A:负责向Stripe发送支付意图,仅允许内部业务服务调用
- 函数B:负责接收Stripe回调通知,仅处理Stripe的合法请求
- 第三步:配置内部调用函数(函数A)的权限
- 不为公共主体分配任何权限,完全关闭公开访问
- 仅给调用该函数的内部业务服务对应的服务账号,授予
roles/cloudfunctions.invoker权限
- 第四步:配置Stripe回调函数(函数B)的权限
- 仅给
allUsers授予roles/cloudfunctions.invoker权限,其余权限全部移除 - 代码中必须强制校验Stripe回调的签名,使用你的Stripe webhook密钥验证请求合法性,所有非法请求直接返回403
- 仅给
- 第五步:敏感信息安全优化
禁止将Stripe密钥、webhook签名密钥硬编码在index.js中,所有敏感信息存入GCP Secret Manager,给Cloud Function的运行时服务账号授予roles/secretmanager.secretAccessor权限,函数运行时动态拉取密钥使用。 - 第六步:内部人员权限管控
- 仅给需要修改函数代码的开发人员授予
roles/cloudfunctions.developer角色 - 仅给需要查看函数配置、日志的人员授予
roles/cloudfunctions.viewer角色,禁止给无关人员分配高权限角色
- 仅给需要修改函数代码的开发人员授予
配置效果
- 所有公开用户都无法读取、篡改你的Cloud Function代码
- 只有授权的内部服务可以调用支付意图创建接口
- 回调接口只会处理Stripe的合法请求,其余匿名调用都会被拦截
- 敏感密钥不会硬编码在代码中,即使出现配置疏漏也不会泄露核心密钥
内容的提问来源于stack exchange,提问作者Brendon Cheung
相关产品推荐
相关产品推荐

