如何为多套生产级环境配置各自独立的Rails Credentials
Rails多环境凭证隔离配置方案
Rails 5.2及以上版本原生支持按环境隔离独立凭证,你当前遇到的多环境共享凭证问题,核心是AWS ElasticBeanstalk实例没有正确匹配运行环境对应的凭证配置,按以下步骤操作即可实现完全隔离:
操作步骤
1. 生成本地各环境专属凭证文件
分别执行以下命令生成四个环境的独立加密凭证与对应密钥:
rails credentials:edit --environment devrails credentials:edit --environment sandboxrails credentials:edit --environment stagingrails credentials:edit --environment production
执行完成后,会在项目config/credentials目录下生成对应环境的[环境名].yml.enc加密配置文件,以及[环境名].key解密密钥文件。
注意:
.key后缀的文件默认会被Git忽略,禁止将其提交到代码仓库,避免密钥泄露。
2. 配置ElasticBeanstalk各环境变量
进入AWS ElasticBeanstalk控制台,分别打开四个环境的配置 > 软件 > 环境变量配置页,添加两组变量:
- 针对dev环境:
- 添加
RAILS_ENV变量,值设为dev - 添加
RAILS_MASTER_KEY变量,值为本地config/credentials/dev.key文件的完整内容
- 添加
- 针对sandbox环境:
- 添加
RAILS_ENV变量,值设为sandbox - 添加
RAILS_MASTER_KEY变量,值为本地config/credentials/sandbox.key文件的完整内容
- 添加
- 针对staging环境:
- 添加
RAILS_ENV变量,值设为staging - 添加
RAILS_MASTER_KEY变量,值为本地config/credentials/staging.key文件的完整内容
- 添加
- 针对production环境:
- 添加
RAILS_ENV变量,值设为production - 添加
RAILS_MASTER_KEY变量,值为本地config/credentials/production.key文件的完整内容
- 添加
3. 部署验证
重新部署各环境的应用后,可进入对应环境的Rails控制台执行Rails.application.credentials.config,确认返回的配置为当前环境专属的凭证内容即可。
低版本Rails兼容方案
如果你的Rails版本低于6.0,没有原生环境凭证功能,可以使用config/secrets.yml按环境划分配置,所有敏感值通过EB环境变量传入,示例配置:
development: secret_key_base: <%= ENV["DEV_SECRET_KEY_BASE"] %> sandbox: secret_key_base: <%= ENV["SANDBOX_SECRET_KEY_BASE"] %> staging: secret_key_base: <%= ENV["STAGING_SECRET_KEY_BASE"] %> production: secret_key_base: <%= ENV["PROD_SECRET_KEY_BASE"] %>
内容的提问来源于stack exchange,提问作者Phillip Musiime
相关产品推荐
相关产品推荐

