【发布时间】:2021-08-03 20:20:18
【问题描述】:
Strapi 框架(据我所知)要求在启动时提供数据库密码。通常,密码在database.js 文件中指定,如下所示:
module.exports = ({ env }) => ({
defaultConnection: 'default',
connections: {
default: {
connector: 'bookshelf',
settings: {
client: 'postgres',
host: '/cloudsql/myDatabaseInstanceName',
database: 'databaseName',
username: 'databaseUsername',
password: 'databasePassword',
},
},
},
});
这当然不是很安全,因为 database.js 文件通常会提交到 repo。
因此,有些人将密码注入database.js文件,而不是将其存储为环境变量:
module.exports = ({ env }) => ({
defaultConnection: 'default',
connections: {
default: {
connector: 'bookshelf',
settings: {
client: 'postgres',
host: `/cloudsql/${env('INSTANCE_CONNECTION_NAME')}`,
database: env('DATABASE_NAME'),
username: env('DATABASE_USERNAME'),
password: env('DATABASE_PASSWORD'),
},
},
},
});
但是,这也不是很安全。在许多运行时环境(包括我正在使用的 Google App Engine)中,任何项目用户都可以以纯文本形式查看环境密码。
理想情况下,我想将数据库密码存储在一个秘密保险库中(我正在使用 Google Secret Manager),并在启动时以某种方式将保险库中的密码提供给 database.js 文件。但我不明白如何实现?甚至可以从database.js 访问秘密保险库吗?或者,我还能如何将我的数据库密码安全地注入 Strapi?
谢谢!
【问题讨论】:
标签: node.js security google-app-engine strapi