19

是否有将敏感信息(例如 API 密钥)传递给 Google Cloud Functions 的“官方”解决方案?特别是最好避免将此信息作为参数传递给函数,因为每次调用都是相同的。AWS Lambda 有一个使用加密环境变量的内置解决方案。Google Cloud Functions 是否有类似的方法?

我可以想象为此使用云存储桶或云数据存储,但这感觉非常手动。

4

5 回答 5

13

如果您将 Cloud Functions 与 Firebase 一起使用,则您正在寻找环境配置

这样,您就可以从 Firebase CLI 部署配置数据:

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

然后在你的函数中阅读它:

functions.config().someservice.id
于 2017-03-22T20:42:34.407 回答
6

您可以使用 Google 机密管理器。 https://cloud.google.com/secret-manager/docs

有关示例,请参见本文: https ://dev.to/googlecloud/using-secrets-in-google-cloud-functions-5aem

于 2020-02-05T13:25:29.073 回答
1

您可以选择的几个选项:

  1. GCP 运行时配置。设置一个只能由您的服务帐户访问的架构并将您的秘密放在那里。您在部署之前执行此操作。您的应用应该能够使用运行时配置 API 来访问这些。您可以使用这个漂亮的库:https ://www.npmjs.com/package/@google-cloud/rcloadenv
  2. 动态生成一个 JS,包括该信息作为您的云功能构建/部署的一部分,并将该文件作为您的云功能的一部分。
  3. 使用 Google KMS 存储密钥并通过 KMS 的 API 访问它
于 2018-03-20T21:36:19.963 回答
1

就目前而言,没有办法做到这一点。

于 2017-03-28T13:55:03.777 回答
0

其他答案已过时,因为 firebase-functions v3.18.0 推荐的方法是使用机密(如 env 但明确传递给特定函数,没有 .env 但远程配置):https ://firebase.google.com/docs /functions/config-env?hl=en#secret-manager

在 firebase-functions v3.18.0 发布环境变量支持之前,推荐使用 functions.config() 进行环境配置。这种方法仍然受支持,但我们建议所有新项目改用环境变量,因为它们更易于使用并提高代码的可移植性。

你可以像这样使用它: firebase functions:secrets:set MY_SECRET

并回答 CLI 的值。

然后在你的函数中:

exports.processPayment = functions
  // Make the secret available to this function
  .runWith({ secrets: ["MY_SECRET"] })
  .onCall((data, context) => {
    // Now you have access to process.env.MY_SECRET
  });
于 2022-02-22T13:50:26.387 回答