Lambda调用Firestore报未认证错误,本地运行正常
问题解决:AWS Lambda调用Firestore出现PEM格式认证错误
问题分析
错误error:0909006C:PEM routines:get_name:no start line的核心原因是私钥格式不符合PEM标准。本地运行正常是因为JSON配置文件会自动将\\n解析为实际换行符,而AWS Parameter Store存储的私钥以字符串形式保留了\\n转义序列,Lambda加载后未做转换,导致Firestore SDK无法识别合法的PEM密钥。
解决方案
在初始化Firestore客户端时,将私钥中的转义换行符\\n替换为实际换行符\n:
修改后的firestore.js
const {Firestore} = require('@google-cloud/firestore'); const obfCE = process.env.FIRESTORE_CLIENTEMAIL.substring(0,3) + "*".repeat(process.env.FIRESTORE_CLIENTEMAIL.length-3) const rawPK = process.env.FIRESTORE_PRIVATEKEY const processedPK = rawPK.replace(/\\n/g, '\n') const obfPK = processedPK.substring(0,3) + "*".repeat(processedPK.length-3) console.log(`Creating fs object with (${obfCE}), (${obfPK})`) const firestore = new Firestore({ projectId: process.env.FIRESTORE_PROJECT, credentials: { client_email: process.env.FIRESTORE_CLIENTEMAIL, private_key: processedPK, }}) exports.fetchPlayer = async (playerId) => { const document = firestore.doc(`players/${playerId}`); try { let player = await (await document.get()).data() return player } catch (ex) { console.log(`fs: fetch player for ${playerId} - Exception thrown: ${ex}`) } return null }
验证说明
- 处理后的私钥会还原为正确的PEM格式(包含实际换行),Firestore SDK可正常解析认证。
- 日志中输出的脱敏私钥开头仍为
---,但内部换行符已修复,不会影响脱敏效果。
内容的提问来源于stack exchange,提问作者gbryant
相关产品推荐
相关产品推荐

