App Engine Standard Ruby 2.5 上 Rails 6 应用程序的安全配置

Secure configuration in Rails 6 app on App Engine Standard Ruby 2.5

我正在 Google 云上将香草 Rails 6 应用程序部署到 App Engine 标准 Ruby 2.5 运行时。

我无法弄清楚如何成功提供 RAILS_MASTER_KEY 环境变量,以便 Rails 可以解密我用于连接数据库等的加密凭据。

我不想将 RAILS_MASTER_KEY 放在 app.yaml 中,我也不想在每次部署时都包含 master.key 文件。如您所知,必须在启动 Rails 之前设置 RAILS_MASTER_KEY 环境变量,因此无法从我的应用程序内部加载它。

在 App Engine Flex 上的 Rails 应用程序中,我一直在使用运行时配置和 rcloadenv gem,方法是在我的 app.yaml 中使用它: 入口点:

bundle exec rcloadenv secrets -- bin/rails s

但是当我在 App Engine Standard 上做同样的事情时,我得到了这个错误:

A 2019-08-23T11:47:45.986319Z   /srv/vendor/bundle/ruby/2.5.0/bin/rcloadenv:23:in `load' 
A 2019-08-23T11:47:45.986308Z LoadError: cannot load such file -- /srv/vendor/bundle/ruby/2.5.0/gems/rcloadenv-0.2.0/bin/rcloadenv 
A 2019-08-23T11:47:45.986247Z bundler: failed to load command: rcloadenv (/srv/vendor/bundle/ruby/2.5.0/bin/rcloadenv) 

我看到入门文档建议使用元数据服务器和 google-cloud-env gem,但我没有看到 gem 中内置的任何内容它将元数据加载为环境变量。

有关我如何使用 Ruby 2.5 的 App Engine 标准的任何指示:

1) 可以让 rcloadenv gem 工作吗?

2) 或者可以获取 google-cloud-env gem 将元数据加载到环境变量中?

3) 或者可以用 Rails 6 支持的另一种方式安全地存储和访问 RAILS_MASTER_KEY?

根据文档 [1],在 App Engine 标准中声明环境变量的唯一替代方法是通过 app.yaml 文件。

尽管如此,本教程使用 Cloud Build 将环境变量添加到 Node JS 项目[2],也许此选项也适用于 Ruby。

Node JS [3] 和 Python [4] 上提供了不只使用 app.yaml 设置环境变量的其他选项。

[1] https://cloud.google.com/appengine/docs/standard/ruby/configuring-your-app-with-app-yaml

[2] https://medium.com/@brian.young.pro/how-to-add-environmental-variables-to-google-app-engine-node-js-using-cloud-build-5ce31ee63d7

[3] https://cloud.google.com/appengine/docs/standard/nodejs/configuring-your-app-with-app-yaml

[4]https://cloud.google.com/python/setup

读取gem版本0.2.0本身的文件是权限错误。 解决方法是直接从 GitHub 安装 rcloadenv,您可以将 gem 文件中的 gem 替换为以下行:

gem "rcloadenv", git: 'https://github.com/GoogleCloudPlatform/rcloadenv', branch: 'master', glob: 'ruby/*.gemspec'

使用元数据的解决方法在 AppEngine Standard 中不起作用。