从firestore触发云功能访问秘密

问题描述 投票:0回答:2

我正在使用 Google 的 Secret Manager 来访问我的云功能中的机密。到目前为止,对于我的所有函数(即 https 和 pubsub 函数)来说,这一切都工作得很好。 现在我编写了一个由 firestore 文档更改触发的函数:

exports.onDocumentUpdated = functions
  .runWith({ secrets: ["MY_SECRET"] })
  .firestore
  .document('documents/{documentId}')
  .onUpdate(async (change: func.Change<QueryDocumentSnapshot>, context)

在这种情况下,process.env.MY_SECRET 未定义。当我在 Cloud Console 中查找函数的机密时,我发现它可以访问我在另一个函数中使用的完全不同的机密。在此处添加 MY_SECRET 时,云功能可以正常工作,但只有在我通过 cli 重新部署之前,MY_SECRET 才会再次被删除。

我检查了其他秘密的权限,它们都显示完全相同的角色/主体。从字面上看,它们都是一样的,唯一的区别是这个函数是一个 firestore 触发函数。我错过了什么?

编辑: 又测试了以下两个功能:

exports.testSecret1 = functions
  .runWith({ secrets: ["TEST_SECRET"] })
  .https.onCall(async (data, context) => {
    func.logger.info(`${process.env.TEST_SECRET}`);
  })

exports.testSecret2 = functions
  .runWith({ secrets: ["TEST_SECRET"] })
  .firestore
  .document('documents/{documentId}')
  .onUpdate(async (change: func.Change<QueryDocumentSnapshot>, context) => {
    func.logger.info(`${process.env.TEST_SECRET}`);
  })

testSecret1
可以访问
TEST_SECRET
testSecret2
无法访问
TEST_SECRET
,打印 undefined

node.js firebase google-cloud-functions google-secret-manager
2个回答
2
投票

运行以下命令以授予访问您的秘密的权限

TEST_SECRET

firebase functions:secrets:access TEST_SECRET

如果您新创建机密,请使用以下命令

firebase functions:secrets:set SECRET_NAME

在部署之前,请确保您的函数代码允许函数使用

runWith
参数访问密钥。

查看此文档以获取更多信息。

还要确保您使用的是最新版本的

firebase-tools


0
投票

我无法使用您问题中的语法找到任何解决方案。但是,如果您更改代码以使用下面的语法样式,则可以在 Firestore 触发器中使用机密,如下所示

exports.myUpdate = onDocumentCreated({
    document: "/collection/{docID}",
    secrets: [SECRET_KEY]
  },
  async (event) => {
    const secretKey = SECRET_KEY.value()
    // code
    }
);

这个答案更彻底地解释了它并提供了文档。

© www.soinside.com 2019 - 2024. All rights reserved.