部署到 Google Cloud Functions 时如何处理密钥和凭据?

How to handle keys and credentials when deploying to Google Cloud Functions?

我有几个云函数(在 Python 中)需要一个模块包 auth,其中有一个子文件夹 credentials(主要包含 json 个文件Google 服务帐户文件或 Firebase 配置)。

从安全角度来看,我显然没有通过在 .gitignore 文件 (auth/credentials) 中添加文件夹来将这些文件包含在 .git 中。

但是,我现在不知道在部署 Google 云功能 (.gcloudignore) 时该怎么做。如果我使用凭据部署它,那么我想这些密钥会暴露在服务器上吗?我该如何克服这个问题?

我听说过一些关于环境变量的说法,但我不确定这是否比仅仅部署它更安全?

Google 方法是什么?

您有两个主要的解决方案可供您使用。首先是 Cloud Function 可以 运行 使用自定义服务帐户的身份。然后可以将此服务帐户与您的逻辑实现其任务所需的所有角色相关联。这样做的价值在于您的逻辑不需要明确知道凭据。进行通话的环境 "implicitly" 具备所需的一切。

参见:Per-function identity

第二种机制更符合你目前的做法,使用了Compute Metadata Server的概念。可以使用进行转接呼叫所需的令牌来配置此元数据。元数据与您的 Cloud Function 逻辑分开配置,后者仅根据需要检索数据。

参见:Fetching identity and access tokens