在节点js中访问Google Cloud Secret Manager数据进行数据库连接

问题描述 投票:1回答:1

我们有一个nodejs应用程序,其中的基本要求是不使用config.json文件中的硬编码数据库密码,而是从Google Cloud Secret Manager中读取该密码,并且我能够获取该秘密值从那里。

但是当我尝试通过异步函数models / index.js中使用它时,出现了[[Promise {未决}]]错误。 这是我的

secret_manager.js

文件:let _ = require('lodash'); // Imports the Secret Manager library const { SecretManagerServiceClient } = require('@google-cloud/secret-manager'); let getSecret = async function (secretName) { try { if (!secretName) { throw new TypeError('secretName argument is required to getSecret()'); } if (typeof secretName !== 'string') { throw new TypeError('secretName must be a string to getSecret()'); } // Instantiates a client console.info('Creating a SecretManagerServiceClient') const client = new SecretManagerServiceClient(); console.info('Calling a accessSecretVersion') const [version] = await client.accessSecretVersion({ name: secretName, }); // Extract the payload as a string. const payload = version.payload.data.toString('utf8'); if (_.isNil(payload) || _.isEmpty(payload)) { let error = new Error() error.name = 'SecretAccessError'; error.message = 'Invalid Secret Value for ' + secretName; console.error(error); throw error; } console.log("++payload=>") console.log(payload) return { Payload: payload } } catch (error) { error.name = "SecretAccessError" console.error(error) throw error; } } module.exports = { getSecret: getSecret }

下面是我在index.js文件中的代码:

const secret = require('../secret_manager'); // The name of the secret const secretName = 'my secret location in GoogleCloud' let secretPassword; let getSecret = async function(secretName) { let result = await secret.getSecret(secretName); return result.Payload; } if(env=='development'){ secretPassword = getSecret(secretName); }else{ secretPassword = getSecret(secretName); } console.log("secret passwprd is:") console.log(secretPassword)

当我启动服务器时,这是我的输出:

[nodemon] starting `node start.js` Creating a SecretManagerServiceClient Calling a accessSecretVersion secret passwprd is: Promise { <pending> } Running a GraphQL API server at http://localhost:4000/graphql in development environment! ++payload=> **MYSECRETPASSWORD**

我如何在index.js中使用我的秘密管理器值来实现数据库连接的连续化

我们有一个nodejs应用程序,其中的基本要求是不使用config.json文件中的硬编码DB密码,而是从Google Cloud Secret Manager中读取它,并且我能够获取该密码...

node.js dbconnection google-secret-manager
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.