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
[3] https://cloud.google.com/appengine/docs/standard/nodejs/configuring-your-app-with-app-yaml
读取gem版本0.2.0本身的文件是权限错误。
解决方法是直接从 GitHub 安装 rcloadenv,您可以将 gem 文件中的 gem 替换为以下行:
gem "rcloadenv", git: 'https://github.com/GoogleCloudPlatform/rcloadenv', branch: 'master', glob: 'ruby/*.gemspec'
使用元数据的解决方法在 AppEngine Standard 中不起作用。
我正在 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
[3] https://cloud.google.com/appengine/docs/standard/nodejs/configuring-your-app-with-app-yaml
读取gem版本0.2.0本身的文件是权限错误。 解决方法是直接从 GitHub 安装 rcloadenv,您可以将 gem 文件中的 gem 替换为以下行:
gem "rcloadenv", git: 'https://github.com/GoogleCloudPlatform/rcloadenv', branch: 'master', glob: 'ruby/*.gemspec'
使用元数据的解决方法在 AppEngine Standard 中不起作用。