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
文件通常会提交到存储库。
因此,有些人将密码注入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 中?
Thanks!