分配 GCP 函数服务帐号角色以使用 Terraform 与 Firebase 互动

Posted

技术标签:

【中文标题】分配 GCP 函数服务帐号角色以使用 Terraform 与 Firebase 互动【英文标题】:Assign GCP functions service account roles to engage with Firebase using Terraform 【发布时间】:2021-12-30 08:12:40 【问题描述】:

我想在我的 GCP 云函数中使用 Firebase Admin SDK,专门用于创建自定义身份验证令牌。

我在部署后收到auth/insufficient-permission 错误并到达this thread。请注意,它讨论的是 Firebase 函数,而我使用的是纯 GCP 云函数。

据我了解,GCP Cloud Functions 使用默认的 App Engine 服务帐号,该帐号缺少 Firebase Admin SDK admin service agent 角色。

我通过 GCP 控制台手动添加它,它似乎解决了这个问题,但现在我想通过我管理我的基础架构的 terraform 来自动化它。

    如何访问默认的 App Engine 服务帐户?我认为它是在创建 GCP 项目时自动创建的。 如何在不更改使用该角色的其他服务帐户的情况下将相关角色添加到其中? 这是正确的方法,还是我错过了更好的方法?

我正在查看的相关文档是here。请注意,我使用的是不带参数的 initializeApp(),即让库隐式发现服务帐户。

【问题讨论】:

【参考方案1】:

    如何通过 Terraform 获取默认 App Engine 服务帐号:google_app_engine_default_service_account

    如何使用分配给服务帐号的“其他”IAM 角色: IAM policy for service account

    对于一般性建议 - 我更愿意使用专门创建的服务帐户并完全删除(或禁用)默认 App Engine 服务帐户。

编辑 ==> 根据要求提供更多详细信息

这里是Cloud Function service account in runtime的描述:

App Engine 服务帐号具有 Editor 角色,这允许它广泛访问许多 Google Cloud 服务。虽然这是开发功能的最快方式,但 Google 建议仅将此默认服务帐户用于测试和开发。对于生产,您应该只授予服务帐户实现其目标所需的最低权限集。

因此,删除/禁用 App Engine 服务帐户、为给定的云功能创建特定服务帐户、为其分配所有相关的最低 IAM 角色并使用它可能会很有用。

作为旁注,我还建议删除/禁用默认的 Compute Engine 服务帐户,删除带有所有防火墙规则和子网的默认网络...但这是一个单独的故事。

【讨论】:

您能详细说明第三点吗?谢谢

以上是关于分配 GCP 函数服务帐号角色以使用 Terraform 与 Firebase 互动的主要内容,如果未能解决你的问题,请参考以下文章

Terraform GCP 将 IAM 角色分配给服务帐户

创建vCenter用户以及设置维护帐号特性权限分配

在 Terraform for GCP 中允许帐户和角色时出错

创建 GCP 服务帐户密钥时权限被拒绝

如何列出与 gcp 服务帐户关联的角色?

如何在 terraform 中正确创建具有角色的 gcp 服务帐户